diff options
937 files changed, 69297 insertions, 36775 deletions
diff --git a/.gitignore b/.gitignore index 52937b8679..fe504482b3 100644 --- a/.gitignore +++ b/.gitignore @@ -238,6 +238,7 @@ ClientBin/ *.pfx *.publishsettings node_modules/ +__pycache__/ # KDE .directory @@ -310,5 +311,8 @@ platform/windows/godot_res.res /.vs /.vscode +# Visual Studio Code workspace file +*.code-workspace + # Scons progress indicator .scons_node_count diff --git a/.travis.yml b/.travis.yml index 7161a3e029..a8bc8289e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,7 +29,7 @@ matrix: - clang-format-6.0 - libstdc++6 # >= 4.9 needed for clang-format-6.0 - - env: PLATFORM=x11 TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-mono-gcc EXTRA_ARGS="module_mono_enabled=yes mono_glue=no" + - env: PLATFORM=x11 TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-mono-gcc EXTRA_ARGS="module_mono_enabled=yes mono_glue=no werror=yes" os: linux compiler: gcc addons: @@ -38,7 +38,7 @@ matrix: - mono packages: - &linux_deps [libasound2-dev, libfreetype6-dev, libgl1-mesa-dev, libglu1-mesa-dev, libx11-dev, libxcursor-dev, libxi-dev, libxinerama-dev, libxrandr-dev] - - &linux_mono_deps [mono-devel, msbuild] + - &linux_mono_deps [mono-devel, msbuild, nuget] coverity_scan: project: @@ -49,7 +49,7 @@ matrix: build_command: "scons p=x11 -j2 $OPTIONS" branch_pattern: coverity_scan - - env: PLATFORM=x11 TOOLS=no TARGET=release CACHE_NAME=${PLATFORM}-clang + - env: PLATFORM=x11 TOOLS=no TARGET=release CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="werror=yes" os: linux compiler: clang addons: @@ -57,7 +57,7 @@ matrix: packages: - *linux_deps - - env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang + - env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="werror=yes" os: linux compiler: clang diff --git a/AUTHORS.md b/AUTHORS.md index 9666145582..2f109aff6e 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -45,9 +45,11 @@ name is available. Bojidar Marinov (bojidar-bg) bruvzg Carl Olsson (not-surt) + Chris Bradfield (cbscribe) Dana Olson (adolson) Daniel J. Ramirez (djrm) Dmitry Koteroff (Krakean) + DualMatrix Emmanuel Leblond (touilleMan) Eric Lasota (elasota) est31 @@ -71,7 +73,7 @@ name is available. J08nY Jakub Grzesik (kubecz3k) Jérôme GULLY (Nutriz) - JFonS + Joan Fons Sanchez (JFonS) Johan Manuel (29jm) Joshua Grams (JoshuaGrams) Juan Linietsky (reduz) @@ -111,9 +113,9 @@ name is available. Ramesh Ravone (RameshRavone) Ray Koopa (RayKoopa) Rémi Verschelde (akien-mga) + Rhody Lugo (rraallvv) Roberto F. Arroyo (robfram) romulox-x - rraallvv Ruslan Mustakov (endragor) Saniko (sanikoyes) SaracenOne diff --git a/CHANGELOG.md b/CHANGELOG.md index 533968886e..6a0310f904 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Setters and getters for node properties. - Underscores in number literals are now allowed for improved readability (for example,`1_000_000`). - Improved performance (+20% to +40%, based on various benchmarks). -- [Feature tags](http://docs.godotengine.org/en/latest/learning/workflow/export/feature_tags.html) in the Project Settings, for custom per-platform settings. +- [Feature tags](http://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html) in the Project Settings, for custom per-platform settings. - Full support for the [glTF 2.0](https://www.khronos.org/gltf/) 3D interchange format. - Freelook and fly navigation to the 3D editor. - Built-in editor logging (logging standard output to a file), disabled by default. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 68ec20a525..04e42d14b6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,7 +59,8 @@ by drag and dropping the file in the GitHub edition field. If you want to add new engine functionalities, please make sure that: -* This functionality is desired. +* This functionality is desired, which means that it solves a common use case + that several users will need in their real-life projects. * You talked to other developers on how to implement it best (on either communication channel, and maybe in a GitHub issue first before making your PR). @@ -70,11 +71,23 @@ Similar rules can be applied when contributing bug fixes - it's always best to discuss the implementation in the bug report first if you are not 100% about what would be the best fix. +[This blog post](https://godotengine.org/article/will-your-contribution-be-merged-heres-how-tell) +outlines the process used by core developers when assessing PRs. We strongly +recommend that you have a look at it to know what's important to take into +account for a PR to be considered for merging. + +In addition to the following tips, also take a look at the +[Engine development guide](https://docs.godotengine.org/en/latest/development/cpp/) +for an introduction to developing on Godot. + +The [Contributing docs](http://docs.godotengine.org/en/latest/community/contributing/index.html) +also have important information on the PR workflow and the code style we use. + #### Be nice to the git history -Try to make simple PRs with that handle one specific topic. Just like for -reporting issues, it's better to open 3 different PRs that each address a -different issue than one big PR with three commits. +Try to make simple PRs that handle one specific topic. Just like for reporting +issues, it's better to open 3 different PRs that each address a different issue +than one big PR with three commits. When updating your fork with upstream changes, please use ``git pull --rebase`` to avoid creating "merge commits". Those commits unnecessarily pollute the git @@ -89,6 +102,9 @@ Internet). This git style guide has some good practices to have in mind: [Git Style Guide](https://github.com/agis-/git-style-guide) +See our [PR workflow](http://docs.godotengine.org/en/latest/community/contributing/pr_workflow.html) +documentation for tips on using Git, amending commits and rebasing branches. + #### Format your commit logs with readability in mind The way you format your commit logs is quite important to ensure that the @@ -134,6 +150,10 @@ Weblate](https://hosted.weblate.org/projects/godot-engine/godot), an open source and web-based translation platform. Please refer to the [translation readme](editor/translations/README.md) for more information. +You can also help translate [Godot's +documentation](https://hosted.weblate.org/projects/godot-engine/godot-docs/) +on Weblate. + ## Communicating with developers The Godot Engine community has [many communication @@ -13,66 +13,79 @@ generous deed immortalized in the next stable release of Godot Engine. ## Platinum sponsors Enjin Coin <https://enjincoin.io> - GameDev.TV <https://gdev.tv/godot> ## Gold sponsors Gamblify <https://www.gamblify.com> + GameDev.TV <https://gdev.tv/godot> + Image Campus <https://www.imagecampus.edu.ar> ## Mini sponsors + Alan Beauchamp + Andrew Dunai + Arda Erol Brandon Lamb Christian Uldall Pedersen - Christopher Igoe Christoph Woinke GameDev.net Hein-Pieter van Braam Jamal Alyafei + Javary Games Jay Sistar + Justin Arnold + Kyle Szklenski + Leona Eden Matthieu Huvé + Maxim Karsten Mike King Nathan Warden Neal Gompa (Conan Kudo) - Pascal Julien Patrick Aarstad - rottis + "Rainway " Ruslan Mustakov Slobodan Milnovic + StarFlare Software Stephan Lanfermann Stoney Meyerhoeffer + thechris Thomas Mathews VilliHaukka ## Gold donors - 3Dexplorer Asdf cheese65536 + David Gehrig K9Kraken - Kris Michael Manuele Finocchiaro Nathanael Beisiegel Officine Pixel S.n.c. + Retro Village + Valorware + Zashi Zaven Muradyan + 13MHz Allen Schade Andreas Schüle Austen McRae Daniel Lynn - David Gehrig Florian Breisch Gary Oberbrunner + Jay Horton Johannes Wuensch - Josep G. Camarasa + Jon Woodward Joshua Lesperance + Justo Delgado Baudà Krzysztof Dluzniewski - Kyle Szklenski - Mohammad Taleb + Moonwards + Mored1984 + paul gruenbacher Paul LaMotte - Ranoller Sergey Svenne Krap - Timothy Hagberg + Xananax BanjoNode2D Beliar @@ -84,14 +97,14 @@ generous deed immortalized in the next stable release of Godot Engine. David Churchill Dean Harmon John - Justo Delgado Baudà + Krzysztof Jankowski KTL Laurence Bannister - paul gruenbacher + Markus Wiesner + Nathan Lundquist Rami Robert Willes Robin Arys - Rodrigo Loli Ronnie Ashlock ScottMakesGames Thomas Bjarnelöf @@ -102,49 +115,47 @@ generous deed immortalized in the next stable release of Godot Engine. Alessandra Pereyra Alexey Dyadchenko Amanda Haldy - Anthony Ryan - Branwen Danielle Zakariasen + Benjamin W Flint + Chau Siu Hung Chris Brown Chris Petrich + Christian Leth Jeppesen + Christopher Cody Parker + ComicSads D Deadly Lampshade E.G. Eric Eric Monson + Ethan Bennis + Eugenio Hugo Salgüero Jáñez Fidget Sinner flesk G Barnes + Gero GGGames.org Giovanni Solimeno Guilherme Felipe de C. G. da Silva - Hasen Judy Heath Hayes - Jay Horton Jeppe Zapp joe513 + Jose Malheiro Juraj Móza - Justin Arnold - Lars Wuethrich + Klavdij Voncina Leandro Voltolino - Markus Wiesner + Marius Kamm Marvin - Nahuel Sacchetti - Neal Barry Nick Nikitin - Pablo Cholaky - Patrick Schnorbus + oziatek Pete Goodwin + Ranoller ray-tracer Ruben Soares Luis - Rufus Xavier Sarsaparilla - Sindre Sømme Sofox Stoned Xander - Tim Dalporto - Trent McPheron - Wilfrid ARNOLD WytRabbit + Zachariah Gibbons ## Silver donors @@ -155,9 +166,8 @@ generous deed immortalized in the next stable release of Godot Engine. Alder Stefano Alessandro Senese Alexander Koppe - Anders Jensen-Urstad + Andreas Krampitz Anthony Bongiovanni - Arda Erol Arthur S. Muszynski Artur Barichello Aubrey Falconer @@ -165,54 +175,56 @@ generous deed immortalized in the next stable release of Godot Engine. Bailey Bastian Böhm Benedikt - Benjamin Beshara Ben Vercammen + Bernd Jänichen Blair Allen Brandon Bryan Stevenson + bugcaptor Carl Winder Carwyn Edwards Casey Foote Chris Chapin Christian Baune Christian Winter - Christopher Schmitt - Chris Wilson Collin Shooltz Daniel Johnson Daniel Kaplan DanielMaximiano - David David Cravens David May - Disktra Dominik Wetzel - dRez Games Duy Kevin Nguyen Edward Herbert Elias Nykrem Eric Martini - Eugenio Hugo Salgüero Jáñez - Extarys + Eric McCarthy + Eric Williams Fabian Becker fengjiongmax - Francesco Lisi + Florian Richer + Foomf G3Dev sà rl + George Lesica Gerrit Großkopf Gilberto K. Otubo + Grant Clarke Greg Olson Guldoman Heribert Hirth Hunter Jones ialex32x + Igor Buzatovic Jahn Johansen Jaime Ruiz-Borau Vizárraga - Jed + Jako Danar Jeff Hungerford + Joan Fons Joel Fivat Johan Lindberg Jonas Rudlang Jonas Yamazaki + Jonathan G Jonathan Martin Jonathan Nieto Jonathon @@ -226,18 +238,20 @@ generous deed immortalized in the next stable release of Godot Engine. Justin Luk KC Chan Kevin Boyer - Kevin Kamper Meejach Petersen - Klavdij Voncina - Krzysztof Jankowski + Kevin van Rooijen + Klagsam + KsyTek Games + Kuan Cheang + kycho Linus Lind Lundgren Loreshaper Games - Luc Magitem Luis Moraes Macil magodev - Manolis Makris + Major Haul + Malcolm Martin Eigel - Martins Odabi + Matt Welke Max R.R. Collada Maxwell Mertcan Mermerkaya @@ -248,54 +262,59 @@ generous deed immortalized in the next stable release of Godot Engine. Mikael Olsson MoM Moritz Laass + Moritz Weissenberger Natrim nee Neil Blakey-Milner Nick Pavlica Niclas Eriksen + Nicolás Montaña Nicolas SAN AGUSTIN - Niko Leopold - Noi Sek - Pablo Seibelt Pan Ip Pascal Grüter Pat LaBine Patrick Nafarrete Paul E Hansen + Paul Gieske Paul Mason Paweł Kowal + Phillip Ryals Pierre-Igor Berthet Pietro Vertechi Piotr Kaczmarski Prokhorenko Leonid + Psyagnostic + rayos Rémi Verschelde + Ricardo Alcantara Richman Stewart Roger Burgess Roger Smith Roman Tinkov Sasori Olkof + Sebastian Michailidis + Shane Spoor Sootstone - Stefan Butucea - The K-B Theo Cranmore - Thibaud Galloy Thibault Barbaroux Thomas Bell Thomas Holmes Thomas Kurz tiansheng li Tim + Tim Drumheller Tom Larrow - Tristan Crawford + Troy Austin Trym Nilsen + Tryggve Sollid Tyler Stafos UltyX + Vaiktorg Victor Viktor Ferenczi waka nya - werner mendizabal + William Hogben Wout Standaert - Yu He ## Bronze donors @@ -37,10 +37,10 @@ Official binaries for the Godot editor and the export templates can be found #### Compiling from source -[See the official docs](http://docs.godotengine.org/en/latest/development/compiling/) +[See the official docs](https://docs.godotengine.org/en/latest/development/compiling/) for compilation instructions for every supported platform. -### Community +### Community and contributing Godot is not only an engine but an ever-growing community of users and engine developers. The main community channels are listed [on the homepage](https://godotengine.org/community). @@ -49,12 +49,14 @@ To get in touch with the developers, the best way is to join the [#godotengine IRC channel](https://webchat.freenode.net/?channels=godotengine) on Freenode. +To get started contributing to the project, see the [contributing guide](CONTRIBUTING.md). + ### Documentation and demos -The official documentation is hosted on [ReadTheDocs](http://docs.godotengine.org). +The official documentation is hosted on [ReadTheDocs](https://docs.godotengine.org). It is maintained by the Godot community in its own [GitHub repository](https://github.com/godotengine/godot-docs). -The [class reference](http://docs.godotengine.org/en/latest/classes/) +The [class reference](https://docs.godotengine.org/en/latest/classes/) is also accessible from within the engine. The official demos are maintained in their own [GitHub repository](https://github.com/godotengine/godot-demo-projects) diff --git a/SConstruct b/SConstruct index a056a0c3ae..8b7b95a600 100644 --- a/SConstruct +++ b/SConstruct @@ -159,15 +159,16 @@ opts.Add(BoolVariable('minizip', "Enable ZIP archive support using minizip", Tru opts.Add(BoolVariable('xaudio2', "Enable the XAudio2 audio driver", False)) # Advanced options -opts.Add(BoolVariable('disable_3d', "Disable 3D nodes for a smaller executable", False)) -opts.Add(BoolVariable('disable_advanced_gui', "Disable advanced 3D GUI nodes and behaviors", False)) -opts.Add('extra_suffix', "Custom extra suffix added to the base filename of all generated binary files", '') opts.Add(BoolVariable('verbose', "Enable verbose output for the compilation", False)) -opts.Add(BoolVariable('vsproj', "Generate a Visual Studio solution", False)) -opts.Add(EnumVariable('warnings', "Set the level of warnings emitted during compilation", 'no', ('extra', 'all', 'moderate', 'no'))) opts.Add(BoolVariable('progress', "Show a progress indicator during compilation", True)) +opts.Add(EnumVariable('warnings', "Set the level of warnings emitted during compilation", 'all', ('extra', 'all', 'moderate', 'no'))) +opts.Add(BoolVariable('werror', "Treat compiler warnings as errors. Depends on the level of warnings set with 'warnings'", False)) opts.Add(BoolVariable('dev', "If yes, alias for verbose=yes warnings=all", False)) +opts.Add('extra_suffix', "Custom extra suffix added to the base filename of all generated binary files", '') +opts.Add(BoolVariable('vsproj', "Generate a Visual Studio solution", False)) opts.Add(EnumVariable('macports_clang', "Build using Clang from MacPorts", 'no', ('no', '5.0', 'devel'))) +opts.Add(BoolVariable('disable_3d', "Disable 3D nodes for a smaller executable", False)) +opts.Add(BoolVariable('disable_advanced_gui', "Disable advanced 3D GUI nodes and behaviors", False)) opts.Add(BoolVariable('no_editor_splash', "Don't use the custom splash screen for the editor", False)) opts.Add('system_certs_path', "Use this path as SSL certificates default for editor (for package maintainers)", '') @@ -234,7 +235,7 @@ env_base.platform_exporters = platform_exporters env_base.platform_apis = platform_apis if (env_base['target'] == 'debug'): - env_base.Append(CPPDEFINES=['DEBUG_MEMORY_ALLOC']) + env_base.Append(CPPDEFINES=['DEBUG_MEMORY_ALLOC','DISABLE_FORCED_INLINE']) if (env_base['no_editor_splash']): env_base.Append(CPPDEFINES=['NO_EDITOR_SPLASH']) @@ -317,35 +318,41 @@ if selected_platform in platform_list: # must happen after the flags, so when flags are used by configure, stuff happens (ie, ssl on x11) detect.configure(env) - if (env["warnings"] == 'yes'): - print("WARNING: warnings=yes is deprecated; assuming warnings=all") - + # Configure compiler warnings if env.msvc: - disable_nonessential_warnings = ['/wd4267', '/wd4244', '/wd4305', '/wd4800'] # Truncations, narrowing conversions... + # Truncations, narrowing conversions, signed/unsigned comparisons... + disable_nonessential_warnings = ['/wd4267', '/wd4244', '/wd4305', '/wd4018', '/wd4800'] if (env["warnings"] == 'extra'): env.Append(CCFLAGS=['/Wall']) # Implies /W4 - elif (env["warnings"] == 'all' or env["warnings"] == 'yes'): + elif (env["warnings"] == 'all'): env.Append(CCFLAGS=['/W3'] + disable_nonessential_warnings) elif (env["warnings"] == 'moderate'): - # C4244 shouldn't be needed here being a level-3 warning, but it is env.Append(CCFLAGS=['/W2'] + disable_nonessential_warnings) else: # 'no' env.Append(CCFLAGS=['/w']) # Set exception handling model to avoid warnings caused by Windows system headers. env.Append(CCFLAGS=['/EHsc']) + if (env["werror"]): + env.Append(CCFLAGS=['/WX']) else: # Rest of the world disable_nonessential_warnings = ['-Wno-sign-compare'] if (env["warnings"] == 'extra'): env.Append(CCFLAGS=['-Wall', '-Wextra']) - elif (env["warnings"] == 'all' or env["warnings"] == 'yes'): + elif (env["warnings"] == 'all'): env.Append(CCFLAGS=['-Wall'] + disable_nonessential_warnings) elif (env["warnings"] == 'moderate'): env.Append(CCFLAGS=['-Wall', '-Wno-unused'] + disable_nonessential_warnings) else: # 'no' env.Append(CCFLAGS=['-w']) - env.Append(CCFLAGS=['-Werror=return-type']) + if (env["werror"]): + env.Append(CCFLAGS=['-Werror']) + else: # always enable those errors + env.Append(CCFLAGS=['-Werror=return-type']) - suffix = "." + selected_platform + if (hasattr(detect, 'get_program_suffix')): + suffix = "." + detect.get_program_suffix() + else: + suffix = "." + selected_platform if (env["target"] == "release"): if env["tools"]: @@ -418,8 +425,13 @@ if selected_platform in platform_list: # (SH)LIBSUFFIX will be used for our own built libraries # LIBSUFFIXES contains LIBSUFFIX and SHLIBSUFFIX by default, # so we need to append the default suffixes to keep the ability - # to link against thirdparty libraries (.a, .so, .dll, etc.). - env["LIBSUFFIXES"] += [env["LIBSUFFIX"], env["SHLIBSUFFIX"]] + # to link against thirdparty libraries (.a, .so, .lib, etc.). + if os.name == "nt": + # On Windows, only static libraries and import libraries can be + # statically linked - both using .lib extension + env["LIBSUFFIXES"] += [env["LIBSUFFIX"]] + else: + env["LIBSUFFIXES"] += [env["LIBSUFFIX"], env["SHLIBSUFFIX"]] env["LIBSUFFIX"] = suffix + env["LIBSUFFIX"] env["SHLIBSUFFIX"] = suffix + env["SHLIBSUFFIX"] @@ -540,7 +552,7 @@ if 'env' in locals(): [os.remove(f) for f in files] def file_list(self): - if self.path == None: + if self.path is None: # Nothing to do return [] # Gather a list of (filename, (size, atime)) within the @@ -565,7 +577,7 @@ if 'env' in locals(): if sum > self.limit: mark = i break - if mark == None: + if mark is None: return [] else: return [x[0] for x in file_stat[mark:]] diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index 57654e96dc..0032c43179 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -180,6 +180,7 @@ void _ResourceSaver::_bind_methods() { BIND_ENUM_CONSTANT(FLAG_OMIT_EDITOR_PROPERTIES); BIND_ENUM_CONSTANT(FLAG_SAVE_BIG_ENDIAN); BIND_ENUM_CONSTANT(FLAG_COMPRESS); + BIND_ENUM_CONSTANT(FLAG_REPLACE_SUBRESOURCE_PATHS); } _ResourceSaver::_ResourceSaver() { @@ -1019,6 +1020,11 @@ void _OS::center_window() { OS::get_singleton()->center_window(); } +void _OS::move_window_to_foreground() { + + OS::get_singleton()->move_window_to_foreground(); +} + bool _OS::is_debug_build() const { #ifdef DEBUG_ENABLED @@ -1120,6 +1126,7 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("request_attention"), &_OS::request_attention); ClassDB::bind_method(D_METHOD("get_real_window_size"), &_OS::get_real_window_size); ClassDB::bind_method(D_METHOD("center_window"), &_OS::center_window); + ClassDB::bind_method(D_METHOD("move_window_to_foreground"), &_OS::move_window_to_foreground); ClassDB::bind_method(D_METHOD("set_borderless_window", "borderless"), &_OS::set_borderless_window); ClassDB::bind_method(D_METHOD("get_borderless_window"), &_OS::get_borderless_window); @@ -1747,9 +1754,9 @@ String _File::get_line() const { return f->get_line(); } -Vector<String> _File::get_csv_line(String delim) const { +Vector<String> _File::get_csv_line(const String &p_delim) const { ERR_FAIL_COND_V(!f, Vector<String>()); - return f->get_csv_line(delim); + return f->get_csv_line(p_delim); } /**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac) @@ -1846,6 +1853,11 @@ void _File::store_line(const String &p_string) { f->store_line(p_string); } +void _File::store_csv_line(const Vector<String> &p_values, const String &p_delim) { + ERR_FAIL_COND(!f); + f->store_csv_line(p_values, p_delim); +} + void _File::store_buffer(const PoolVector<uint8_t> &p_buffer) { ERR_FAIL_COND(!f); @@ -1929,6 +1941,7 @@ void _File::_bind_methods() { ClassDB::bind_method(D_METHOD("get_real"), &_File::get_real); ClassDB::bind_method(D_METHOD("get_buffer", "len"), &_File::get_buffer); ClassDB::bind_method(D_METHOD("get_line"), &_File::get_line); + ClassDB::bind_method(D_METHOD("get_csv_line", "delim"), &_File::get_csv_line, DEFVAL(",")); ClassDB::bind_method(D_METHOD("get_as_text"), &_File::get_as_text); ClassDB::bind_method(D_METHOD("get_md5", "path"), &_File::get_md5); ClassDB::bind_method(D_METHOD("get_sha256", "path"), &_File::get_sha256); @@ -1936,7 +1949,6 @@ void _File::_bind_methods() { ClassDB::bind_method(D_METHOD("set_endian_swap", "enable"), &_File::set_endian_swap); ClassDB::bind_method(D_METHOD("get_error"), &_File::get_error); ClassDB::bind_method(D_METHOD("get_var"), &_File::get_var); - ClassDB::bind_method(D_METHOD("get_csv_line", "delim"), &_File::get_csv_line, DEFVAL(",")); ClassDB::bind_method(D_METHOD("store_8", "value"), &_File::store_8); ClassDB::bind_method(D_METHOD("store_16", "value"), &_File::store_16); @@ -1947,6 +1959,7 @@ void _File::_bind_methods() { ClassDB::bind_method(D_METHOD("store_real", "value"), &_File::store_real); ClassDB::bind_method(D_METHOD("store_buffer", "buffer"), &_File::store_buffer); ClassDB::bind_method(D_METHOD("store_line", "line"), &_File::store_line); + ClassDB::bind_method(D_METHOD("store_csv_line", "values", "delim"), &_File::store_csv_line, DEFVAL(",")); ClassDB::bind_method(D_METHOD("store_string", "string"), &_File::store_string); ClassDB::bind_method(D_METHOD("store_var", "value"), &_File::store_var); @@ -2487,7 +2500,7 @@ _Thread::~_Thread() { if (active) { ERR_EXPLAIN("Reference to a Thread object object was lost while the thread is still running..."); } - ERR_FAIL_COND(active == true); + ERR_FAIL_COND(active); } ///////////////////////////////////// @@ -2859,10 +2872,10 @@ void JSONParseResult::_bind_methods() { ClassDB::bind_method(D_METHOD("set_error_line", "error_line"), &JSONParseResult::set_error_line); ClassDB::bind_method(D_METHOD("set_result", "result"), &JSONParseResult::set_result); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "error", PROPERTY_HINT_NONE, "Error", PROPERTY_USAGE_CLASS_IS_ENUM), "set_error", "get_error"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "error_string"), "set_error_string", "get_error_string"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "error_line"), "set_error_line", "get_error_line"); - ADD_PROPERTYNZ(PropertyInfo(Variant::NIL, "result", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT), "set_result", "get_result"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "error", PROPERTY_HINT_NONE, "Error", PROPERTY_USAGE_CLASS_IS_ENUM), "set_error", "get_error"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "error_string"), "set_error_string", "get_error_string"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "error_line"), "set_error_line", "get_error_line"); + ADD_PROPERTY(PropertyInfo(Variant::NIL, "result", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT), "set_result", "get_result"); } void JSONParseResult::set_error(Error p_error) { diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 3a913e01ed..720b14bf56 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -80,6 +80,7 @@ public: FLAG_OMIT_EDITOR_PROPERTIES = 8, FLAG_SAVE_BIG_ENDIAN = 16, FLAG_COMPRESS = 32, + FLAG_REPLACE_SUBRESOURCE_PATHS = 64, }; static _ResourceSaver *get_singleton() { return singleton; } @@ -184,6 +185,7 @@ public: virtual bool is_window_always_on_top() const; virtual void request_attention(); virtual void center_window(); + virtual void move_window_to_foreground(); virtual void set_borderless_window(bool p_borderless); virtual bool get_borderless_window() const; @@ -453,6 +455,7 @@ public: PoolVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes String get_line() const; + Vector<String> get_csv_line(const String &p_delim = ",") const; String get_as_text() const; String get_md5(const String &p_path) const; String get_sha256(const String &p_path) const; @@ -478,12 +481,11 @@ public: void store_string(const String &p_string); void store_line(const String &p_string); + void store_csv_line(const Vector<String> &p_values, const String &p_delim = ","); virtual void store_pascal_string(const String &p_string); virtual String get_pascal_string(); - Vector<String> get_csv_line(String delim = ",") const; - void store_buffer(const PoolVector<uint8_t> &p_buffer); ///< store an array of bytes void store_var(const Variant &p_var); diff --git a/core/class_db.cpp b/core/class_db.cpp index dcc07f8f41..052a4586fe 100644 --- a/core/class_db.cpp +++ b/core/class_db.cpp @@ -809,10 +809,10 @@ void ClassDB::add_signal(StringName p_class, const MethodInfo &p_signal) { ClassInfo *type = classes.getptr(p_class); ERR_FAIL_COND(!type); - ClassInfo *check = type; StringName sname = p_signal.name; -#ifdef DEBUG_METHODS_ENABLED +#ifdef DEBUG_METHODS_ENABLED + ClassInfo *check = type; while (check) { if (check->signal_map.has(sname)) { ERR_EXPLAIN("Type " + String(p_class) + " already has signal: " + String(sname)); @@ -936,9 +936,8 @@ void ClassDB::add_property(StringName p_class, const PropertyInfo &p_pinfo, cons } #ifdef DEBUG_METHODS_ENABLED - if (type->property_setget.has(p_pinfo.name)) { - ERR_EXPLAIN("Object already has property: " + p_class); + ERR_EXPLAIN("Object " + p_class + " already has property: " + p_pinfo.name); ERR_FAIL(); } #endif @@ -1367,6 +1366,41 @@ void ClassDB::get_extensions_for_type(const StringName &p_class, List<String> *p } } +HashMap<StringName, HashMap<StringName, Variant> > ClassDB::default_values; + +Variant ClassDB::class_get_default_property_value(const StringName &p_class, const StringName &p_property) { + + if (!default_values.has(p_class)) { + + default_values[p_class] = HashMap<StringName, Variant>(); + + if (ClassDB::can_instance(p_class)) { + + Object *c = ClassDB::instance(p_class); + List<PropertyInfo> plist; + c->get_property_list(&plist); + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { + if (E->get().usage & (PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR)) { + + Variant v = c->get(E->get().name); + default_values[p_class][E->get().name] = v; + } + } + memdelete(c); + } + } + + if (!default_values.has(p_class)) { + return Variant(); + } + + if (!default_values[p_class].has(p_property)) { + return Variant(); + } + + return default_values[p_class][p_property]; +} + RWLock *ClassDB::lock = NULL; void ClassDB::init() { @@ -1393,6 +1427,7 @@ void ClassDB::cleanup() { classes.clear(); resource_base_extensions.clear(); compat_classes.clear(); + default_values.clear(); memdelete(lock); } diff --git a/core/class_db.h b/core/class_db.h index 11cc3033cf..75f9e8d6a7 100644 --- a/core/class_db.h +++ b/core/class_db.h @@ -161,6 +161,8 @@ public: static void _add_class2(const StringName &p_class, const StringName &p_inherits); + static HashMap<StringName, HashMap<StringName, Variant> > default_values; + public: // DO NOT USE THIS!!!!!! NEEDS TO BE PUBLIC BUT DO NOT USE NO MATTER WHAT!!! template <class T> @@ -352,6 +354,8 @@ public: static void get_enum_list(const StringName &p_class, List<StringName> *p_enums, bool p_no_inheritance = false); static void get_enum_constants(const StringName &p_class, const StringName &p_enum, List<StringName> *p_constants, bool p_no_inheritance = false); + static Variant class_get_default_property_value(const StringName &p_class, const StringName &p_property); + static StringName get_category(const StringName &p_node); static void set_class_enabled(StringName p_class, bool p_enable); diff --git a/core/color.cpp b/core/color.cpp index 55dd1ec6b9..ac314417ec 100644 --- a/core/color.cpp +++ b/core/color.cpp @@ -468,7 +468,7 @@ String Color::to_html(bool p_alpha) const { return txt; } -Color Color::from_hsv(float p_h, float p_s, float p_v, float p_a) { +Color Color::from_hsv(float p_h, float p_s, float p_v, float p_a) const { p_h = Math::fmod(p_h * 360.0f, 360.0f); if (p_h < 0.0) diff --git a/core/color.h b/core/color.h index add61343ff..d6ad5f91c5 100644 --- a/core/color.h +++ b/core/color.h @@ -194,7 +194,7 @@ struct Color { static bool html_is_valid(const String &p_color); static Color named(const String &p_name); String to_html(bool p_alpha = true) const; - Color from_hsv(float p_h, float p_s, float p_v, float p_a); + Color from_hsv(float p_h, float p_s, float p_v, float p_a) const; static Color from_rgbe9995(uint32_t p_color); _FORCE_INLINE_ bool operator<(const Color &p_color) const; //used in set keys diff --git a/core/cowdata.h b/core/cowdata.h index 9e75d4ed55..54ece4c856 100644 --- a/core/cowdata.h +++ b/core/cowdata.h @@ -87,7 +87,10 @@ private: #if defined(_add_overflow) && defined(_mul_overflow) size_t o; size_t p; - if (_mul_overflow(p_elements, sizeof(T), &o)) return false; + if (_mul_overflow(p_elements, sizeof(T), &o)) { + *out = 0; + return false; + } *out = next_power_of_2(o); if (_add_overflow(o, static_cast<size_t>(32), &p)) return false; //no longer allocated here return true; diff --git a/core/dictionary.cpp b/core/dictionary.cpp index ba32606819..6a3ab82879 100644 --- a/core/dictionary.cpp +++ b/core/dictionary.cpp @@ -112,6 +112,15 @@ Variant Dictionary::get_valid(const Variant &p_key) const { return E.get(); } +Variant Dictionary::get(const Variant &p_key, const Variant &p_default) const { + const Variant *result = getptr(p_key); + if (!result) { + return p_default; + } + + return *result; +} + int Dictionary::size() const { return _p->variant_map.size(); @@ -145,6 +154,11 @@ bool Dictionary::operator==(const Dictionary &p_dictionary) const { return _p == p_dictionary._p; } +bool Dictionary::operator!=(const Dictionary &p_dictionary) const { + + return _p != p_dictionary._p; +} + void Dictionary::_ref(const Dictionary &p_from) const { //make a copy first (thread safe) diff --git a/core/dictionary.h b/core/dictionary.h index 9950fb6361..b77cc55254 100644 --- a/core/dictionary.h +++ b/core/dictionary.h @@ -58,6 +58,7 @@ public: Variant *getptr(const Variant &p_key); Variant get_valid(const Variant &p_key) const; + Variant get(const Variant &p_key, const Variant &p_default) const; int size() const; bool empty() const; @@ -69,6 +70,7 @@ public: bool erase(const Variant &p_key); bool operator==(const Dictionary &p_dictionary) const; + bool operator!=(const Dictionary &p_dictionary) const; uint32_t hash() const; void operator=(const Dictionary &p_dictionary); diff --git a/core/dvector.h b/core/dvector.h index 0d0848a19a..2830c57ec0 100644 --- a/core/dvector.h +++ b/core/dvector.h @@ -149,7 +149,7 @@ class PoolVector { } } - if (old_alloc->refcount.unref() == true) { + if (old_alloc->refcount.unref()) { //this should never happen but.. #ifdef DEBUG_ENABLED @@ -209,7 +209,7 @@ class PoolVector { if (!alloc) return; - if (alloc->refcount.unref() == false) { + if (!alloc->refcount.unref()) { alloc = NULL; return; } diff --git a/core/global_constants.cpp b/core/global_constants.cpp index c70f960a66..7e9b8b393c 100644 --- a/core/global_constants.cpp +++ b/core/global_constants.cpp @@ -547,8 +547,9 @@ void register_global_constants() { BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_INTERNATIONALIZED); BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_GROUP); BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_CATEGORY); - BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_STORE_IF_NONZERO); - BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_STORE_IF_NONONE); + //deprecated, replaced by ClassDB function to check default value + //BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_STORE_IF_NONZERO); + //BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_STORE_IF_NONONE); BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_NO_INSTANCE_STATE); BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_RESTART_IF_CHANGED); BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_USAGE_SCRIPT_VARIABLE); diff --git a/core/hash_map.h b/core/hash_map.h index 8620edba73..3869cd3c36 100644 --- a/core/hash_map.h +++ b/core/hash_map.h @@ -150,7 +150,7 @@ private: if (new_hash_table_power == -1) return; - Element **new_hash_table = memnew_arr(Element *, (1 << new_hash_table_power)); + Element **new_hash_table = memnew_arr(Element *, ((uint64_t)1 << new_hash_table_power)); if (!new_hash_table) { ERR_PRINT("Out of Memory"); @@ -230,7 +230,7 @@ private: if (!p_t.hash_table || p_t.hash_table_power == 0) return; /* not copying from empty table */ - hash_table = memnew_arr(Element *, 1 << p_t.hash_table_power); + hash_table = memnew_arr(Element *, (uint64_t)1 << p_t.hash_table_power); hash_table_power = p_t.hash_table_power; elements = p_t.elements; diff --git a/core/image.cpp b/core/image.cpp index c0002e0cd6..dca8aedb8f 100644 --- a/core/image.cpp +++ b/core/image.cpp @@ -307,6 +307,7 @@ void Image::_get_mipmap_offset_and_size(int p_mipmap, int &r_offset, int &r_widt r_width = w; r_height = h; } + int Image::get_mipmap_offset(int p_mipmap) const { ERR_FAIL_INDEX_V(p_mipmap, get_mipmap_count() + 1, -1); @@ -499,8 +500,6 @@ void Image::convert(Format p_new_format) { bool gen_mipmaps = mipmaps; - //mipmaps=false; - _copy_internals_from(new_img); if (gen_mipmaps) @@ -781,9 +780,9 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { // Setup mipmap-aware scaling Image dst2; - int mip1; - int mip2; - float mip1_weight; + int mip1 = 0; + int mip2 = 0; + float mip1_weight = 0; if (mipmap_aware) { float avg_scale = ((float)p_width / width + (float)p_height / height) * 0.5f; if (avg_scale >= 1.0f) { @@ -799,6 +798,7 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { if (interpolate_mipmaps) { dst2.create(p_width, p_height, 0, format); } + bool had_mipmaps = mipmaps; if (interpolate_mipmaps && !had_mipmaps) { generate_mipmaps(); @@ -951,6 +951,7 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { } void Image::crop_from_point(int p_x, int p_y, int p_width, int p_height) { + if (!_can_modify(format)) { ERR_EXPLAIN("Cannot crop in indexed, compressed or custom image formats."); ERR_FAIL(); @@ -996,7 +997,7 @@ void Image::crop_from_point(int p_x, int p_y, int p_width, int p_height) { } } - if (mipmaps > 0) + if (has_mipmaps()) dst.generate_mipmaps(); _copy_internals_from(dst); } @@ -1013,10 +1014,10 @@ void Image::flip_y() { ERR_FAIL(); } - bool gm = mipmaps; - - if (gm) + bool used_mipmaps = has_mipmaps(); + if (used_mipmaps) { clear_mipmaps(); + } { PoolVector<uint8_t>::Write w = data.write(); @@ -1037,8 +1038,9 @@ void Image::flip_y() { } } - if (gm) + if (used_mipmaps) { generate_mipmaps(); + } } void Image::flip_x() { @@ -1048,9 +1050,10 @@ void Image::flip_x() { ERR_FAIL(); } - bool gm = mipmaps; - if (gm) + bool used_mipmaps = has_mipmaps(); + if (used_mipmaps) { clear_mipmaps(); + } { PoolVector<uint8_t>::Write w = data.write(); @@ -1071,8 +1074,9 @@ void Image::flip_x() { } } - if (gm) + if (used_mipmaps) { generate_mipmaps(); + } } int Image::_get_dst_image_size(int p_width, int p_height, Format p_format, int &r_mipmaps, int p_mipmaps) { @@ -1167,12 +1171,13 @@ void Image::expand_x2_hq2x() { ERR_FAIL_COND(!_can_modify(format)); - Format current = format; - bool mm = has_mipmaps(); - if (mm) { + bool used_mipmaps = has_mipmaps(); + if (used_mipmaps) { clear_mipmaps(); } + Format current = format; + if (current != FORMAT_RGBA8) convert(FORMAT_RGBA8); @@ -1193,6 +1198,8 @@ void Image::expand_x2_hq2x() { if (current != FORMAT_RGBA8) convert(current); + // FIXME: This is likely meant to use "used_mipmaps" as defined above, but if we do, + // we end up with a regression: GH-22747 if (mipmaps) { generate_mipmaps(); } @@ -1466,7 +1473,8 @@ void Image::create(int p_width, int p_height, bool p_use_mipmaps, Format p_forma void Image::create(const char **p_xpm) { - int size_width, size_height; + int size_width = 0; + int size_height = 0; int pixelchars = 0; mipmaps = false; bool has_alpha = false; @@ -1482,8 +1490,8 @@ void Image::create(const char **p_xpm) { int line = 0; HashMap<String, Color> colormap; - int colormap_size; - uint32_t pixel_size; + int colormap_size = 0; + uint32_t pixel_size = 0; PoolVector<uint8_t>::Write w; while (status != DONE) { @@ -1758,6 +1766,15 @@ int Image::get_image_required_mipmaps(int p_width, int p_height, Format p_format return mm; } +int Image::get_image_mipmap_offset(int p_width, int p_height, Format p_format, int p_mipmap) { + + if (p_mipmap <= 0) { + return 0; + } + int mm; + return _get_dst_image_size(p_width, p_height, p_format, mm, p_mipmap - 1); +} + bool Image::is_compressed() const { return format > FORMAT_RGBE9995; } @@ -1914,7 +1931,8 @@ void Image::blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Po if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); PoolVector<uint8_t>::Write wp = data.write(); uint8_t *dst_data_ptr = wp.ptr(); @@ -1968,7 +1986,8 @@ void Image::blit_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, co if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); PoolVector<uint8_t>::Write wp = data.write(); uint8_t *dst_data_ptr = wp.ptr(); @@ -2025,7 +2044,8 @@ void Image::blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const P if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); lock(); Ref<Image> img = p_src; @@ -2079,7 +2099,8 @@ void Image::blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, c if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); lock(); Ref<Image> img = p_src; diff --git a/core/image.h b/core/image.h index 11f9380c3c..0770eb953e 100644 --- a/core/image.h +++ b/core/image.h @@ -286,6 +286,7 @@ public: static int get_image_data_size(int p_width, int p_height, Format p_format, bool p_mipmaps = false); static int get_image_required_mipmaps(int p_width, int p_height, Format p_format); + static int get_image_mipmap_offset(int p_width, int p_height, Format p_format, int p_mipmap); enum CompressMode { COMPRESS_S3TC, diff --git a/core/io/compression.cpp b/core/io/compression.cpp index e456a85c65..3c0b6541bd 100644 --- a/core/io/compression.cpp +++ b/core/io/compression.cpp @@ -175,7 +175,7 @@ int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p } break; case MODE_ZSTD: { ZSTD_DCtx *dctx = ZSTD_createDCtx(); - if (zstd_long_distance_matching) ZSTD_DCtx_setMaxWindowSize(dctx, 1 << zstd_window_log_size); + if (zstd_long_distance_matching) ZSTD_DCtx_setMaxWindowSize(dctx, (size_t)1 << zstd_window_log_size); int ret = ZSTD_decompressDCtx(dctx, p_dst, p_dst_max_size, p_src, p_src_size); ZSTD_freeDCtx(dctx); return ret; diff --git a/core/io/file_access_network.cpp b/core/io/file_access_network.cpp index 6b6856dcc8..b9544ac166 100644 --- a/core/io/file_access_network.cpp +++ b/core/io/file_access_network.cpp @@ -500,8 +500,9 @@ uint64_t FileAccessNetwork::_get_modified_time(const String &p_file) { void FileAccessNetwork::configure() { GLOBAL_DEF("network/remote_fs/page_size", 65536); + ProjectSettings::get_singleton()->set_custom_property_info("network/remote_fs/page_size", PropertyInfo(Variant::INT, "network/remote_fs/page_size", PROPERTY_HINT_RANGE, "1,65536,1,or_greater")); //is used as denominator and can't be zero GLOBAL_DEF("network/remote_fs/page_read_ahead", 4); - GLOBAL_DEF("network/remote_fs/max_pages", 20); + ProjectSettings::get_singleton()->set_custom_property_info("network/remote_fs/page_read_ahead", PropertyInfo(Variant::INT, "network/remote_fs/page_read_ahead", PROPERTY_HINT_RANGE, "0,8,1,or_greater")); } FileAccessNetwork::FileAccessNetwork() { @@ -519,7 +520,6 @@ FileAccessNetwork::FileAccessNetwork() { nc->unlock_mutex(); page_size = GLOBAL_GET("network/remote_fs/page_size"); read_ahead = GLOBAL_GET("network/remote_fs/page_read_ahead"); - max_pages = GLOBAL_GET("network/remote_fs/max_pages"); last_activity_val = 0; waiting_on_page = -1; last_page = -1; diff --git a/core/io/file_access_network.h b/core/io/file_access_network.h index e32dcea990..c929e8446d 100644 --- a/core/io/file_access_network.h +++ b/core/io/file_access_network.h @@ -98,7 +98,6 @@ class FileAccessNetwork : public FileAccess { int page_size; int read_ahead; - int max_pages; mutable int waiting_on_page; mutable int last_activity_val; diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp index e3c8fb9eb8..3823285792 100644 --- a/core/io/file_access_pack.cpp +++ b/core/io/file_access_pack.cpp @@ -169,11 +169,11 @@ bool PackedSourcePCK::try_open_pack(const String &p_path) { uint32_t version = f->get_32(); uint32_t ver_major = f->get_32(); uint32_t ver_minor = f->get_32(); - uint32_t ver_rev = f->get_32(); + f->get_32(); // ver_rev ERR_EXPLAIN("Pack version unsupported: " + itos(version)); ERR_FAIL_COND_V(version != PACK_VERSION, false); - ERR_EXPLAIN("Pack created with a newer version of the engine: " + itos(ver_major) + "." + itos(ver_minor) + "." + itos(ver_rev)); + ERR_EXPLAIN("Pack created with a newer version of the engine: " + itos(ver_major) + "." + itos(ver_minor)); ERR_FAIL_COND_V(ver_major > VERSION_MAJOR || (ver_major == VERSION_MAJOR && ver_minor > VERSION_MINOR), false); for (int i = 0; i < 16; i++) { @@ -455,7 +455,7 @@ String DirAccessPack::get_current_dir() { while (pd->parent) { pd = pd->parent; - p = pd->name + "/" + p; + p = pd->name.plus_file(p); } return "res://" + p; diff --git a/core/io/image_loader.cpp b/core/io/image_loader.cpp index f202320043..e4fbb0247d 100644 --- a/core/io/image_loader.cpp +++ b/core/io/image_loader.cpp @@ -60,7 +60,7 @@ Error ImageLoader::load_image(String p_file, Ref<Image> p_image, FileAccess *p_c String extension = p_file.get_extension(); - for (int i = 0; i < loader_count; i++) { + for (int i = 0; i < loader.size(); i++) { if (!loader[i]->recognize(extension)) continue; @@ -83,30 +83,45 @@ Error ImageLoader::load_image(String p_file, Ref<Image> p_image, FileAccess *p_c void ImageLoader::get_recognized_extensions(List<String> *p_extensions) { - for (int i = 0; i < loader_count; i++) { + for (int i = 0; i < loader.size(); i++) { loader[i]->get_recognized_extensions(p_extensions); } } -bool ImageLoader::recognize(const String &p_extension) { +ImageFormatLoader *ImageLoader::recognize(const String &p_extension) { - for (int i = 0; i < loader_count; i++) { + for (int i = 0; i < loader.size(); i++) { if (loader[i]->recognize(p_extension)) - return true; + return loader[i]; } - return false; + return NULL; } -ImageFormatLoader *ImageLoader::loader[MAX_LOADERS]; -int ImageLoader::loader_count = 0; +Vector<ImageFormatLoader *> ImageLoader::loader; void ImageLoader::add_image_format_loader(ImageFormatLoader *p_loader) { - ERR_FAIL_COND(loader_count >= MAX_LOADERS); - loader[loader_count++] = p_loader; + loader.push_back(p_loader); +} + +void ImageLoader::remove_image_format_loader(ImageFormatLoader *p_loader) { + + loader.erase(p_loader); +} + +const Vector<ImageFormatLoader *> &ImageLoader::get_image_format_loaders() { + + return loader; +} + +void ImageLoader::cleanup() { + + while (loader.size()) { + remove_image_format_loader(loader[0]); + } } ///////////////// @@ -118,7 +133,6 @@ RES ResourceFormatLoaderImage::load(const String &p_path, const String &p_origin if (r_error) { *r_error = ERR_CANT_OPEN; } - memdelete(f); return RES(); } @@ -138,7 +152,7 @@ RES ResourceFormatLoaderImage::load(const String &p_path, const String &p_origin int idx = -1; - for (int i = 0; i < ImageLoader::loader_count; i++) { + for (int i = 0; i < ImageLoader::loader.size(); i++) { if (ImageLoader::loader[i]->recognize(extension)) { idx = i; break; diff --git a/core/io/image_loader.h b/core/io/image_loader.h index 561f275e0c..7a58d46f93 100644 --- a/core/io/image_loader.h +++ b/core/io/image_loader.h @@ -70,20 +70,21 @@ public: class ImageLoader { - enum { - MAX_LOADERS = 8 - }; + static Vector<ImageFormatLoader *> loader; friend class ResourceFormatLoaderImage; - static ImageFormatLoader *loader[MAX_LOADERS]; - static int loader_count; protected: public: static Error load_image(String p_file, Ref<Image> p_image, FileAccess *p_custom = NULL, bool p_force_linear = false, float p_scale = 1.0); static void get_recognized_extensions(List<String> *p_extensions); - static bool recognize(const String &p_extension); + static ImageFormatLoader *recognize(const String &p_extension); static void add_image_format_loader(ImageFormatLoader *p_loader); + static void remove_image_format_loader(ImageFormatLoader *p_loader); + + static const Vector<ImageFormatLoader *> &get_image_format_loaders(); + + static void cleanup(); }; class ResourceFormatLoaderImage : public ResourceFormatLoader { diff --git a/core/io/ip_address.cpp b/core/io/ip_address.cpp index 6d979d10eb..194d1af6bf 100644 --- a/core/io/ip_address.cpp +++ b/core/io/ip_address.cpp @@ -184,7 +184,7 @@ bool IP_Address::is_ipv4() const { } const uint8_t *IP_Address::get_ipv4() const { - ERR_FAIL_COND_V(!is_ipv4(), 0); + ERR_FAIL_COND_V(!is_ipv4(), &(field8[12])); // Not the correct IPv4 (it's an IPv6), but we don't want to return a null pointer risking an engine crash. return &(field8[12]); } diff --git a/core/io/logger.cpp b/core/io/logger.cpp index 051c02ab32..01755c8ee9 100644 --- a/core/io/logger.cpp +++ b/core/io/logger.cpp @@ -45,6 +45,10 @@ #endif #endif +#if defined(MINGW_ENABLED) || defined(_MSC_VER) +#define sprintf sprintf_s +#endif + bool Logger::should_log(bool p_err) { return (!p_err || _print_error_enabled) && (p_err || _print_line_enabled); } diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp index 628019ef7f..6338cee39d 100644 --- a/core/io/marshalls.cpp +++ b/core/io/marshalls.cpp @@ -850,17 +850,16 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo } break; case Variant::INT: { - int64_t val = p_variant; if (flags & ENCODE_FLAG_64) { //64 bits if (buf) { - encode_uint64(val, buf); + encode_uint64(p_variant.operator int64_t(), buf); } r_len += 8; } else { if (buf) { - encode_uint32(int32_t(val), buf); + encode_uint32(p_variant.operator int32_t(), buf); } r_len += 4; @@ -868,8 +867,6 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo } break; case Variant::REAL: { - double d = p_variant; - float f = d; if (flags & ENCODE_FLAG_64) { if (buf) { encode_double(p_variant.operator double(), buf); diff --git a/core/io/multiplayer_api.cpp b/core/io/multiplayer_api.cpp index 17b77bc535..b3f0a76a80 100644 --- a/core/io/multiplayer_api.cpp +++ b/core/io/multiplayer_api.cpp @@ -416,7 +416,7 @@ bool MultiplayerAPI::_send_confirm_path(NodePath p_path, PathSentCache *psc, int Map<int, bool>::Element *F = psc->confirmed_peers.find(E->get()); - if (!F || F->get() == false) { + if (!F || !F->get()) { // Path was not cached, or was cached but is unconfirmed. if (!F) { // Not cached at all, take note. @@ -578,7 +578,7 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p network_peer->set_target_peer(E->get()); // To this one specifically. - if (F->get() == true) { + if (F->get()) { // This one confirmed path, so use id. encode_uint32(psc->id, &(packet_cache.write[1])); network_peer->put_packet(packet_cache.ptr(), ofs); diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp index e5741014a4..6f3a8c3d2e 100644 --- a/core/io/resource_format_binary.cpp +++ b/core/io/resource_format_binary.cpp @@ -1309,7 +1309,7 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia case Variant::INT: { int64_t val = p_property; - if (val > 0x7FFFFFFF || val < -0x80000000) { + if (val > 0x7FFFFFFF || val < -(int64_t)0x80000000) { f->store_32(VARIANT_INT64); f->store_64(val); @@ -1813,8 +1813,13 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p Property p; p.name_idx = get_string_index(F->get().name); p.value = E->get()->get(F->get().name); - if (((F->get().usage & PROPERTY_USAGE_STORE_IF_NONZERO) && p.value.is_zero()) || ((F->get().usage & PROPERTY_USAGE_STORE_IF_NONONE) && p.value.is_one())) + + Variant default_value = ClassDB::class_get_default_property_value(E->get()->get_class(), F->get().name); + + if (default_value.get_type() != Variant::NIL && bool(Variant::evaluate(Variant::OP_EQUAL, p.value, default_value))) { continue; + } + p.pi = F->get(); rd.properties.push_back(p); diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 8c56d55e85..71b01aa94a 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -259,6 +259,10 @@ RES ResourceLoader::load(const String &p_path, const String &p_type_hint, bool p } #endif + if (_loaded_callback) { + _loaded_callback(res, p_path); + } + return res; } @@ -635,6 +639,12 @@ void ResourceLoader::clear_path_remaps() { path_remaps.clear(); } +void ResourceLoader::set_load_callback(ResourceLoadedCallback p_callback) { + _loaded_callback = p_callback; +} + +ResourceLoadedCallback ResourceLoader::_loaded_callback = NULL; + ResourceLoadErrorNotify ResourceLoader::err_notify = NULL; void *ResourceLoader::err_notify_ud = NULL; @@ -647,3 +657,5 @@ bool ResourceLoader::timestamp_on_load = false; SelfList<Resource>::List ResourceLoader::remapped_list; HashMap<String, Vector<String> > ResourceLoader::translation_remaps; HashMap<String, String> ResourceLoader::path_remaps; + +ResourceLoaderImport ResourceLoader::import = NULL; diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h index de0981350d..a46a00203f 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -77,6 +77,9 @@ public: typedef void (*ResourceLoadErrorNotify)(void *p_ud, const String &p_text); typedef void (*DependencyErrorNotify)(void *p_ud, const String &p_loading, const String &p_which, const String &p_type); +typedef Error (*ResourceLoaderImport)(const String &p_path); +typedef void (*ResourceLoadedCallback)(RES p_resource, const String &p_path); + class ResourceLoader { enum { @@ -104,6 +107,8 @@ class ResourceLoader { //internal load function static RES _load(const String &p_path, const String &p_original_path, const String &p_type_hint, bool p_no_cache, Error *r_error); + static ResourceLoadedCallback _loaded_callback; + public: static Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL); static RES load(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL); @@ -118,6 +123,7 @@ public: static int get_import_order(const String &p_path); static void set_timestamp_on_load(bool p_timestamp) { timestamp_on_load = p_timestamp; } + static bool get_timestamp_on_load() { return timestamp_on_load; } static void notify_load_error(const String &p_err) { if (err_notify) err_notify(err_notify_ud, p_err); @@ -147,6 +153,9 @@ public: static void reload_translation_remaps(); static void load_translation_remaps(); static void clear_translation_remaps(); + + static void set_load_callback(ResourceLoadedCallback p_callback); + static ResourceLoaderImport import; }; #endif diff --git a/core/io/resource_saver.cpp b/core/io/resource_saver.cpp index 5c8188f735..097e81e308 100644 --- a/core/io/resource_saver.cpp +++ b/core/io/resource_saver.cpp @@ -90,7 +90,7 @@ Error ResourceSaver::save(const String &p_path, const RES &p_resource, uint32_t rwcopy->set_path(old_path); if (save_callback && p_path.begins_with("res://")) - save_callback(p_path); + save_callback(p_resource, p_path); return OK; } else { diff --git a/core/io/resource_saver.h b/core/io/resource_saver.h index 7ed580f2d6..cdd43292a2 100644 --- a/core/io/resource_saver.h +++ b/core/io/resource_saver.h @@ -46,7 +46,7 @@ public: virtual ~ResourceFormatSaver() {} }; -typedef void (*ResourceSavedCallback)(const String &p_path); +typedef void (*ResourceSavedCallback)(Ref<Resource> p_resource, const String &p_path); class ResourceSaver { @@ -76,6 +76,8 @@ public: static void add_resource_format_saver(ResourceFormatSaver *p_format_saver, bool p_at_front = false); static void set_timestamp_on_save(bool p_timestamp) { timestamp_on_save = p_timestamp; } + static bool get_timestamp_on_save() { return timestamp_on_save; } + static void set_save_callback(ResourceSavedCallback p_callback); }; diff --git a/core/math/bsp_tree.cpp b/core/math/bsp_tree.cpp index 6e51c56357..6ffc963783 100644 --- a/core/math/bsp_tree.cpp +++ b/core/math/bsp_tree.cpp @@ -165,7 +165,6 @@ int BSP_Tree::get_points_inside(const Vector3 *p_points, int p_point_count) cons int pass_count = 0; const Node *nodesptr = &nodes[0]; const Plane *planesptr = &planes[0]; - int plane_count = planes.size(); int node_count = nodes.size(); if (node_count == 0) // no nodes! @@ -192,9 +191,9 @@ int BSP_Tree::get_points_inside(const Vector3 *p_points, int p_point_count) cons break; } - uint16_t plane = nodesptr[idx].plane; #ifdef DEBUG_ENABLED - + int plane_count = planes.size(); + uint16_t plane = nodesptr[idx].plane; ERR_FAIL_INDEX_V(plane, plane_count, false); #endif diff --git a/core/math/expression.cpp b/core/math/expression.cpp index a16267cf0a..0cfb54234c 100644 --- a/core/math/expression.cpp +++ b/core/math/expression.cpp @@ -2120,6 +2120,10 @@ Error Expression::parse(const String &p_expression, const Vector<String> &p_inpu } Variant Expression::execute(Array p_inputs, Object *p_base, bool p_show_error) { + if (error_set) { + ERR_EXPLAIN("There was previously a parse error: " + error_str); + ERR_FAIL_V(Variant()); + } execution_error = false; Variant output; diff --git a/core/math/face3.cpp b/core/math/face3.cpp index aa46fde7f7..8366137131 100644 --- a/core/math/face3.cpp +++ b/core/math/face3.cpp @@ -202,11 +202,12 @@ bool Face3::intersects_aabb(const AABB &p_aabb) const { { \ real_t aabb_min = p_aabb.position.m_ax; \ real_t aabb_max = p_aabb.position.m_ax + p_aabb.size.m_ax; \ - real_t tri_min, tri_max; \ - for (int i = 0; i < 3; i++) { \ - if (i == 0 || vertex[i].m_ax > tri_max) \ + real_t tri_min = vertex[0].m_ax; \ + real_t tri_max = vertex[0].m_ax; \ + for (int i = 1; i < 3; i++) { \ + if (vertex[i].m_ax > tri_max) \ tri_max = vertex[i].m_ax; \ - if (i == 0 || vertex[i].m_ax < tri_min) \ + if (vertex[i].m_ax < tri_min) \ tri_min = vertex[i].m_ax; \ } \ \ diff --git a/core/math/geometry.h b/core/math/geometry.h index a813a90774..df63f0dabe 100644 --- a/core/math/geometry.h +++ b/core/math/geometry.h @@ -800,6 +800,21 @@ public: return Vector<Vector<Vector2> >(); } + static bool is_polygon_clockwise(const Vector<Vector2> &p_polygon) { + int c = p_polygon.size(); + if (c < 3) + return false; + const Vector2 *p = p_polygon.ptr(); + real_t sum = 0; + for (int i = 0; i < c; i++) { + const Vector2 &v1 = p[i]; + const Vector2 &v2 = p[(i + 1) % c]; + sum += (v2.x - v1.x) * (v2.y + v1.y); + } + + return sum > 0.0f; + } + static PoolVector<PoolVector<Face3> > separate_objects(PoolVector<Face3> p_array); static PoolVector<Face3> wrap_geometry(PoolVector<Face3> p_array, real_t *p_error = NULL); ///< create a "wrap" that encloses the given geometry diff --git a/core/math/math_defs.h b/core/math/math_defs.h index a5feee6eb5..db9055cee2 100644 --- a/core/math/math_defs.h +++ b/core/math/math_defs.h @@ -93,9 +93,9 @@ enum Corner { }; /** - * The "Real" type is an abstract type used for real numbers, such as 1.5, + * The "Real" type is an abstract type used for real numbers, such as 1.5, * in contrast to integer numbers. Precision can be controlled with the - * presence or absence of the REAL_T_IS_DOUBLE define. + * presence or absence of the REAL_T_IS_DOUBLE define. */ #ifdef REAL_T_IS_DOUBLE typedef double real_t; diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp index 0c06d2a2b5..06355d15ed 100644 --- a/core/math/math_funcs.cpp +++ b/core/math/math_funcs.cpp @@ -30,30 +30,27 @@ #include "math_funcs.h" -#include "core/os/os.h" - -pcg32_random_t Math::default_pcg = { 12047754176567800795ULL, PCG_DEFAULT_INC_64 }; +RandomPCG Math::default_rand(RandomPCG::DEFAULT_SEED, RandomPCG::DEFAULT_INC); #define PHI 0x9e3779b9 -// TODO: we should eventually expose pcg.inc too uint32_t Math::rand_from_seed(uint64_t *seed) { - pcg32_random_t pcg = { *seed, PCG_DEFAULT_INC_64 }; - uint32_t r = pcg32_random_r(&pcg); - *seed = pcg.state; + RandomPCG rng = RandomPCG(*seed, RandomPCG::DEFAULT_INC); + uint32_t r = rng.rand(); + *seed = rng.get_seed(); return r; } void Math::seed(uint64_t x) { - default_pcg.state = x; + default_rand.seed(x); } void Math::randomize() { - seed(OS::get_singleton()->get_ticks_usec() * default_pcg.state + PCG_DEFAULT_INC_64); + default_rand.randomize(); } uint32_t Math::rand() { - return pcg32_random_r(&default_pcg); + return default_rand.rand(); } int Math::step_decimals(double p_step) { @@ -169,13 +166,9 @@ uint32_t Math::larger_prime(uint32_t p_val) { } double Math::random(double from, double to) { - unsigned int r = Math::rand(); - double ret = (double)r / (double)RANDOM_MAX; - return (ret) * (to - from) + from; + return default_rand.random(from, to); } float Math::random(float from, float to) { - unsigned int r = Math::rand(); - float ret = (float)r / (float)RANDOM_MAX; - return (ret) * (to - from) + from; + return default_rand.random(from, to); } diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 472baf0484..f9d89d5d5a 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -32,6 +32,7 @@ #define MATH_FUNCS_H #include "core/math/math_defs.h" +#include "core/math/random_pcg.h" #include "core/typedefs.h" #include "thirdparty/misc/pcg.h" @@ -41,12 +42,12 @@ class Math { - static pcg32_random_t default_pcg; + static RandomPCG default_rand; public: Math() {} // useless to instance - static const uint64_t RANDOM_MAX = 4294967295; + static const uint64_t RANDOM_MAX = 0xFFFFFFFF; static _ALWAYS_INLINE_ double sin(double p_x) { return ::sin(p_x); } static _ALWAYS_INLINE_ float sin(float p_x) { return ::sinf(p_x); } @@ -305,16 +306,6 @@ public: return b; } -#if defined(__GNUC__) - - static _ALWAYS_INLINE_ int64_t dtoll(double p_double) { return (int64_t)p_double; } ///@TODO OPTIMIZE - static _ALWAYS_INLINE_ int64_t dtoll(float p_float) { return (int64_t)p_float; } ///@TODO OPTIMIZE and rename -#else - - static _ALWAYS_INLINE_ int64_t dtoll(double p_double) { return (int64_t)p_double; } ///@TODO OPTIMIZE - static _ALWAYS_INLINE_ int64_t dtoll(float p_float) { return (int64_t)p_float; } ///@TODO OPTIMIZE and rename -#endif - static _ALWAYS_INLINE_ uint32_t halfbits_to_floatbits(uint16_t h) { uint16_t h_exp, h_sig; uint32_t f_sgn, f_exp, f_sig; diff --git a/core/math/matrix3.cpp b/core/math/matrix3.cpp index fca54b1556..925a7b3f1e 100644 --- a/core/math/matrix3.cpp +++ b/core/math/matrix3.cpp @@ -299,14 +299,14 @@ Vector3 Basis::rotref_posscale_decomposition(Basis &rotref) const { ERR_FAIL_COND_V(determinant() == 0, Vector3()); Basis m = transposed() * (*this); - ERR_FAIL_COND_V(m.is_diagonal() == false, Vector3()); + ERR_FAIL_COND_V(!m.is_diagonal(), Vector3()); #endif Vector3 scale = get_scale(); Basis inv_scale = Basis().scaled(scale.inverse()); // this will also absorb the sign of scale rotref = (*this) * inv_scale; #ifdef MATH_CHECKS - ERR_FAIL_COND_V(rotref.is_orthogonal() == false, Vector3()); + ERR_FAIL_COND_V(!rotref.is_orthogonal(), Vector3()); #endif return scale.abs(); } @@ -430,7 +430,7 @@ Vector3 Basis::get_euler_xyz() const { Vector3 euler; #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_rotation() == false, euler); + ERR_FAIL_COND_V(!is_rotation(), euler); #endif real_t sy = elements[0][2]; if (sy < 1.0) { @@ -497,7 +497,7 @@ Vector3 Basis::get_euler_yxz() const { Vector3 euler; #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_rotation() == false, euler); + ERR_FAIL_COND_V(!is_rotation(), euler); #endif real_t m12 = elements[1][2]; @@ -556,7 +556,7 @@ bool Basis::is_equal_approx(const Basis &a, const Basis &b) const { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { - if (Math::is_equal_approx(a.elements[i][j], b.elements[i][j]) == false) + if (!Math::is_equal_approx(a.elements[i][j], b.elements[i][j])) return false; } } @@ -600,7 +600,7 @@ Basis::operator String() const { Quat Basis::get_quat() const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_rotation() == false, Quat()); + ERR_FAIL_COND_V(!is_rotation(), Quat()); #endif real_t trace = elements[0][0] + elements[1][1] + elements[2][2]; real_t temp[4]; @@ -697,7 +697,7 @@ void Basis::set_orthogonal_index(int p_index) { void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const { #ifdef MATH_CHECKS - ERR_FAIL_COND(is_rotation() == false); + ERR_FAIL_COND(!is_rotation()); #endif real_t angle, x, y, z; // variables for result real_t epsilon = 0.01; // margin to allow for rounding errors @@ -785,7 +785,7 @@ void Basis::set_quat(const Quat &p_quat) { void Basis::set_axis_angle(const Vector3 &p_axis, real_t p_phi) { // Rotation matrix from axis and angle, see https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_angle #ifdef MATH_CHECKS - ERR_FAIL_COND(p_axis.is_normalized() == false); + ERR_FAIL_COND(!p_axis.is_normalized()); #endif Vector3 axis_sq(p_axis.x * p_axis.x, p_axis.y * p_axis.y, p_axis.z * p_axis.z); @@ -837,8 +837,8 @@ void Basis::set_diagonal(const Vector3 p_diag) { Basis Basis::slerp(const Basis &target, const real_t &t) const { // TODO: implement this directly without using quaternions to make it more efficient #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_rotation() == false, Basis()); - ERR_FAIL_COND_V(target.is_rotation() == false, Basis()); + ERR_FAIL_COND_V(!is_rotation(), Basis()); + ERR_FAIL_COND_V(!target.is_rotation(), Basis()); #endif Quat from(*this); diff --git a/core/math/quat.cpp b/core/math/quat.cpp index d660ce4553..791e84f089 100644 --- a/core/math/quat.cpp +++ b/core/math/quat.cpp @@ -100,7 +100,7 @@ void Quat::set_euler_yxz(const Vector3 &p_euler) { // This implementation uses YXZ convention (Z is the first rotation). Vector3 Quat::get_euler_yxz() const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Vector3(0, 0, 0)); + ERR_FAIL_COND_V(!is_normalized(), Vector3(0, 0, 0)); #endif Basis m(*this); return m.get_euler_yxz(); @@ -140,15 +140,15 @@ bool Quat::is_normalized() const { Quat Quat::inverse() const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!is_normalized(), Quat()); #endif return Quat(-x, -y, -z, w); } Quat Quat::slerp(const Quat &q, const real_t &t) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Quat()); - ERR_FAIL_COND_V(q.is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!is_normalized(), Quat()); + ERR_FAIL_COND_V(!q.is_normalized(), Quat()); #endif Quat to1; real_t omega, cosom, sinom, scale0, scale1; @@ -194,8 +194,8 @@ Quat Quat::slerp(const Quat &q, const real_t &t) const { Quat Quat::slerpni(const Quat &q, const real_t &t) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Quat()); - ERR_FAIL_COND_V(q.is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!is_normalized(), Quat()); + ERR_FAIL_COND_V(!q.is_normalized(), Quat()); #endif const Quat &from = *this; @@ -216,8 +216,8 @@ Quat Quat::slerpni(const Quat &q, const real_t &t) const { Quat Quat::cubic_slerp(const Quat &q, const Quat &prep, const Quat &postq, const real_t &t) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Quat()); - ERR_FAIL_COND_V(q.is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!is_normalized(), Quat()); + ERR_FAIL_COND_V(!q.is_normalized(), Quat()); #endif //the only way to do slerp :| real_t t2 = (1.0 - t) * t * 2; @@ -233,7 +233,7 @@ Quat::operator String() const { void Quat::set_axis_angle(const Vector3 &axis, const real_t &angle) { #ifdef MATH_CHECKS - ERR_FAIL_COND(axis.is_normalized() == false); + ERR_FAIL_COND(!axis.is_normalized()); #endif real_t d = axis.length(); if (d == 0) diff --git a/core/math/quat.h b/core/math/quat.h index 10d3846c87..c4f9b3a732 100644 --- a/core/math/quat.h +++ b/core/math/quat.h @@ -87,7 +87,7 @@ public: _FORCE_INLINE_ Vector3 xform(const Vector3 &v) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, v); + ERR_FAIL_COND_V(!is_normalized(), v); #endif Vector3 u(x, y, z); Vector3 uv = u.cross(v); diff --git a/core/math/random_number_generator.cpp b/core/math/random_number_generator.cpp new file mode 100644 index 0000000000..e4ec0dac99 --- /dev/null +++ b/core/math/random_number_generator.cpp @@ -0,0 +1,45 @@ +/*************************************************************************/ +/* random_number_generator.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 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 "random_number_generator.h" + +RandomNumberGenerator::RandomNumberGenerator() : + randbase() {} + +void RandomNumberGenerator::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_seed", "seed"), &RandomNumberGenerator::set_seed); + ClassDB::bind_method(D_METHOD("get_seed"), &RandomNumberGenerator::get_seed); + ADD_PROPERTY(PropertyInfo(Variant::INT, "seed"), "set_seed", "get_seed"); + + ClassDB::bind_method(D_METHOD("randi"), &RandomNumberGenerator::randi); + ClassDB::bind_method(D_METHOD("randf"), &RandomNumberGenerator::randf); + ClassDB::bind_method(D_METHOD("rand_range", "from", "to"), &RandomNumberGenerator::rand_range); + ClassDB::bind_method(D_METHOD("randomize"), &RandomNumberGenerator::randomize); +} diff --git a/core/math/random_number_generator.h b/core/math/random_number_generator.h new file mode 100644 index 0000000000..557863fdbd --- /dev/null +++ b/core/math/random_number_generator.h @@ -0,0 +1,61 @@ +/*************************************************************************/ +/* random_number_generator.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 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 RANDOM_NUMBER_GENERATOR_H +#define RANDOM_NUMBER_GENERATOR_H + +#include "core/math/random_pcg.h" +#include "core/reference.h" + +class RandomNumberGenerator : public Reference { + GDCLASS(RandomNumberGenerator, Reference); + + RandomPCG randbase; + +protected: + static void _bind_methods(); + +public: + _FORCE_INLINE_ void set_seed(uint64_t seed) { randbase.seed(seed); } + + _FORCE_INLINE_ uint64_t get_seed() { return randbase.get_seed(); } + + _FORCE_INLINE_ void randomize() { return randbase.randomize(); } + + _FORCE_INLINE_ uint32_t randi() { return randbase.rand(); } + + _FORCE_INLINE_ real_t randf() { return randbase.randf(); } + + _FORCE_INLINE_ real_t rand_range(real_t from, real_t to) { return randbase.random(from, to); } + + RandomNumberGenerator(); +}; + +#endif // RANDOM_NUMBER_GENERATOR_H diff --git a/main/tests/test_io.h b/core/math/random_pcg.cpp index ffebd05160..16899f79da 100644 --- a/main/tests/test_io.h +++ b/core/math/random_pcg.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* test_io.h */ +/* random_pcg.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,18 +28,28 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef TEST_IO_H -#define TEST_IO_H +#include "random_pcg.h" -/** - @author Juan Linietsky <reduzio@gmail.com> -*/ +#include "core/os/os.h" -#include "core/os/main_loop.h" +RandomPCG::RandomPCG(uint64_t seed, uint64_t inc) : + pcg() { + pcg.state = seed; + pcg.inc = inc; +} -namespace TestIO { +void RandomPCG::randomize() { + seed(OS::get_singleton()->get_ticks_usec() * pcg.state + PCG_DEFAULT_INC_64); +} -MainLoop *test(); +double RandomPCG::random(double from, double to) { + unsigned int r = rand(); + double ret = (double)r / (double)RANDOM_MAX; + return (ret) * (to - from) + from; } -#endif +float RandomPCG::random(float from, float to) { + unsigned int r = rand(); + float ret = (float)r / (float)RANDOM_MAX; + return (ret) * (to - from) + from; +} diff --git a/core/math/random_pcg.h b/core/math/random_pcg.h new file mode 100644 index 0000000000..4a43c36ede --- /dev/null +++ b/core/math/random_pcg.h @@ -0,0 +1,61 @@ +/*************************************************************************/ +/* random_pcg.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 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 RANDOM_PCG_H +#define RANDOM_PCG_H + +#include "core/math/math_defs.h" + +#include "thirdparty/misc/pcg.h" + +class RandomPCG { + pcg32_random_t pcg; + +public: + static const uint64_t DEFAULT_SEED = 12047754176567800795ULL; + static const uint64_t DEFAULT_INC = PCG_DEFAULT_INC_64; + static const uint64_t RANDOM_MAX = 4294967295; + + RandomPCG(uint64_t seed = DEFAULT_SEED, uint64_t inc = PCG_DEFAULT_INC_64); + + _FORCE_INLINE_ void seed(uint64_t seed) { pcg.state = seed; } + _FORCE_INLINE_ uint64_t get_seed() { return pcg.state; } + + void randomize(); + _FORCE_INLINE_ uint32_t rand() { return pcg32_random_r(&pcg); } + _FORCE_INLINE_ double randf() { return (double)rand() / (double)RANDOM_MAX; } + _FORCE_INLINE_ float randd() { return (float)rand() / (float)RANDOM_MAX; } + + double random(double from, double to); + float random(float from, float to); + real_t random(int from, int to) { return (real_t)random((real_t)from, (real_t)to); } +}; + +#endif // RANDOM_PCG_H diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp index 84c9f0fca6..7c6f056f09 100644 --- a/core/math/vector2.cpp +++ b/core/math/vector2.cpp @@ -167,7 +167,7 @@ Vector2 Vector2::cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, c // slide returns the component of the vector along the given plane, specified by its normal vector. Vector2 Vector2::slide(const Vector2 &p_normal) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(p_normal.is_normalized() == false, Vector2()); + ERR_FAIL_COND_V(!p_normal.is_normalized(), Vector2()); #endif return *this - p_normal * this->dot(p_normal); } @@ -178,7 +178,7 @@ Vector2 Vector2::bounce(const Vector2 &p_normal) const { Vector2 Vector2::reflect(const Vector2 &p_normal) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(p_normal.is_normalized() == false, Vector2()); + ERR_FAIL_COND_V(!p_normal.is_normalized(), Vector2()); #endif return 2.0 * p_normal * this->dot(p_normal) - *this; } diff --git a/core/math/vector2.h b/core/math/vector2.h index df49484aaf..e5e555597d 100644 --- a/core/math/vector2.h +++ b/core/math/vector2.h @@ -230,7 +230,7 @@ Vector2 Vector2::linear_interpolate(const Vector2 &p_b, real_t p_t) const { Vector2 Vector2::slerp(const Vector2 &p_b, real_t p_t) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Vector2()); + ERR_FAIL_COND_V(!is_normalized(), Vector2()); #endif real_t theta = angle_to(p_b); return rotated(theta * p_t); diff --git a/core/math/vector3.h b/core/math/vector3.h index 5302832eeb..16feba6a0c 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -218,7 +218,7 @@ Vector3 Vector3::linear_interpolate(const Vector3 &p_b, real_t p_t) const { Vector3 Vector3::slerp(const Vector3 &p_b, real_t p_t) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(is_normalized() == false, Vector3()); + ERR_FAIL_COND_V(!is_normalized(), Vector3()); #endif real_t theta = angle_to(p_b); @@ -430,7 +430,7 @@ void Vector3::zero() { // slide returns the component of the vector along the given plane, specified by its normal vector. Vector3 Vector3::slide(const Vector3 &p_normal) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(p_normal.is_normalized() == false, Vector3()); + ERR_FAIL_COND_V(!p_normal.is_normalized(), Vector3()); #endif return *this - p_normal * this->dot(p_normal); } @@ -441,7 +441,7 @@ Vector3 Vector3::bounce(const Vector3 &p_normal) const { Vector3 Vector3::reflect(const Vector3 &p_normal) const { #ifdef MATH_CHECKS - ERR_FAIL_COND_V(p_normal.is_normalized() == false, Vector3()); + ERR_FAIL_COND_V(!p_normal.is_normalized(), Vector3()); #endif return 2.0 * p_normal * this->dot(p_normal) - *this; } diff --git a/core/message_queue.cpp b/core/message_queue.cpp index 7f788c90a7..2952593798 100644 --- a/core/message_queue.cpp +++ b/core/message_queue.cpp @@ -209,9 +209,9 @@ void MessageQueue::statistics() { } break; } + } else { //object was deleted print_line("Object was deleted while awaiting a callback"); - } else { null_count++; } @@ -338,6 +338,7 @@ MessageQueue::MessageQueue() { buffer_end = 0; buffer_max_used = 0; buffer_size = GLOBAL_DEF_RST("memory/limits/message_queue/max_size_kb", DEFAULT_QUEUE_SIZE_KB); + ProjectSettings::get_singleton()->set_custom_property_info("memory/limits/message_queue/max_size_kb", PropertyInfo(Variant::INT, "memory/limits/message_queue/max_size_kb", PROPERTY_HINT_RANGE, "0,2048,1,or_greater")); buffer_size *= 1024; buffer = memnew_arr(uint8_t, buffer_size); } diff --git a/core/oa_hash_map.h b/core/oa_hash_map.h index 3705762d6c..9840442519 100644 --- a/core/oa_hash_map.h +++ b/core/oa_hash_map.h @@ -125,7 +125,7 @@ private: while (42) { if (hashes[pos] == EMPTY_HASH) { - _construct(pos, hash, p_key, p_value); + _construct(pos, hash, key, value); return; } @@ -136,7 +136,7 @@ private: if (hashes[pos] & DELETED_HASH_BIT) { // we found a place where we can fit in! - _construct(pos, hash, p_key, p_value); + _construct(pos, hash, key, value); return; } diff --git a/core/object.cpp b/core/object.cpp index 946040ba34..3a14c7c0b5 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -440,16 +440,6 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid if (r_valid) *r_valid = true; return; -#ifdef TOOLS_ENABLED - } else if (p_name == CoreStringNames::get_singleton()->_sections_unfolded) { - Array arr = p_value; - for (int i = 0; i < arr.size(); i++) { - editor_section_folding.insert(arr[i]); - } - if (r_valid) - *r_valid = true; - return; -#endif } //something inside the object... :| @@ -520,16 +510,7 @@ Variant Object::get(const StringName &p_name, bool *r_valid) const { if (r_valid) *r_valid = true; return ret; -#ifdef TOOLS_ENABLED - } else if (p_name == CoreStringNames::get_singleton()->_sections_unfolded) { - Array array; - for (Set<String>::Element *E = editor_section_folding.front(); E; E = E->next()) { - array.push_back(E->get()); - } - if (r_valid) - *r_valid = true; - return array; -#endif + } else { //something inside the object... :| bool success = _getv(p_name, ret); @@ -655,15 +636,11 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons #ifdef TOOLS_ENABLED p_list->push_back(PropertyInfo(Variant::NIL, "Script", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_GROUP)); #endif - p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_STORE_IF_NONZERO)); + p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT)); } -#ifdef TOOLS_ENABLED - if (editor_section_folding.size()) { - p_list->push_back(PropertyInfo(Variant::ARRAY, CoreStringNames::get_singleton()->_sections_unfolded, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); + if (!metadata.empty()) { + p_list->push_back(PropertyInfo(Variant::DICTIONARY, "__meta__", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); } -#endif - if (!metadata.empty()) - p_list->push_back(PropertyInfo(Variant::DICTIONARY, "__meta__", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL | PROPERTY_USAGE_STORE_IF_NONZERO)); if (script_instance && !p_reversed) { p_list->push_back(PropertyInfo(Variant::NIL, "Script Variables", PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY)); script_instance->get_property_list(p_list); @@ -1466,8 +1443,20 @@ Error Object::connect(const StringName &p_signal, Object *p_to_object, const Str if (!s) { bool signal_is_valid = ClassDB::has_signal(get_class_name(), p_signal); //check in script - if (!signal_is_valid && !script.is_null() && Ref<Script>(script)->has_script_signal(p_signal)) - signal_is_valid = true; + if (!signal_is_valid && !script.is_null()) { + + if (Ref<Script>(script)->has_script_signal(p_signal)) { + signal_is_valid = true; + } +#ifdef TOOLS_ENABLED + else { + //allow connecting signals anyway if script is invalid, see issue #17070 + if (!Ref<Script>(script)->is_valid()) { + signal_is_valid = true; + } + } +#endif + } if (!signal_is_valid) { ERR_EXPLAIN("In Object of type '" + String(get_class()) + "': Attempt to connect nonexistent signal '" + p_signal + "' to method '" + p_to_object->get_class() + "." + p_to_method + "'"); @@ -1738,6 +1727,8 @@ void Object::_bind_methods() { ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "call_deferred", &Object::_call_deferred_bind, mi); } + ClassDB::bind_method(D_METHOD("set_deferred", "property", "value"), &Object::set_deferred); + ClassDB::bind_method(D_METHOD("callv", "method", "arg_array"), &Object::callv); ClassDB::bind_method(D_METHOD("has_method", "method"), &Object::has_method); @@ -1794,6 +1785,10 @@ void Object::call_deferred(const StringName &p_method, VARIANT_ARG_DECLARE) { MessageQueue::get_singleton()->push_call(this, p_method, VARIANT_ARG_PASS); } +void Object::set_deferred(const StringName &p_property, const Variant &p_value) { + MessageQueue::get_singleton()->push_set(this, p_property, p_value); +} + void Object::set_block_signals(bool p_block) { _block_signals = p_block; @@ -1958,30 +1953,30 @@ Object::~Object() { memdelete(script_instance); script_instance = NULL; - List<Connection> sconnections; const StringName *S = NULL; - while ((S = signal_map.next(S))) { + while ((S = signal_map.next(NULL))) { Signal *s = &signal_map[*S]; - ERR_EXPLAIN("Attempt to delete an object in the middle of a signal emission from it"); - ERR_CONTINUE(s->lock > 0); - - for (int i = 0; i < s->slot_map.size(); i++) { - - sconnections.push_back(s->slot_map.getv(i).conn); + if (s->lock) { + ERR_EXPLAIN("Attempt to delete an object in the middle of a signal emission from it"); + ERR_CONTINUE(s->lock > 0); } - } - for (List<Connection>::Element *E = sconnections.front(); E; E = E->next()) { + //brute force disconnect for performance + int slot_count = s->slot_map.size(); + const VMap<Signal::Target, Signal::Slot>::Pair *slot_list = s->slot_map.get_array(); - Connection &c = E->get(); - ERR_CONTINUE(c.source != this); //bug? + for (int i = 0; i < slot_count; i++) { + + slot_list[i].value.conn.target->connections.erase(slot_list[i].value.cE); + } - this->_disconnect(c.signal, c.target, c.method, true); + signal_map.erase(*S); } + //signals from nodes that connect to this node while (connections.size()) { Connection c = connections.front()->get(); diff --git a/core/object.h b/core/object.h index b23160c1df..88a98dacbe 100644 --- a/core/object.h +++ b/core/object.h @@ -103,8 +103,9 @@ enum PropertyUsageFlags { PROPERTY_USAGE_INTERNATIONALIZED = 64, //hint for internationalized strings PROPERTY_USAGE_GROUP = 128, //used for grouping props in the editor PROPERTY_USAGE_CATEGORY = 256, - PROPERTY_USAGE_STORE_IF_NONZERO = 512, //only store if nonzero - PROPERTY_USAGE_STORE_IF_NONONE = 1024, //only store if false + //those below are deprecated thanks to ClassDB's now class value cache + //PROPERTY_USAGE_STORE_IF_NONZERO = 512, //only store if nonzero + //PROPERTY_USAGE_STORE_IF_NONONE = 1024, //only store if false PROPERTY_USAGE_NO_INSTANCE_STATE = 2048, PROPERTY_USAGE_RESTART_IF_CHANGED = 4096, PROPERTY_USAGE_SCRIPT_VARIABLE = 8192, @@ -126,10 +127,6 @@ enum PropertyUsageFlags { #define ADD_SIGNAL(m_signal) ClassDB::add_signal(get_class_static(), m_signal) #define ADD_PROPERTY(m_property, m_setter, m_getter) ClassDB::add_property(get_class_static(), m_property, _scs_create(m_setter), _scs_create(m_getter)) #define ADD_PROPERTYI(m_property, m_setter, m_getter, m_index) ClassDB::add_property(get_class_static(), m_property, _scs_create(m_setter), _scs_create(m_getter), m_index) -#define ADD_PROPERTYNZ(m_property, m_setter, m_getter) ClassDB::add_property(get_class_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONZERO), _scs_create(m_setter), _scs_create(m_getter)) -#define ADD_PROPERTYINZ(m_property, m_setter, m_getter, m_index) ClassDB::add_property(get_class_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONZERO), _scs_create(m_setter), _scs_create(m_getter), m_index) -#define ADD_PROPERTYNO(m_property, m_setter, m_getter) ClassDB::add_property(get_class_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONONE), _scs_create(m_setter), _scs_create(m_getter)) -#define ADD_PROPERTYINO(m_property, m_setter, m_getter, m_index) ClassDB::add_property(get_class_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONONE), _scs_create(m_setter), _scs_create(m_getter), m_index) #define ADD_GROUP(m_name, m_prefix) ClassDB::add_property_group(get_class_static(), m_name, m_prefix) struct PropertyInfo { @@ -701,6 +698,7 @@ public: bool is_connected(const StringName &p_signal, Object *p_to_object, const StringName &p_to_method) const; void call_deferred(const StringName &p_method, VARIANT_ARG_LIST); + void set_deferred(const StringName &p_property, const Variant &p_value); void set_block_signals(bool p_block); bool is_blocking_signals() const; @@ -723,6 +721,9 @@ public: #ifdef TOOLS_ENABLED void editor_set_section_unfold(const String &p_section, bool p_unfolded); bool editor_is_section_unfolded(const String &p_section); + const Set<String> &editor_get_section_folding() const { return editor_section_folding; } + void editor_clear_section_folding() { editor_section_folding.clear(); } + #endif //used by script languages to store binding data diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp index e09e5e16ad..679b1c9054 100644 --- a/core/os/file_access.cpp +++ b/core/os/file_access.cpp @@ -346,9 +346,9 @@ String FileAccess::get_line() const { return String::utf8(line.get_data()); } -Vector<String> FileAccess::get_csv_line(String delim) const { +Vector<String> FileAccess::get_csv_line(const String &p_delim) const { - ERR_FAIL_COND_V(delim.length() != 1, Vector<String>()); + ERR_FAIL_COND_V(p_delim.length() != 1, Vector<String>()); String l; int qc = 0; @@ -376,7 +376,7 @@ Vector<String> FileAccess::get_csv_line(String delim) const { CharType c = l[i]; CharType s[2] = { 0, 0 }; - if (!in_quote && c == delim[0]) { + if (!in_quote && c == p_delim[0]) { strings.push_back(current); current = String(); } else if (c == '"') { @@ -525,6 +525,28 @@ void FileAccess::store_line(const String &p_line) { store_8('\n'); } +void FileAccess::store_csv_line(const Vector<String> &p_values, const String &p_delim) { + + ERR_FAIL_COND(p_delim.length() != 1); + + String line = ""; + int size = p_values.size(); + for (int i = 0; i < size; ++i) { + String value = p_values[i]; + + if (value.find("\"") != -1 || value.find(p_delim) != -1 || value.find("\n") != -1) { + value = "\"" + value.replace("\"", "\"\"") + "\""; + } + if (i < size - 1) { + value += p_delim; + } + + line += value; + } + + store_line(line); +} + void FileAccess::store_buffer(const uint8_t *p_src, int p_length) { for (int i = 0; i < p_length; i++) diff --git a/core/os/file_access.h b/core/os/file_access.h index b7d93e9f5d..f1f3005dd9 100644 --- a/core/os/file_access.h +++ b/core/os/file_access.h @@ -112,7 +112,7 @@ public: virtual int get_buffer(uint8_t *p_dst, int p_length) const; ///< get an array of bytes virtual String get_line() const; virtual String get_token() const; - virtual Vector<String> get_csv_line(String delim = ",") const; + virtual Vector<String> get_csv_line(const String &p_delim = ",") const; /**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac) * It's not about the current CPU type but file formats. @@ -136,6 +136,7 @@ public: virtual void store_string(const String &p_string); virtual void store_line(const String &p_line); + virtual void store_csv_line(const Vector<String> &p_values, const String &p_delim = ","); virtual void store_pascal_string(const String &p_string); virtual String get_pascal_string(); diff --git a/core/os/input.cpp b/core/os/input.cpp index 6830df7e81..3b895b16b4 100644 --- a/core/os/input.cpp +++ b/core/os/input.cpp @@ -42,7 +42,7 @@ Input *Input::get_singleton() { } void Input::set_mouse_mode(MouseMode p_mode) { - ERR_FAIL_INDEX(p_mode, 4); + ERR_FAIL_INDEX((int)p_mode, 4); OS::get_singleton()->set_mouse_mode((OS::MouseMode)p_mode); } @@ -86,7 +86,7 @@ void Input::_bind_methods() { ClassDB::bind_method(D_METHOD("set_mouse_mode", "mode"), &Input::set_mouse_mode); ClassDB::bind_method(D_METHOD("get_mouse_mode"), &Input::get_mouse_mode); ClassDB::bind_method(D_METHOD("warp_mouse_position", "to"), &Input::warp_mouse_position); - ClassDB::bind_method(D_METHOD("action_press", "action"), &Input::action_press); + ClassDB::bind_method(D_METHOD("action_press", "action", "strength"), &Input::action_press, DEFVAL(1.f)); ClassDB::bind_method(D_METHOD("action_release", "action"), &Input::action_release); ClassDB::bind_method(D_METHOD("set_default_cursor_shape", "shape"), &Input::set_default_cursor_shape, DEFVAL(CURSOR_ARROW)); ClassDB::bind_method(D_METHOD("set_custom_mouse_cursor", "image", "shape", "hotspot"), &Input::set_custom_mouse_cursor, DEFVAL(CURSOR_ARROW), DEFVAL(Vector2())); diff --git a/core/os/input.h b/core/os/input.h index db523d6789..dc2c213db2 100644 --- a/core/os/input.h +++ b/core/os/input.h @@ -113,7 +113,7 @@ public: virtual Vector3 get_magnetometer() const = 0; virtual Vector3 get_gyroscope() const = 0; - virtual void action_press(const StringName &p_action) = 0; + virtual void action_press(const StringName &p_action, float p_strength = 1.f) = 0; virtual void action_release(const StringName &p_action) = 0; void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const; diff --git a/core/os/memory.cpp b/core/os/memory.cpp index 041371a6e2..f25e40ef78 100644 --- a/core/os/memory.cpp +++ b/core/os/memory.cpp @@ -172,9 +172,9 @@ void Memory::free_static(void *p_ptr, bool p_pad_align) { if (prepad) { mem -= PAD_ALIGN; - uint64_t *s = (uint64_t *)mem; #ifdef DEBUG_ENABLED + uint64_t *s = (uint64_t *)mem; atomic_sub(&mem_usage, *s); #endif diff --git a/core/os/os.h b/core/os/os.h index 7786ffb26e..53a5ebde01 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -480,6 +480,7 @@ public: enum EngineContext { CONTEXT_EDITOR, CONTEXT_PROJECTMAN, + CONTEXT_ENGINE, }; virtual void set_context(int p_context); diff --git a/core/os/rw_lock.h b/core/os/rw_lock.h index 8d1029723b..4333d9a016 100644 --- a/core/os/rw_lock.h +++ b/core/os/rw_lock.h @@ -57,9 +57,7 @@ class RWLockRead { public: RWLockRead(const RWLock *p_lock) { - if (p_lock) { - lock = const_cast<RWLock *>(p_lock); - } + lock = const_cast<RWLock *>(p_lock); if (lock) lock->read_lock(); } ~RWLockRead() { diff --git a/core/project_settings.cpp b/core/project_settings.cpp index 99a23bbee1..407bb78375 100644 --- a/core/project_settings.cpp +++ b/core/project_settings.cpp @@ -288,9 +288,28 @@ void ProjectSettings::_convert_to_last_version() { } } +/* + * This method is responsible for loading a project.godot file and/or data file + * using the following merit order: + * - If using NetworkClient, try to lookup project file or fail. + * - If --main-pack was passed by the user (`p_main_pack`), load it or fail. + * - Search for .pck file matching binary name. There are two possibilities: + * o exec_path.get_basename() + '.pck' (e.g. 'win_game.exe' -> 'win_game.pck') + * o exec_path + '.pck' (e.g. 'linux_game' -> 'linux_game.pck') + * For each tentative, if the file exists, load it or fail. + * - On relevant platforms (Android/iOS), lookup project file in OS resource path. + * If found, load it or fail. + * - Lookup project file in passed `p_path` (--path passed by the user), i.e. we + * are running from source code. + * If not found and `p_upwards` is true (--upwards passed by the user), look for + * project files in parent folders up to the system root (used to run a game + * from command line while in a subfolder). + * If a project file is found, load it or fail. + * If nothing was found, error out. + */ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards) { - //If looking for files in network, just use network! + // If looking for files in a network client, use it directly if (FileAccessNetworkClient::get_singleton()) { @@ -302,9 +321,7 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bo return err; } - String exec_path = OS::get_singleton()->get_executable_path(); - - //Attempt with a passed main pack first + // Attempt with a user-defined main pack first if (p_main_pack != "") { @@ -320,25 +337,39 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bo return err; } - //Attempt with execname.pck + // Attempt with exec_name.pck + // (This is the usual case when distributing a Godot game.) + + // Based on the OS, it can be the exec path + '.pck' (Linux w/o extension, macOS in .app bundle) + // or the exec path's basename + '.pck' (Windows). + // We need to test both possibilities as extensions for Linux binaries are optional + // (so both 'mygame.bin' and 'mygame' should be able to find 'mygame.pck'). + + String exec_path = OS::get_singleton()->get_executable_path(); + if (exec_path != "") { bool found = false; - // get our filename without our path (note, using exec_path.get_file before get_basename anymore because not all file systems have dots in their file names!) - String filebase_name = exec_path.get_file().get_basename(); + String exec_dir = exec_path.get_base_dir(); + String exec_filename = exec_path.get_file(); + String exec_basename = exec_filename.get_basename(); + + // Try to load data pack at the location of the executable + // As mentioned above, we have two potential names to attempt - // try to open at the location of executable - String datapack_name = exec_path.get_base_dir().plus_file(filebase_name) + ".pck"; - if (_load_resource_pack(datapack_name)) { + if (_load_resource_pack(exec_dir.plus_file(exec_basename + ".pck")) || + _load_resource_pack(exec_dir.plus_file(exec_filename + ".pck"))) { found = true; } else { - datapack_name = filebase_name + ".pck"; - if (_load_resource_pack(datapack_name)) { + // If we couldn't find them next to the executable, we attempt + // the current working directory. Same story, two tests. + if (_load_resource_pack(exec_basename + ".pck") || + _load_resource_pack(exec_filename + ".pck")) { found = true; } } - // if we opened our package, try and load our project... + // If we opened our package, try and load our project if (found) { Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); if (err == OK) { @@ -350,17 +381,15 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bo } } - //Try to use the filesystem for files, according to OS. (only Android -when reading from pck- and iOS use this) - if (OS::get_singleton()->get_resource_dir() != "") { - //OS will call Globals->get_resource_path which will be empty if not overridden! - //if the OS would rather use somewhere else, then it will not be empty. + // Try to use the filesystem for files, according to OS. (only Android -when reading from pck- and iOS use this) + if (OS::get_singleton()->get_resource_dir() != "") { + // OS will call ProjectSettings->get_resource_path which will be empty if not overridden! + // If the OS would rather use a specific location, then it will not be empty. resource_path = OS::get_singleton()->get_resource_dir().replace("\\", "/"); - if (resource_path.length() && resource_path[resource_path.length() - 1] == '/') + if (resource_path != "" && resource_path[resource_path.length() - 1] == '/') { resource_path = resource_path.substr(0, resource_path.length() - 1); // chop end - - // data.pck and data.zip are deprecated and no longer supported, apologies. - // make sure this is loaded from the resource path + } Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); if (err == OK) { @@ -371,21 +400,19 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bo return err; } - //Nothing was found, try to find a project.godot somewhere! + // Nothing was found, try to find a project file in provided path (`p_path`) + // or, if requested (`p_upwards`) in parent directories. DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); ERR_FAIL_COND_V(!d, ERR_CANT_CREATE); - d->change_dir(p_path); - String candidate = d->get_current_dir(); String current_dir = d->get_current_dir(); - + String candidate = current_dir; bool found = false; Error err; while (true) { - err = _load_settings_text_or_binary(current_dir.plus_file("project.godot"), current_dir.plus_file("project.binary")); if (err == OK) { // Optional, we don't mind if it fails @@ -396,10 +423,10 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bo } if (p_upwards) { - // Try to load settings ascending through dirs shape! + // Try to load settings ascending through parent directories d->change_dir(".."); if (d->get_current_dir() == current_dir) - break; //not doing anything useful + break; // not doing anything useful current_dir = d->get_current_dir(); } else { break; @@ -416,6 +443,8 @@ Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bo if (resource_path.length() && resource_path[resource_path.length() - 1] == '/') resource_path = resource_path.substr(0, resource_path.length() - 1); // chop end + // If we're loading a project.godot from source code, we can operate some + // ProjectSettings conversions if need be. _convert_to_last_version(); return OK; @@ -1133,6 +1162,7 @@ ProjectSettings::ProjectSettings() { custom_prop_info["rendering/quality/intended_usage/framebuffer_allocation"] = PropertyInfo(Variant::INT, "rendering/quality/intended_usage/framebuffer_allocation", PROPERTY_HINT_ENUM, "2D,2D Without Sampling,3D,3D Without Effects"); GLOBAL_DEF("debug/settings/profiler/max_functions", 16384); + custom_prop_info["debug/settings/profiler/max_functions"] = PropertyInfo(Variant::INT, "debug/settings/profiler/max_functions", PROPERTY_HINT_RANGE, "128,65535,1"); //assigning here, because using GLOBAL_GET on every block for compressing can be slow Compression::zstd_long_distance_matching = GLOBAL_DEF("compression/formats/zstd/long_distance_matching", false); diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index b0023b4c26..6b776cb0b1 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -55,6 +55,7 @@ #include "core/math/a_star.h" #include "core/math/expression.h" #include "core/math/geometry.h" +#include "core/math/random_number_generator.h" #include "core/math/triangle_mesh.h" #include "core/os/input.h" #include "core/os/main_loop.h" @@ -180,6 +181,7 @@ void register_core_types() { ClassDB::register_virtual_class<PackedDataContainerRef>(); ClassDB::register_class<AStar>(); ClassDB::register_class<EncodedObjectAsID>(); + ClassDB::register_class<RandomNumberGenerator>(); ClassDB::register_class<JSONParseResult>(); @@ -199,6 +201,7 @@ void register_core_types() { void register_core_settings() { //since in register core types, globals may not e present GLOBAL_DEF_RST("network/limits/packet_peer_stream/max_buffer_po2", (16)); + ProjectSettings::get_singleton()->set_custom_property_info("network/limits/packet_peer_stream/max_buffer_po2", PropertyInfo(Variant::INT, "network/limits/packet_peer_stream/max_buffer_po2", PROPERTY_HINT_RANGE, "0,64,1,or_greater")); } void register_core_singletons() { diff --git a/core/resource.cpp b/core/resource.cpp index 4dcd338e94..a76e16232e 100644 --- a/core/resource.cpp +++ b/core/resource.cpp @@ -379,9 +379,9 @@ void Resource::_bind_methods() { ClassDB::bind_method(D_METHOD("duplicate", "subresources"), &Resource::duplicate, DEFVAL(false)); ADD_SIGNAL(MethodInfo("changed")); ADD_GROUP("Resource", "resource_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "resource_local_to_scene"), "set_local_to_scene", "is_local_to_scene"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "resource_local_to_scene"), "set_local_to_scene", "is_local_to_scene"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "resource_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_path", "get_path"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "resource_name"), "set_name", "get_name"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "resource_name"), "set_name", "get_name"); BIND_VMETHOD(MethodInfo("_setup_local_to_scene")); } diff --git a/core/rid.h b/core/rid.h index fbb3e443fc..81d5b45d21 100644 --- a/core/rid.h +++ b/core/rid.h @@ -118,7 +118,6 @@ protected: p_rid._data->_owner = NULL; } -# #endif public: diff --git a/core/ring_buffer.h b/core/ring_buffer.h index 2516880064..54486f8cad 100644 --- a/core/ring_buffer.h +++ b/core/ring_buffer.h @@ -135,6 +135,12 @@ public: return p_n; }; + inline int decrease_write(int p_n) { + p_n = MIN(p_n, data_left()); + inc(write_pos, size_mask + 1 - p_n); + return p_n; + } + Error write(const T &p_v) { ERR_FAIL_COND_V(space_left() < 1, FAILED); data.write[inc(write_pos, 1)] = p_v; diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp index 388e3b77a3..a03ddd0983 100644 --- a/core/script_debugger_remote.cpp +++ b/core/script_debugger_remote.cpp @@ -108,7 +108,7 @@ void ScriptDebuggerRemote::_put_variable(const String &p_name, const Variant &p_ } int len = 0; - Error err = encode_variant(var, NULL, len); + Error err = encode_variant(var, NULL, len, true); if (err != OK) ERR_PRINT("Failed to encode variant"); @@ -578,8 +578,14 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) { for (ScriptConstantsMap::Element *sc = constants.front(); sc; sc = sc->next()) { for (Map<StringName, Variant>::Element *E = sc->get().front(); E; E = E->next()) { String script_path = sc->key() == si->get_script().ptr() ? "" : sc->key()->get_path().get_file() + "/"; - PropertyInfo pi(E->value().get_type(), "Constants/" + script_path + E->key()); - properties.push_back(PropertyDesc(pi, E->value())); + if (E->value().get_type() == Variant::OBJECT) { + Variant id = ((Object *)E->value())->get_instance_id(); + PropertyInfo pi(id.get_type(), "Constants/" + E->key(), PROPERTY_HINT_OBJECT_ID, "Object"); + properties.push_back(PropertyDesc(pi, id)); + } else { + PropertyInfo pi(E->value().get_type(), "Constants/" + script_path + E->key()); + properties.push_back(PropertyDesc(pi, E->value())); + } } } } @@ -592,8 +598,14 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) { Map<StringName, Variant> constants; s->get_constants(&constants); for (Map<StringName, Variant>::Element *E = constants.front(); E; E = E->next()) { - PropertyInfo pi(E->value().get_type(), String("Constants/") + E->key()); - properties.push_front(PropertyDesc(pi, E->value())); + if (E->value().get_type() == Variant::OBJECT) { + Variant id = ((Object *)E->value())->get_instance_id(); + PropertyInfo pi(id.get_type(), "Constants/" + E->key(), PROPERTY_HINT_OBJECT_ID, "Object"); + properties.push_front(PropertyDesc(pi, E->value())); + } else { + PropertyInfo pi(E->value().get_type(), String("Constants/") + E->key()); + properties.push_front(PropertyDesc(pi, E->value())); + } } } } @@ -634,10 +646,9 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) { prop.push_back(pi.hint); prop.push_back(pi.hint_string); prop.push_back(pi.usage); + if (!res.is_null()) { - var = String("PATH") + res->get_path(); - } else if (var.get_type() == Variant::STRING) { - var = String("DATA") + var; + var = res->get_path(); } prop.push_back(var); @@ -1089,7 +1100,7 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() : eh.userdata = this; add_error_handler(&eh); - profile_info.resize(CLAMP(int(ProjectSettings::get_singleton()->get("debug/settings/profiler/max_functions")), 128, 65535)); + profile_info.resize(GLOBAL_GET("debug/settings/profiler/max_functions")); profile_info_ptrs.resize(profile_info.size()); } diff --git a/core/script_language.cpp b/core/script_language.cpp index 5b65da9ef1..496521486e 100644 --- a/core/script_language.cpp +++ b/core/script_language.cpp @@ -563,7 +563,8 @@ Variant PlaceHolderScriptInstance::property_get_fallback(const StringName &p_nam PlaceHolderScriptInstance::PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script, Object *p_owner) : owner(p_owner), language(p_language), - script(p_script) { + script(p_script), + build_failed(false) { } PlaceHolderScriptInstance::~PlaceHolderScriptInstance() { diff --git a/core/script_language.h b/core/script_language.h index bcd9c2c5ea..654d1d4265 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -128,6 +128,7 @@ public: virtual MethodInfo get_method_info(const StringName &p_method) const = 0; virtual bool is_tool() const = 0; + virtual bool is_valid() const = 0; virtual ScriptLanguage *get_language() const = 0; diff --git a/core/set.h b/core/set.h index 744019d5b4..59aa54128e 100644 --- a/core/set.h +++ b/core/set.h @@ -595,6 +595,7 @@ public: return e; } + inline bool empty() const { return _data.size_cache == 0; } inline int size() const { return _data.size_cache; } int calculate_depth() const { diff --git a/core/typedefs.h b/core/typedefs.h index 2b26bf08f7..5c15da9c2d 100644 --- a/core/typedefs.h +++ b/core/typedefs.h @@ -44,6 +44,7 @@ #define _MKSTR(m_x) _STR(m_x) #endif +//should always inline no matter what #ifndef _ALWAYS_INLINE_ #if defined(__GNUC__) && (__GNUC__ >= 4) @@ -58,10 +59,17 @@ #endif +//should always inline, except in some cases because it makes debugging harder #ifndef _FORCE_INLINE_ + +#ifdef DISABLE_FORCED_INLINE +#define _FORCE_INLINE_ inline +#else #define _FORCE_INLINE_ _ALWAYS_INLINE_ #endif +#endif + //custom, gcc-safe offsetof, because gcc complains a lot. template <class T> T *_nullptr() { diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp index 7d67076df5..3d41c374ea 100644 --- a/core/undo_redo.cpp +++ b/core/undo_redo.cpp @@ -325,7 +325,7 @@ bool UndoRedo::undo() { return true; } -void UndoRedo::clear_history() { +void UndoRedo::clear_history(bool p_increase_version) { ERR_FAIL_COND(action_level > 0); _discard_redo(); @@ -333,7 +333,8 @@ void UndoRedo::clear_history() { while (actions.size()) _pop_history_tail(); - //version++; + if (p_increase_version) + version++; } String UndoRedo::get_current_action_name() const { @@ -493,7 +494,7 @@ void UndoRedo::_bind_methods() { ClassDB::bind_method(D_METHOD("add_undo_property", "object", "property", "value"), &UndoRedo::add_undo_property); ClassDB::bind_method(D_METHOD("add_do_reference", "object"), &UndoRedo::add_do_reference); ClassDB::bind_method(D_METHOD("add_undo_reference", "object"), &UndoRedo::add_undo_reference); - ClassDB::bind_method(D_METHOD("clear_history"), &UndoRedo::clear_history); + ClassDB::bind_method(D_METHOD("clear_history", "increase_version"), &UndoRedo::clear_history, DEFVAL(true)); ClassDB::bind_method(D_METHOD("get_current_action_name"), &UndoRedo::get_current_action_name); ClassDB::bind_method(D_METHOD("get_version"), &UndoRedo::get_version); ClassDB::bind_method(D_METHOD("redo"), &UndoRedo::redo); diff --git a/core/undo_redo.h b/core/undo_redo.h index 22dcd60472..f09fca9a78 100644 --- a/core/undo_redo.h +++ b/core/undo_redo.h @@ -112,7 +112,7 @@ public: bool redo(); bool undo(); String get_current_action_name() const; - void clear_history(); + void clear_history(bool p_increase_version = true); uint64_t get_version() const; diff --git a/core/ustring.cpp b/core/ustring.cpp index e46896ca85..3f017fa985 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -49,7 +49,7 @@ #endif #if defined(MINGW_ENABLED) || defined(_MSC_VER) -#define snprintf _snprintf +#define snprintf _snprintf_s #endif #define MAX_DIGITS 6 @@ -586,6 +586,8 @@ String String::camelcase_to_underscore(bool lowercase) const { bool is_upper = cstr[i] >= A && cstr[i] <= Z; bool is_number = cstr[i] >= '0' && cstr[i] <= '9'; bool are_next_2_lower = false; + bool is_next_lower = false; + bool is_next_number = false; bool was_precedent_upper = cstr[i - 1] >= A && cstr[i - 1] <= Z; bool was_precedent_number = cstr[i - 1] >= '0' && cstr[i - 1] <= '9'; @@ -593,7 +595,18 @@ String String::camelcase_to_underscore(bool lowercase) const { are_next_2_lower = cstr[i + 1] >= a && cstr[i + 1] <= z && cstr[i + 2] >= a && cstr[i + 2] <= z; } - bool should_split = ((is_upper && !was_precedent_upper && !was_precedent_number) || (was_precedent_upper && is_upper && are_next_2_lower) || (is_number && !was_precedent_number)); + if (i + 1 < this->size()) { + is_next_lower = cstr[i + 1] >= a && cstr[i + 1] <= z; + is_next_number = cstr[i + 1] >= '0' && cstr[i + 1] <= '9'; + } + + const bool a = is_upper && !was_precedent_upper && !was_precedent_number; + const bool b = was_precedent_upper && is_upper && are_next_2_lower; + const bool c = is_number && !was_precedent_number; + const bool can_break_number_letter = is_number && !was_precedent_number && is_next_lower; + const bool can_break_letter_number = !is_number && was_precedent_number && (is_next_lower || is_next_number); + + bool should_split = a || b || c || can_break_number_letter || can_break_letter_number; if (should_split) { new_string += this->substr(start_index, i - start_index) + "_"; start_index = i; @@ -1828,8 +1841,8 @@ static double built_in_strtod(const C *string, /* A decimal ASCII floating-point int sign, expSign = false; double fraction, dblExp; const double *d; - register const C *p; - register int c; + const C *p; + int c; int exp = 0; /* Exponent read from "EX" field. */ int fracExp = 0; /* Exponent that derives from the fractional * part. Under normal circumstances, it is @@ -2761,16 +2774,13 @@ String String::format(const Variant &values, String placeholder) const { if (value_arr.size() == 2) { Variant v_key = value_arr[0]; - String key; - - key = v_key.get_construct_string(); + String key = v_key; if (key.left(1) == "\"" && key.right(key.length() - 1) == "\"") { key = key.substr(1, key.length() - 2); } Variant v_val = value_arr[1]; - String val; - val = v_val.get_construct_string(); + String val = v_val; if (val.left(1) == "\"" && val.right(val.length() - 1) == "\"") { val = val.substr(1, val.length() - 2); @@ -2782,8 +2792,7 @@ String String::format(const Variant &values, String placeholder) const { } } else { //Array structure ["RobotGuy","Logis","rookie"] Variant v_val = values_arr[i]; - String val; - val = v_val.get_construct_string(); + String val = v_val; if (val.left(1) == "\"" && val.right(val.length() - 1) == "\"") { val = val.substr(1, val.length() - 2); @@ -2802,8 +2811,8 @@ String String::format(const Variant &values, String placeholder) const { d.get_key_list(&keys); for (List<Variant>::Element *E = keys.front(); E; E = E->next()) { - String key = E->get().get_construct_string(); - String val = d[E->get()].get_construct_string(); + String key = E->get(); + String val = d[E->get()]; if (key.left(1) == "\"" && key.right(key.length() - 1) == "\"") { key = key.substr(1, key.length() - 2); @@ -3092,7 +3101,7 @@ String String::simplify_path() const { } else if (s.begins_with("user://")) { drive = "user://"; - s = s.substr(6, s.length()); + s = s.substr(7, s.length()); } else if (s.begins_with("/") || s.begins_with("\\")) { drive = s.substr(0, 1); @@ -4026,7 +4035,7 @@ String String::sprintf(const Array &values, bool *error) const { str = str.pad_decimals(min_decimals); // Show sign - if (show_sign && value >= 0) { + if (show_sign && str.left(1) != "-") { str = str.insert(0, "+"); } diff --git a/core/ustring.h b/core/ustring.h index d2766ec7a3..8e4dbd8031 100644 --- a/core/ustring.h +++ b/core/ustring.h @@ -63,7 +63,7 @@ public: CharString &operator+=(char p_char); int length() const { return size() ? size() - 1 : 0; } const char *get_data() const; - operator const char *() { return get_data(); }; + operator const char *() const { return get_data(); }; }; typedef wchar_t CharType; diff --git a/core/variant.cpp b/core/variant.cpp index 7d75c2243b..eb9f34fee6 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -858,7 +858,7 @@ bool Variant::is_one() const { // atomic types case BOOL: { - return _data._bool == true; + return _data._bool; } break; case INT: { @@ -1662,7 +1662,17 @@ Variant::operator Transform() const { return Transform(*_data._basis, Vector3()); else if (type == QUAT) return Transform(Basis(*reinterpret_cast<const Quat *>(_data._mem)), Vector3()); - else + else if (type == TRANSFORM2D) { + const Transform2D &t = *_data._transform2d; + Transform m; + m.basis.elements[0][0] = t.elements[0][0]; + m.basis.elements[1][0] = t.elements[0][1]; + m.basis.elements[0][1] = t.elements[1][0]; + m.basis.elements[1][1] = t.elements[1][1]; + m.origin[0] = t.elements[2][0]; + m.origin[1] = t.elements[2][1]; + return m; + } else return Transform(); } diff --git a/core/variant_call.cpp b/core/variant_call.cpp index f7fa2ebc70..0c6e43fe36 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -155,9 +155,7 @@ struct _VariantCall { funcdata.default_args = p_defaultarg; funcdata._const = p_const; funcdata.returns = p_has_return; -#ifdef DEBUG_ENABLED funcdata.return_type = p_return; -#endif if (p_argtype1.name) { funcdata.arg_types.push_back(p_argtype1.type); @@ -486,6 +484,7 @@ struct _VariantCall { VCALL_LOCALMEM0R(Dictionary, keys); VCALL_LOCALMEM0R(Dictionary, values); VCALL_LOCALMEM1R(Dictionary, duplicate); + VCALL_LOCALMEM2R(Dictionary, get); VCALL_LOCALMEM2(Array, set); VCALL_LOCALMEM1R(Array, get); @@ -1679,6 +1678,7 @@ void register_variant_methods() { ADDFUNC0R(DICTIONARY, ARRAY, Dictionary, keys, varray()); ADDFUNC0R(DICTIONARY, ARRAY, Dictionary, values, varray()); ADDFUNC1R(DICTIONARY, DICTIONARY, Dictionary, duplicate, BOOL, "deep", varray(false)); + ADDFUNC2R(DICTIONARY, NIL, Dictionary, get, NIL, "key", NIL, "default", varray(Variant())); ADDFUNC0R(ARRAY, INT, Array, size, varray()); ADDFUNC0R(ARRAY, BOOL, Array, empty, varray()); @@ -1895,6 +1895,7 @@ void register_variant_methods() { _VariantCall::add_constant(Variant::VECTOR3, "AXIS_Z", Vector3::AXIS_Z); _VariantCall::add_variant_constant(Variant::VECTOR3, "ZERO", Vector3(0, 0, 0)); + _VariantCall::add_variant_constant(Variant::VECTOR3, "ONE", Vector3(1, 1, 1)); _VariantCall::add_variant_constant(Variant::VECTOR3, "INF", Vector3(Math_INF, Math_INF, Math_INF)); _VariantCall::add_variant_constant(Variant::VECTOR3, "LEFT", Vector3(-1, 0, 0)); _VariantCall::add_variant_constant(Variant::VECTOR3, "RIGHT", Vector3(1, 0, 0)); @@ -1904,6 +1905,7 @@ void register_variant_methods() { _VariantCall::add_variant_constant(Variant::VECTOR3, "BACK", Vector3(0, 0, 1)); _VariantCall::add_variant_constant(Variant::VECTOR2, "ZERO", Vector2(0, 0)); + _VariantCall::add_variant_constant(Variant::VECTOR2, "ONE", Vector2(1, 1)); _VariantCall::add_variant_constant(Variant::VECTOR2, "INF", Vector2(Math_INF, Math_INF)); _VariantCall::add_variant_constant(Variant::VECTOR2, "LEFT", Vector2(-1, 0)); _VariantCall::add_variant_constant(Variant::VECTOR2, "RIGHT", Vector2(1, 0)); diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 9afc31a772..9f172f0d57 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -521,7 +521,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Dictionary *arr_a = reinterpret_cast<const Dictionary *>(p_a._data._mem); const Dictionary *arr_b = reinterpret_cast<const Dictionary *>(p_b._data._mem); - _RETURN((*arr_a == *arr_b) == false); + _RETURN(*arr_a != *arr_b); } CASE_TYPE(math, OP_NOT_EQUAL, ARRAY) { @@ -2149,7 +2149,7 @@ void Variant::set(const Variant &p_index, const Variant &p_value, bool *r_valid) int idx = p_index; if (idx < 0) idx += 4; - if (idx >= 0 || idx < 4) { + if (idx >= 0 && idx < 4) { Color *v = reinterpret_cast<Color *>(_data._mem); (*v)[idx] = p_value; valid = true; @@ -2524,7 +2524,7 @@ Variant Variant::get(const Variant &p_index, bool *r_valid) const { int idx = p_index; if (idx < 0) idx += 4; - if (idx >= 0 || idx < 4) { + if (idx >= 0 && idx < 4) { const Color *v = reinterpret_cast<const Color *>(_data._mem); valid = true; return (*v)[idx]; @@ -3521,7 +3521,7 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant & //not as efficient but.. real_t va = a; real_t vb = b; - r_dst = (1.0 - c) * va + vb * c; + r_dst = va + (vb - va) * c; } else { r_dst = a; @@ -3542,13 +3542,13 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant & case INT: { int64_t va = a._data._int; int64_t vb = b._data._int; - r_dst = int((1.0 - c) * va + vb * c); + r_dst = int(va + (vb - va) * c); } return; case REAL: { real_t va = a._data._real; real_t vb = b._data._real; - r_dst = (1.0 - c) * va + vb * c; + r_dst = va + (vb - va) * c; } return; case STRING: { @@ -3556,7 +3556,9 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant & String sa = *reinterpret_cast<const String *>(a._data._mem); String sb = *reinterpret_cast<const String *>(b._data._mem); String dst; - int csize = sb.length() * c + sa.length() * (1.0 - c); + int sa_len = sa.length(); + int sb_len = sb.length(); + int csize = sa_len + (sb_len - sa_len) * c; if (csize == 0) { r_dst = ""; return; diff --git a/core/vmap.h b/core/vmap.h index 9fc99e636d..5f6d8190c6 100644 --- a/core/vmap.h +++ b/core/vmap.h @@ -36,22 +36,23 @@ template <class T, class V> class VMap { - - struct _Pair { +public: + struct Pair { T key; V value; - _FORCE_INLINE_ _Pair() {} + _FORCE_INLINE_ Pair() {} - _FORCE_INLINE_ _Pair(const T &p_key, const V &p_value) { + _FORCE_INLINE_ Pair(const T &p_key, const V &p_value) { key = p_key; value = p_value; } }; - CowData<_Pair> _cowdata; +private: + CowData<Pair> _cowdata; _FORCE_INLINE_ int _find(const T &p_val, bool &r_exact) const { @@ -61,7 +62,7 @@ class VMap { int low = 0; int high = _cowdata.size() - 1; - const _Pair *a = _cowdata.ptr(); + const Pair *a = _cowdata.ptr(); int middle = 0; #if DEBUG_ENABLED @@ -95,7 +96,7 @@ class VMap { int low = 0; int high = _cowdata.size() - 1; int middle; - const _Pair *a = _cowdata.ptr(); + const Pair *a = _cowdata.ptr(); while (low <= high) { middle = (low + high) / 2; @@ -121,7 +122,7 @@ public: _cowdata.get_m(pos).value = p_val; return pos; } - _cowdata.insert(pos, _Pair(p_key, p_val)); + _cowdata.insert(pos, Pair(p_key, p_val)); return pos; } @@ -152,12 +153,12 @@ public: _FORCE_INLINE_ int size() const { return _cowdata.size(); } _FORCE_INLINE_ bool empty() const { return _cowdata.empty(); } - const _Pair *get_array() const { + const Pair *get_array() const { return _cowdata.ptr(); } - _Pair *get_array() { + Pair *get_array() { return _cowdata.ptrw(); } diff --git a/doc/Doxyfile b/doc/Doxyfile index c1904f17c9..a7aa204741 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = Godot # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = +PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -162,7 +162,7 @@ FULL_PATH_NAMES = YES # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. -STRIP_FROM_PATH = +STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which @@ -171,7 +171,7 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't @@ -238,13 +238,13 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. -ALIASES = +ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. -TCL_SUBST = +TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -291,7 +291,7 @@ OPTIMIZE_OUTPUT_VHDL = NO # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. -EXTENSION_MAPPING = +EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable @@ -632,7 +632,7 @@ GENERATE_DEPRECATEDLIST= YES # sections, marked by \if <section_label> ... \endif and \cond <section_label> # ... \endcond blocks. -ENABLED_SECTIONS = +ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the @@ -674,7 +674,7 @@ SHOW_NAMESPACES = YES # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. -FILE_VERSION_FILTER = +FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated @@ -687,7 +687,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -697,7 +697,7 @@ LAYOUT_FILE = # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. -CITE_BIB_FILES = +CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages @@ -756,7 +756,7 @@ WARN_FORMAT = "$file:$line: $text" # messages should be written. If left blank the output is written to standard # error (stderr). -WARN_LOGFILE = +WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -844,7 +844,7 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -860,7 +860,7 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -871,13 +871,13 @@ EXCLUDE_PATTERNS = # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and @@ -897,7 +897,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -914,7 +914,7 @@ IMAGE_PATH = # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. -INPUT_FILTER = +INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the @@ -923,7 +923,7 @@ INPUT_FILTER = # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. -FILTER_PATTERNS = +FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for @@ -938,7 +938,7 @@ FILTER_SOURCE_FILES = NO # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. -FILTER_SOURCE_PATTERNS = +FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page @@ -1050,7 +1050,7 @@ CLANG_ASSISTED_PARSING = NO # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. -CLANG_OPTIONS = +CLANG_OPTIONS = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -1076,7 +1076,7 @@ COLS_IN_ALPHA_INDEX = 5 # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -IGNORE_PREFIX = +IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output @@ -1120,7 +1120,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1130,7 +1130,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1142,7 +1142,7 @@ HTML_FOOTER = # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_STYLESHEET = +HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets @@ -1155,7 +1155,7 @@ HTML_STYLESHEET = # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1165,7 +1165,7 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1293,7 +1293,7 @@ GENERATE_HTMLHELP = NO # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_FILE = +CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, @@ -1301,7 +1301,7 @@ CHM_FILE = # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). @@ -1314,7 +1314,7 @@ GENERATE_CHI = NO # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_INDEX_ENCODING = +CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it @@ -1345,7 +1345,7 @@ GENERATE_QHP = NO # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. -QCH_FILE = +QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace @@ -1370,7 +1370,7 @@ QHP_VIRTUAL_FOLDER = doc # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom @@ -1378,21 +1378,21 @@ QHP_CUST_FILTER_NAME = # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_ATTRS = +QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_SECT_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. -QHG_LOCATION = +QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To @@ -1525,7 +1525,7 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_EXTENSIONS = +MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site @@ -1533,7 +1533,7 @@ MATHJAX_EXTENSIONS = # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_CODEFILE = +MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and @@ -1593,7 +1593,7 @@ EXTERNAL_SEARCH = NO # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHENGINE_URL = +SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the @@ -1609,7 +1609,7 @@ SEARCHDATA_FILE = searchdata.xml # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH_ID = +EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are @@ -1619,7 +1619,7 @@ EXTERNAL_SEARCH_ID = # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. -EXTRA_SEARCH_MAPPINGS = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output @@ -1680,7 +1680,7 @@ PAPER_TYPE = a4 # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. -EXTRA_PACKAGES = +EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the # generated LaTeX document. The header should contain everything until the first @@ -1696,7 +1696,7 @@ EXTRA_PACKAGES = # to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HEADER = +LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last @@ -1707,7 +1707,7 @@ LATEX_HEADER = # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_FOOTER = +LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created @@ -1718,7 +1718,7 @@ LATEX_FOOTER = # list). # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_STYLESHEET = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output @@ -1726,7 +1726,7 @@ LATEX_EXTRA_STYLESHEET = # markers available. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_FILES = +LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will @@ -1826,14 +1826,14 @@ RTF_HYPERLINKS = NO # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_STYLESHEET_FILE = +RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is # similar to doxygen's config file. A template extensions file can be generated # using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_EXTENSIONS_FILE = +RTF_EXTENSIONS_FILE = # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code # with syntax highlighting in the RTF output. @@ -1878,7 +1878,7 @@ MAN_EXTENSION = .3 # MAN_EXTENSION with the initial . removed. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_SUBDIR = +MAN_SUBDIR = # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real @@ -1991,7 +1991,7 @@ PERLMOD_PRETTY = YES # overwrite each other's variables. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_MAKEVAR_PREFIX = +PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor @@ -2032,7 +2032,7 @@ SEARCH_INCLUDES = YES # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -2040,7 +2040,7 @@ INCLUDE_PATH = # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -INCLUDE_FILE_PATTERNS = +INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. @@ -2050,7 +2050,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2059,7 +2059,7 @@ PREDEFINED = # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = +EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have @@ -2088,13 +2088,13 @@ SKIP_FUNCTION_MACROS = YES # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = +GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be @@ -2143,14 +2143,14 @@ CLASS_DIAGRAMS = YES # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = +MSCGEN_PATH = # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. # If left empty dia is assumed to be found in the default search path. -DIA_PATH = +DIA_PATH = # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. @@ -2199,7 +2199,7 @@ DOT_FONTSIZE = 10 # the path where dot can find it using this tag. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTPATH = +DOT_FONTPATH = # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for # each documented class showing the direct and indirect inheritance relations. @@ -2337,26 +2337,26 @@ INTERACTIVE_SVG = NO # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = +DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile # command). # This tag requires that the tag HAVE_DOT is set to YES. -DOTFILE_DIRS = +DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the \mscfile # command). -MSCFILE_DIRS = +MSCFILE_DIRS = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile # command). -DIAFILE_DIRS = +DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the # path where java can find the plantuml.jar file. If left blank, it is assumed @@ -2364,12 +2364,12 @@ DIAFILE_DIRS = # generate a warning when it encounters a \startuml command in this case and # will not generate output for the diagram. -PLANTUML_JAR_PATH = +PLANTUML_JAR_PATH = # When using plantuml, the specified paths are searched for files specified by # the !include statement in a plantuml block. -PLANTUML_INCLUDE_PATH = +PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes diff --git a/doc/classes/@GDScript.xml b/doc/classes/@GDScript.xml index 493f55e89b..349daae6d9 100644 --- a/doc/classes/@GDScript.xml +++ b/doc/classes/@GDScript.xml @@ -745,6 +745,30 @@ [/codeblock] </description> </method> + <method name="push_error"> + <return type="void"> + </return> + <argument index="0" name="message" type="String"> + </argument> + <description> + Pushes an error message to Godot's built-in debugger and to the OS terminal. + [codeblock] + push_error("test error") # prints "test error" to debugger and terminal as error call + [/codeblock] + </description> + </method> + <method name="push_warning"> + <return type="void"> + </return> + <argument index="0" name="message" type="String"> + </argument> + <description> + Pushes a warning message to Godot's built-in debugger and to the OS terminal. + [codeblock] + push_warning("test warning") # prints "test warning" to debugger and terminal as warning call + [/codeblock] + </description> + </method> <method name="rad2deg"> <return type="float"> </return> diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 65d339c0d5..ba2eb35f8c 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -29,8 +29,6 @@ <member name="Geometry" type="Geometry" setter="" getter=""> [Geometry] singleton </member> - <member name="GodotSharp" type="GodotSharp" setter="" getter=""> - </member> <member name="IP" type="IP" setter="" getter=""> [IP] singleton </member> @@ -1298,10 +1296,6 @@ </constant> <constant name="PROPERTY_USAGE_CATEGORY" value="256" enum="PropertyUsageFlags"> </constant> - <constant name="PROPERTY_USAGE_STORE_IF_NONZERO" value="512" enum="PropertyUsageFlags"> - </constant> - <constant name="PROPERTY_USAGE_STORE_IF_NONONE" value="1024" enum="PropertyUsageFlags"> - </constant> <constant name="PROPERTY_USAGE_NO_INSTANCE_STATE" value="2048" enum="PropertyUsageFlags"> </constant> <constant name="PROPERTY_USAGE_RESTART_IF_CHANGED" value="4096" enum="PropertyUsageFlags"> diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml index b9061e0b87..2e0d0c15b2 100644 --- a/doc/classes/AABB.xml +++ b/doc/classes/AABB.xml @@ -7,7 +7,7 @@ AABB consists of a position, a size, and several utility functions. It is typically used for fast overlap tests. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/math/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/ARVRInterface.xml b/doc/classes/ARVRInterface.xml index 413370ed0b..bf72902410 100644 --- a/doc/classes/ARVRInterface.xml +++ b/doc/classes/ARVRInterface.xml @@ -45,8 +45,8 @@ </return> <description> Call this to initialize this interface. The first interface that is initialized is identified as the primary interface and it will be used for rendering output. - After initializing the interface you want to use you then need to enable the AR/VR mode of a viewport and rendering should commence. - Note that you must enable the AR/VR mode on the main viewport for any device that uses the main output of Godot such as for mobile VR. + After initializing the interface you want to use you then need to enable the AR/VR mode of a viewport and rendering should commence. + Note that you must enable the AR/VR mode on the main viewport for any device that uses the main output of Godot such as for mobile VR. If you do this for a platform that handles its own output (such as OpenVR) Godot will show just one eye without distortion on screen. Alternatively you can add a separate viewport node to your scene and enable AR/VR on that viewport and it will be used to output to the HMD leaving you free to do anything you like in the main window such as using a separate camera as a spectator camera or render out something completely different. While currently not used you can activate additional interfaces, you may 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. </description> diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml index 74c6796b06..169fbcd5a8 100644 --- a/doc/classes/Animation.xml +++ b/doc/classes/Animation.xml @@ -5,10 +5,19 @@ </brief_description> <description> An Animation resource contains data used to animate everything in the engine. Animations are divided into tracks, and each track must be linked to a node. The state of that node can be changed through time, by adding timed keys (events) to the track. - Animations are just data containers, and must be added to odes such as an [AnimationPlayer] or [AnimationTreePlayer] to be played back. + [codeblock] + # This creates an animation that makes the node "Enemy" move to the right by + # 100 pixels in 1 second. + var animation = Animation.new() + var track_index = animation.add_track(Animation.TYPE_VALUE) + animation.track_set_path(track_index, "Enemy:position.x") + animation.track_insert_key(track_index, 0.0, 0) + animation.track_insert_key(track_index, 0.5, 100) + [/codeblock] + Animations are just data containers, and must be added to nodes such as an [AnimationPlayer] or [AnimationTreePlayer] to be played back. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/animation/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml index d9bad150df..0f16c5e4a9 100644 --- a/doc/classes/AnimationNode.xml +++ b/doc/classes/AnimationNode.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AnimationNode" inherits="Resource" category="Core" version="3.1"> <brief_description> + Base resource for [AnimationTree] nodes. </brief_description> <description> + Base resource for [AnimationTree] nodes. In general it's not used directly but you can create custom ones with custom blending formulas. + Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], otherwise [AnimationRootNode] should be used instead. </description> <tutorials> </tutorials> @@ -15,6 +18,7 @@ <argument index="0" name="name" type="String"> </argument> <description> + Add an input to the node. This is only useful for nodes created for use in an [AnimationNodeBlendTree] </description> </method> <method name="blend_animation"> @@ -31,6 +35,7 @@ <argument index="4" name="blend" type="float"> </argument> <description> + Blend an animation by "blend" amount (name must be valid in the linked [AnimationPlayer]). A time and delta mas be passed, as well as whether seek happened. </description> </method> <method name="blend_input"> @@ -49,6 +54,7 @@ <argument index="5" name="optimize" type="bool" default="true"> </argument> <description> + Blend an input. This is only useful for nodes created for an AnimationBlendTree. Time is a delta, unless "seek" is true, in which case it is absolute. A filter mode may be optionally passed. </description> </method> <method name="blend_node"> @@ -69,18 +75,37 @@ <argument index="6" name="optimize" type="bool" default="true"> </argument> <description> + Blend another animaiton node (in case this node contains children animation nodes). This function is only useful if you inherit from [AnimationRootNode] instead, else editors will not display your node for addition. </description> </method> <method name="get_caption" qualifiers="virtual"> <return type="String"> </return> <description> + Get the text caption for this node (used by some editors) + </description> + </method> + <method name="get_child_by_name" qualifiers="virtual"> + <return type="Object"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + Get the a child node by index (used by editors inheriting from [AnimationRootNode]). + </description> + </method> + <method name="get_child_nodes" qualifiers="virtual"> + <return type="Dictionary"> + </return> + <description> + Get all children nodes, in order as a name:node dictionary. Only useful when inheriting [AnimationRootNode]. </description> </method> <method name="get_input_count" qualifiers="const"> <return type="int"> </return> <description> + Amount of inputs in this node, only useful for nodes that go into [AnimationBlendTree]. </description> </method> <method name="get_input_name"> @@ -89,6 +114,7 @@ <argument index="0" name="input" type="int"> </argument> <description> + Get the name of an input by index. </description> </method> <method name="get_parameter" qualifiers="const"> @@ -97,12 +123,31 @@ <argument index="0" name="name" type="String"> </argument> <description> + Get the value of a parameter. Parameters are custom local memory used for your nodes, given a resource can be reused in multiple trees. + </description> + </method> + <method name="get_parameter_default_value" qualifiers="virtual"> + <return type="Variant"> + </return> + <argument index="0" name="name" type="String"> + </argument> + <description> + Get the default value of a parameter. Parameters are custom local memory used for your nodes, given a resource can be reused in multiple trees. + </description> + </method> + <method name="get_parameter_list" qualifiers="virtual"> + <return type="Array"> + </return> + <description> + Get the property information for parameter. Parameters are custom local memory used for your nodes, given a resource can be reused in multiple trees. + Format is similar to [Object.get_property_list] </description> </method> <method name="has_filter" qualifiers="virtual"> <return type="String"> </return> <description> + Return true whether you want the blend tree editor to display filter editing on this node. </description> </method> <method name="is_path_filtered" qualifiers="const"> @@ -111,6 +156,7 @@ <argument index="0" name="path" type="NodePath"> </argument> <description> + Return true wether a given path is filtered. </description> </method> <method name="process" qualifiers="virtual"> @@ -121,6 +167,10 @@ <argument index="1" name="seek" type="bool"> </argument> <description> + Called when a custom node is processed. The argument "time" is relative, unless "seek" is true (in which case it is absolute). + Here, call the [method blend_input], [method blend_node] or [method blend_animation] functions. + You can also use [method get_parameter] and [method set_parameter] to modify local memory. + This function returns the time left for the current animation to finish (if unsure, just pass the value from the main blend being called). </description> </method> <method name="remove_input"> @@ -129,6 +179,7 @@ <argument index="0" name="index" type="int"> </argument> <description> + Remove an input, call this only when inactive. </description> </method> <method name="set_filter_path"> @@ -139,6 +190,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> + Add/Remove a path for the filter. </description> </method> <method name="set_parameter"> @@ -149,16 +201,19 @@ <argument index="1" name="value" type="Variant"> </argument> <description> + Set a custom parameter. These are used as local storage, because resources can be reused across the tree or scenes. </description> </method> </methods> <members> <member name="filter_enabled" type="bool" setter="set_filter_enabled" getter="is_filter_enabled"> + Return whether filtering is enabled. </member> </members> <signals> <signal name="removed_from_graph"> <description> + Called when the node was removed from the graph. </description> </signal> <signal name="tree_changed"> @@ -168,12 +223,16 @@ </signals> <constants> <constant name="FILTER_IGNORE" value="0" enum="FilterAction"> + Do not use filtering. </constant> <constant name="FILTER_PASS" value="1" enum="FilterAction"> + Paths matching the filter will be allowed to pass. </constant> <constant name="FILTER_STOP" value="2" enum="FilterAction"> + Paths matching the filter will be discarded. </constant> <constant name="FILTER_BLEND" value="3" enum="FilterAction"> + Paths matching the filter will be blended (by the blend value). </constant> </constants> </class> diff --git a/doc/classes/AnimationNodeAnimation.xml b/doc/classes/AnimationNodeAnimation.xml index 22f5e0838e..de8e918f68 100644 --- a/doc/classes/AnimationNodeAnimation.xml +++ b/doc/classes/AnimationNodeAnimation.xml @@ -9,12 +9,6 @@ <demos> </demos> <methods> - <method name="get_playback_time" qualifiers="const"> - <return type="float"> - </return> - <description> - </description> - </method> </methods> <members> <member name="animation" type="String" setter="set_animation" getter="get_animation"> diff --git a/doc/classes/AnimationNodeBlendSpace2D.xml b/doc/classes/AnimationNodeBlendSpace2D.xml index 39d780b6ef..55e27fc331 100644 --- a/doc/classes/AnimationNodeBlendSpace2D.xml +++ b/doc/classes/AnimationNodeBlendSpace2D.xml @@ -113,6 +113,8 @@ <members> <member name="auto_triangles" type="bool" setter="set_auto_triangles" getter="get_auto_triangles"> </member> + <member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="AnimationNodeBlendSpace2D.BlendMode"> + </member> <member name="max_space" type="Vector2" setter="set_max_space" getter="get_max_space"> </member> <member name="min_space" type="Vector2" setter="set_min_space" getter="get_min_space"> @@ -125,5 +127,11 @@ </member> </members> <constants> + <constant name="BLEND_MODE_INTERPOLATED" value="0" enum="BlendMode"> + </constant> + <constant name="BLEND_MODE_DISCRETE" value="1" enum="BlendMode"> + </constant> + <constant name="BLEND_MODE_DISCRETE_CARRY" value="2" enum="BlendMode"> + </constant> </constants> </class> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index 6dc91a234a..499da4b8a3 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -7,8 +7,8 @@ An animation player is used for general purpose playback of [Animation] resources. It contains a dictionary of animations (referenced by name) and custom blend times between their transitions. Additionally, animations can be played and blended in different channels. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/step_by_step/animations.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/animation/index.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/animations.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link> </tutorials> <demos> </demos> @@ -110,6 +110,12 @@ Get the actual playing speed of current animation or 0 if not playing. This speed is the [code]playback_speed[/code] property multiplied by [code]custom_speed[/code] argument specified when calling the [code]play[/code] method. </description> </method> + <method name="get_queue"> + <return type="PoolStringArray"> + </return> + <description> + </description> + </method> <method name="has_animation" qualifiers="const"> <return type="bool"> </return> @@ -238,7 +244,7 @@ The default time in which to blend animations. Ranges from 0 to 4096 with 0.01 precision. Default value: [code]0[/code]. </member> <member name="playback_process_mode" type="int" setter="set_animation_process_mode" getter="get_animation_process_mode" enum="AnimationPlayer.AnimationProcessMode"> - The process notification in which to update animations. Default value: [enum ANIMATION_PROCESS_IDLE]. + The process notification in which to update animations. Default value: [code]ANIMATION_PROCESS_IDLE[/code]. </member> <member name="playback_speed" type="float" setter="set_speed_scale" getter="get_speed_scale"> The speed scaling ratio. For instance, if this value is 1 then the animation plays at normal speed. If it's 0.5 then it plays at half speed. If it's 2 then it plays at double speed. Default value: [code]1[/code]. diff --git a/doc/classes/AnimationTreePlayer.xml b/doc/classes/AnimationTreePlayer.xml index 8c32d5f6a3..a081c64f6d 100644 --- a/doc/classes/AnimationTreePlayer.xml +++ b/doc/classes/AnimationTreePlayer.xml @@ -618,7 +618,7 @@ Once set, Animation nodes can be added to the AnimationTreePlayer. </member> <member name="playback_process_mode" type="int" setter="set_animation_process_mode" getter="get_animation_process_mode" enum="AnimationTreePlayer.AnimationProcessMode"> - The thread in which to update animations. Default value: [enum ANIMATION_PROCESS_IDLE]. + The thread in which to update animations. Default value: [code]ANIMATION_PROCESS_IDLE[/code]. </member> </members> <constants> diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml index ed3d2d2205..7806cf4ce4 100644 --- a/doc/classes/ArrayMesh.xml +++ b/doc/classes/ArrayMesh.xml @@ -47,7 +47,7 @@ </argument> <description> Creates a new surface. - Surfaces are created to be rendered using a "primitive", which may be PRIMITIVE_POINTS, PRIMITIVE_LINES, PRIMITIVE_LINE_STRIP, PRIMITIVE_LINE_LOOP, PRIMITIVE_TRIANGLES, PRIMITIVE_TRIANGLE_STRIP, PRIMITIVE_TRIANGLE_FAN. See [Mesh] for details. (As a note, when using indices, it is recommended to only use points, lines or triangles). [method get_surface_count] will become the surf_idx for this new surface. + Surfaces are created to be rendered using a "primitive", which may be PRIMITIVE_POINTS, PRIMITIVE_LINES, PRIMITIVE_LINE_STRIP, PRIMITIVE_LINE_LOOP, PRIMITIVE_TRIANGLES, PRIMITIVE_TRIANGLE_STRIP, PRIMITIVE_TRIANGLE_FAN. See [Mesh] for details. (As a note, when using indices, it is recommended to only use points, lines or triangles). [method Mesh.get_surface_count] will become the [code]surf_idx[/code] for this new surface. The [code]arrays[/code] argument is an array of arrays. See [enum ArrayType] for the values used in this array. For example, [code]arrays[0][/code] is the array of vertices. That first vertex sub-array is always required; the others are optional. Adding an index array puts this function into "index mode" where the vertex and other arrays become the sources of data and the index array defines the vertex order. All sub-arrays must have the same length as the vertex array or be empty, except for [code]ARRAY_INDEX[/code] if it is used. Adding an index array puts this function into "index mode" where the vertex and other arrays become the sources of data, and the index array defines the order of the vertices. Godot uses clockwise winding order for front faces of triangle primitive modes. diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml index 9eba806ad5..c9ddbd5b9a 100644 --- a/doc/classes/AudioEffectBandLimitFilter.xml +++ b/doc/classes/AudioEffectBandLimitFilter.xml @@ -4,7 +4,7 @@ Adds a band limit filter to the Audio Bus. </brief_description> <description> - Limits the frequencies in a range around the [member cutoff_hz] and allows frequencies outside of this range to pass. + Limits the frequencies in a range around the [member AudioEffectFilter.cutoff_hz] and allows frequencies outside of this range to pass. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml index 11aab3e86d..7f4c9f4632 100644 --- a/doc/classes/AudioEffectBandPassFilter.xml +++ b/doc/classes/AudioEffectBandPassFilter.xml @@ -4,7 +4,7 @@ Adds a band pass filter to the Audio Bus. </brief_description> <description> - Attenuates the frequencies inside of a range around the [member cutoff_hz] and cuts frequencies outside of this band. + Attenuates the frequencies inside of a range around the [member AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml index 3d487fc783..6c97199cb9 100644 --- a/doc/classes/AudioEffectHighPassFilter.xml +++ b/doc/classes/AudioEffectHighPassFilter.xml @@ -4,7 +4,7 @@ Adds a high pass filter to the Audio Bus. </brief_description> <description> - Cuts frequencies lower than the [member cutoff_hz] and allows higher frequencies to pass. + Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and allows higher frequencies to pass. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml index 3facd8b665..7048a56e6c 100644 --- a/doc/classes/AudioEffectLowPassFilter.xml +++ b/doc/classes/AudioEffectLowPassFilter.xml @@ -4,7 +4,7 @@ Adds a low pass filter to the Audio Bus. </brief_description> <description> - Cuts frequencies higher than the [member cutoff_hz] and allows lower frequencies to pass. + Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and allows lower frequencies to pass. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml index 741931f262..0378934890 100644 --- a/doc/classes/AudioEffectNotchFilter.xml +++ b/doc/classes/AudioEffectNotchFilter.xml @@ -4,7 +4,7 @@ Adds a notch filter to the Audio Bus. </brief_description> <description> - Attenuates frequencies in a narrow band around the [member cutoff_hz] and cuts frequencies outside of this range. + Attenuates frequencies in a narrow band around the [member AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this range. </description> <tutorials> </tutorials> diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml index fb2009105d..008c644466 100644 --- a/doc/classes/AudioEffectReverb.xml +++ b/doc/classes/AudioEffectReverb.xml @@ -15,7 +15,7 @@ </methods> <members> <member name="damping" type="float" setter="set_damping" getter="get_damping"> - Widens or narrows the stereo image of the reverb tail. 1 means fully widens. Value can range from 0 to 1. Default value: [code]1[/code]. + Defines how reflective the imaginary room's walls are. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="dry" type="float" setter="set_dry" getter="get_dry"> Output percent of original sound. At 0, only modified sound is outputted. Value can range from 0 to 1. Default value: [code]1[/code]. @@ -33,7 +33,7 @@ Dimensions of simulated room. Bigger means more echoes. Value can range from 0 to 1. Default value: [code]0.8[/code]. </member> <member name="spread" type="float" setter="set_spread" getter="get_spread"> - Defines how reflective the imaginary room's walls are. Value can range from 0 to 1. Default value: [code]1[/code]. + Widens or narrows the stereo image of the reverb tail. 1 means fully widens. Value can range from 0 to 1. Default value: [code]1[/code]. </member> <member name="wet" type="float" setter="set_wet" getter="get_wet"> Output percent of modified sound. At 0, only original sound is outputted. Value can range from 0 to 1. Default value: [code]0.5[/code]. diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml index 37756bcfd8..3ae5454e65 100644 --- a/doc/classes/AudioServer.xml +++ b/doc/classes/AudioServer.xml @@ -7,7 +7,7 @@ AudioServer is a low level server interface for audio access. It is in charge of creating sample data (playable audio) as well as its playback via a voice interface. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/audio/audio_buses.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> </tutorials> <demos> </demos> @@ -385,6 +385,8 @@ <constant name="SPEAKER_MODE_STEREO" value="0" enum="SpeakerMode"> Two or fewer speakers are detected. </constant> + <constant name="SPEAKER_SURROUND_31" value="1" enum="SpeakerMode"> + </constant> <constant name="SPEAKER_SURROUND_51" value="2" enum="SpeakerMode"> A 5.1 channel surround setup detected. </constant> diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml index 753a506058..96ce53b14f 100644 --- a/doc/classes/AudioStream.xml +++ b/doc/classes/AudioStream.xml @@ -7,7 +7,7 @@ Base class for audio streams. Audio streams are used for music playback, or other types of streamed sounds that don't fit or require more flexibility than a [Sample]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/audio/audio_streams.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml index 26d0b1a83d..be4e4f137a 100644 --- a/doc/classes/AudioStreamPlayer.xml +++ b/doc/classes/AudioStreamPlayer.xml @@ -7,8 +7,8 @@ Plays background audio. </description> <tutorials> - <link>http://docs.godotengine.org/en/latest/learning/features/audio/index.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/audio/audio_streams.html</link> + <link>https://docs.godotengine.org/en/latest/learning/features/audio/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index 5cc87e0e7a..3b81894c14 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -7,8 +7,8 @@ Plays audio that dampens with distance from screen center. </description> <tutorials> - <link>http://docs.godotengine.org/en/latest/learning/features/audio/index.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/audio/audio_streams.html</link> + <link>https://docs.godotengine.org/en/latest/learning/features/audio/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml index e61515ffc0..5841f1f6dc 100644 --- a/doc/classes/AudioStreamPlayer3D.xml +++ b/doc/classes/AudioStreamPlayer3D.xml @@ -7,8 +7,8 @@ Plays a sound effect with directed sound effects, dampens with distance if needed, generates effect of hearable position in space. </description> <tutorials> - <link>http://docs.godotengine.org/en/latest/learning/features/audio/index.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/audio/audio_streams.html</link> + <link>https://docs.godotengine.org/en/latest/learning/features/audio/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/BakedLightmap.xml b/doc/classes/BakedLightmap.xml index 966b6dd7c4..8e27dc8d5d 100644 --- a/doc/classes/BakedLightmap.xml +++ b/doc/classes/BakedLightmap.xml @@ -7,7 +7,7 @@ Baked lightmaps are an alternative workflow for adding indirect (or baked) lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work fine on low-end PCs and mobile devices as they consume almost no resources in run-time. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/baked_lightmaps.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/baked_lightmaps.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/BaseButton.xml b/doc/classes/BaseButton.xml index 3ff8634010..9c0459511c 100644 --- a/doc/classes/BaseButton.xml +++ b/doc/classes/BaseButton.xml @@ -65,6 +65,9 @@ <member name="shortcut" type="ShortCut" setter="set_shortcut" getter="get_shortcut"> [Shortcut] associated to the button. </member> + <member name="shortcut_in_tooltip" type="bool" setter="set_shortcut_in_tooltip" getter="is_shortcut_in_tooltip_enabled"> + If [code]true[/code] the button will add information about its shortcut in the tooltip. + </member> <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode"> If [code]true[/code] the button is in toggle mode. Makes the button flip state between pressed and unpressed each time its area is clicked. </member> @@ -106,6 +109,8 @@ <constant name="DRAW_DISABLED" value="3" enum="DrawMode"> The state of buttons are disabled. </constant> + <constant name="DRAW_HOVER_PRESSED" value="4" enum="DrawMode"> + </constant> <constant name="ACTION_MODE_BUTTON_PRESS" value="0" enum="ActionMode"> Require just a press to consider the button clicked. </constant> diff --git a/doc/classes/Basis.xml b/doc/classes/Basis.xml index fe8debe1a9..95f6346321 100644 --- a/doc/classes/Basis.xml +++ b/doc/classes/Basis.xml @@ -8,8 +8,8 @@ For such use, it is composed of a scaling and a rotation matrix, in that order (M = R.S). </description> <tutorials> - <link>http://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link> - <link>http://docs.godotengine.org/en/latest/tutorials/math/rotations.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/rotations.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/CPUParticles.xml b/doc/classes/CPUParticles.xml index 9d3dc5d70a..2073ca0664 100644 --- a/doc/classes/CPUParticles.xml +++ b/doc/classes/CPUParticles.xml @@ -39,8 +39,6 @@ </member> <member name="angular_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> </member> - <member name="anim_loop" type="bool" setter="set_particle_flag" getter="get_particle_flag"> - </member> <member name="anim_offset" type="float" setter="set_param" getter="get_param"> </member> <member name="anim_offset_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> @@ -129,11 +127,11 @@ </member> <member name="randomness" type="float" setter="set_randomness_ratio" getter="get_randomness_ratio"> </member> - <member name="scale" type="float" setter="set_param" getter="get_param"> + <member name="scale_amount" type="float" setter="set_param" getter="get_param"> </member> - <member name="scale_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> + <member name="scale_amount_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> </member> - <member name="scale_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + <member name="scale_amount_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale"> </member> @@ -181,7 +179,7 @@ </constant> <constant name="FLAG_ROTATE_Y" value="1" enum="Flags"> </constant> - <constant name="FLAG_MAX" value="4" enum="Flags"> + <constant name="FLAG_MAX" value="3" enum="Flags"> </constant> <constant name="EMISSION_SHAPE_POINT" value="0" enum="EmissionShape"> </constant> diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml index 6d115e2650..12a176589c 100644 --- a/doc/classes/CPUParticles2D.xml +++ b/doc/classes/CPUParticles2D.xml @@ -39,8 +39,6 @@ </member> <member name="angular_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> </member> - <member name="anim_loop" type="bool" setter="set_particle_flag" getter="get_particle_flag"> - </member> <member name="anim_offset" type="float" setter="set_param" getter="get_param"> </member> <member name="anim_offset_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> @@ -125,11 +123,11 @@ </member> <member name="randomness" type="float" setter="set_randomness_ratio" getter="get_randomness_ratio"> </member> - <member name="scale" type="float" setter="set_param" getter="get_param"> + <member name="scale_amount" type="float" setter="set_param" getter="get_param"> </member> - <member name="scale_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> + <member name="scale_amount_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> </member> - <member name="scale_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + <member name="scale_amount_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale"> </member> @@ -177,7 +175,7 @@ </constant> <constant name="FLAG_ALIGN_Y_TO_VELOCITY" value="0" enum="Flags"> </constant> - <constant name="FLAG_MAX" value="2" enum="Flags"> + <constant name="FLAG_MAX" value="1" enum="Flags"> </constant> <constant name="EMISSION_SHAPE_POINT" value="0" enum="EmissionShape"> </constant> diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 60f097f3f9..63f82fe2bd 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -11,8 +11,8 @@ Ultimately, a transform notification can be requested, which will notify the node that its global position changed in case the parent tree changed. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/2d_transforms.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/custom_drawing_in_2d.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link> </tutorials> <demos> </demos> @@ -135,7 +135,7 @@ <method name="draw_multimesh"> <return type="void"> </return> - <argument index="0" name="mesh" type="Mesh"> + <argument index="0" name="mesh" type="MultiMesh"> </argument> <argument index="1" name="texture" type="Texture"> </argument> diff --git a/doc/classes/CanvasItemMaterial.xml b/doc/classes/CanvasItemMaterial.xml index fe7194dcfe..69d873f446 100644 --- a/doc/classes/CanvasItemMaterial.xml +++ b/doc/classes/CanvasItemMaterial.xml @@ -19,6 +19,14 @@ <member name="light_mode" type="int" setter="set_light_mode" getter="get_light_mode" enum="CanvasItemMaterial.LightMode"> The manner in which material reacts to lighting. </member> + <member name="particles_anim_h_frames" type="int" setter="set_particles_anim_h_frames" getter="get_particles_anim_h_frames"> + </member> + <member name="particles_anim_loop" type="bool" setter="set_particles_anim_loop" getter="get_particles_anim_loop"> + </member> + <member name="particles_anim_v_frames" type="int" setter="set_particles_anim_v_frames" getter="get_particles_anim_v_frames"> + </member> + <member name="particles_animation" type="bool" setter="set_particles_animation" getter="get_particles_animation"> + </member> </members> <constants> <constant name="BLEND_MODE_MIX" value="0" enum="BlendMode"> diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml index d4412e15c9..c39b47ab07 100644 --- a/doc/classes/CanvasLayer.xml +++ b/doc/classes/CanvasLayer.xml @@ -7,8 +7,8 @@ Canvas drawing layer. [CanvasItem] nodes that are direct or indirect children of a [code]CanvasLayer[/code] will be drawn in that layer. The layer is a numeric index that defines the draw order. The default 2D scene renders with index 0, so a [code]CanvasLayer[/code] with index -1 will be drawn below, and one with index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or above), or backgrounds (in layer -1 or below). </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/2d_transforms.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/canvas_layers.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml index fb2cf64d98..a2a7cf85e8 100644 --- a/doc/classes/CheckBox.xml +++ b/doc/classes/CheckBox.xml @@ -31,10 +31,14 @@ </theme_item> <theme_item name="font_color_hover" type="Color"> </theme_item> + <theme_item name="font_color_hover_pressed" type="Color"> + </theme_item> <theme_item name="font_color_pressed" type="Color"> </theme_item> <theme_item name="hover" type="StyleBox"> </theme_item> + <theme_item name="hover_pressed" type="StyleBox"> + </theme_item> <theme_item name="hseparation" type="int"> </theme_item> <theme_item name="normal" type="StyleBox"> diff --git a/doc/classes/CheckButton.xml b/doc/classes/CheckButton.xml index deba9a17b6..24875017fe 100644 --- a/doc/classes/CheckButton.xml +++ b/doc/classes/CheckButton.xml @@ -29,10 +29,14 @@ </theme_item> <theme_item name="font_color_hover" type="Color"> </theme_item> + <theme_item name="font_color_hover_pressed" type="Color"> + </theme_item> <theme_item name="font_color_pressed" type="Color"> </theme_item> <theme_item name="hover" type="StyleBox"> </theme_item> + <theme_item name="hover_pressed" type="StyleBox"> + </theme_item> <theme_item name="hseparation" type="int"> </theme_item> <theme_item name="normal" type="StyleBox"> diff --git a/doc/classes/CollisionShape.xml b/doc/classes/CollisionShape.xml index 682c9340df..740a6b7ab1 100644 --- a/doc/classes/CollisionShape.xml +++ b/doc/classes/CollisionShape.xml @@ -4,10 +4,10 @@ Node that represents collision shape data in 3D space. </brief_description> <description> - Editor facility for creating and editing collision shapes in 3D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area] to give it a detection shape, or add it to a [PhysicsBody] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method get_shape] to get the actual shape. + Editor facility for creating and editing collision shapes in 3D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area] to give it a detection shape, or add it to a [PhysicsBody] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject.shape_owner_get_shape] to get the actual shape. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml index 3312fad99c..d3c616ee3d 100644 --- a/doc/classes/CollisionShape2D.xml +++ b/doc/classes/CollisionShape2D.xml @@ -4,10 +4,10 @@ Node that represents collision shape data in 2D space. </brief_description> <description> - Editor facility for creating and editing collision shapes in 2D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area2D] to give it a detection shape, or add it to a [PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method get_shape] to get the actual shape. + Editor facility for creating and editing collision shapes in 2D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area2D] to give it a detection shape, or add it to a [PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject2D.shape_owner_get_shape] to get the actual shape. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml index 2e3cc2e5d1..82a10fbaa4 100644 --- a/doc/classes/Color.xml +++ b/doc/classes/Color.xml @@ -4,8 +4,8 @@ Color in RGBA format with some support for ARGB format. </brief_description> <description> - A color is represented as red, green and blue (r,g,b) components. Additionally, "a" represents the alpha component, often used for transparency. Values are in floating point and usually range from 0 to 1. Some methods (such as set_modulate(color)) may accept values > 1. - You can also create a color from standardised color names with Color.ColorN (e.g. Color.green) or [method @GDScript.ColorN]. + A color is represented by red, green, and blue [code](r, g, b)[/code] components. Additionally, [code]a[/code] represents the alpha component, often used for transparency. Values are in floating point and usually range from 0 to 1. Some properties (such as [member CanvasItem.modulate]) may accept values > 1. + You can also create a color from standardized color names by using [method @GDScript.ColorN]. </description> <tutorials> </tutorials> @@ -25,7 +25,7 @@ [code]"#ff00ff"[/code] - RGB format with '#' [code]"ff00ff"[/code] - RGB format [codeblock] - # The following code creates the same color of an RGBA(178, 217, 10, 255) + # Each of the following creates the same color RGBA(178, 217, 10, 255) var c1 = Color("#ffb2d90a") # ARGB format with '#' var c2 = Color("ffb2d90a") # ARGB format var c3 = Color("#b2d90a") # RGB format with '#' @@ -41,7 +41,7 @@ <description> Constructs a color from a 32-bit integer (each byte represents a component of the RGBA profile). [codeblock] - var c = Color(274) # a color of an RGBA(0, 0, 1, 18) + var c = Color(274) # Equivalent to RGBA(0, 0, 1, 18) [/codeblock] </description> </method> @@ -55,9 +55,9 @@ <argument index="2" name="b" type="float"> </argument> <description> - Constructs a color from an RGB profile using values between 0 and 1 (float). Alpha will always be 1. + Constructs a color from an RGB profile using values between 0 and 1. Alpha will always be 1. [codeblock] - var c = Color(0.2, 1.0, .7) # a color of an RGBA(51, 255, 178, 255) + var c = Color(0.2, 1.0, .7) # Equivalent to RGBA(51, 255, 178, 255) [/codeblock] </description> </method> @@ -73,9 +73,9 @@ <argument index="3" name="a" type="float"> </argument> <description> - Constructs a color from an RGBA profile using values between 0 and 1 (float). + Constructs a color from an RGBA profile using values between 0 and 1. [codeblock] - var c = Color(0.2, 1.0, .7, .8) # a color of an RGBA(51, 255, 178, 204) + var c = Color(0.2, 1.0, .7, .8) # Equivalent to RGBA(51, 255, 178, 204) [/codeblock] </description> </method> @@ -85,7 +85,7 @@ <argument index="0" name="over" type="Color"> </argument> <description> - Returns a new color resulting from blending this color over another color. If the color is opaque, the result would also be opaque. The other color could then take a range of values with different alpha values. + Returns a new color resulting from blending this color over another. If the color is opaque, the result is also opaque. The second color may have a range of alpha values. [codeblock] var bg = Color(0.0, 1.0, 0.0, 0.5) # Green with alpha of 50% var fg = Color(1.0, 0.0, 0.0, .5) # Red with alpha of 50% @@ -100,7 +100,7 @@ Returns the most contrasting color. [codeblock] var c = Color(.3, .4, .9) - var contrastedColor = c.contrasted() # a color of an RGBA(204, 229, 102, 255) + var contrastedColor = c.contrasted() # Equivalent to RGBA(204, 229, 102, 255) [/codeblock] </description> </method> @@ -131,7 +131,7 @@ <description> Constructs a color from an HSV profile. [code]h[/code], [code]s[/code], and [code]v[/code] are values between 0 and 1. [codeblock] - 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) + 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) [/codeblock] </description> </method> @@ -139,8 +139,8 @@ <return type="float"> </return> <description> - Returns the color's grayscale. - The gray is calculated by (r + g + b) / 3. + Returns the color's grayscale representation. + The gray is calculated by [code](r + g + b) / 3[/code]. [codeblock] var c = Color(0.2, 0.45, 0.82) var gray = c.gray() # a value of 0.466667 @@ -151,7 +151,7 @@ <return type="Color"> </return> <description> - Returns the inverted color (1-r, 1-g, 1-b, 1-a). + Returns the inverted color [code](1 - r, 1 - g, 1 - b, 1 - a)[/code]. [codeblock] var c = Color(.3, .4, .9) var invertedColor = c.inverted() # a color of an RGBA(178, 153, 26, 255) @@ -179,7 +179,7 @@ <argument index="1" name="t" type="float"> </argument> <description> - Returns the color of the linear interpolation with another color. The value t is between 0 and 1 (float). + Returns the linear interpolation with another color. The value t is between 0 and 1. [codeblock] var c1 = Color(1.0, 0.0, 0.0) var c2 = Color(0.0, 1.0, 0.0) @@ -238,7 +238,7 @@ </argument> <description> Returns the color's HTML hexadecimal color string in ARGB format (ex: [code]ff34f822[/code]). - Optionally flag 'false' to not include alpha in hexadecimal string. + Setting [code]with_alpha[/code] to [code]false[/code] excludes alpha from the hexadecimal string. [codeblock] var c = Color(1, 1, 1, .5) var s1 = c.to_html() # Results "7fffffff" @@ -250,7 +250,7 @@ <return type="int"> </return> <description> - Returns the color's 32-bit integer in RGBA format (each byte represents a component of the RGBA profile). RGBA is the format that Godot uses by default. + Returns the color's 32-bit integer in RGBA format (each byte represents a component of the RGBA profile). RGBA is Godot's default format. [codeblock] var c = Color(1, .5, .2) print(c.to_rgba32()) # Prints 4286526463 @@ -261,7 +261,7 @@ <return type="int"> </return> <description> - Returns the color's 64-bit integer in RGBA format (each word represents a component of the RGBA profile). RGBA is the format that Godot uses by default. + Returns the color's 64-bit integer in RGBA format (each word represents a component of the RGBA profile). RGBA is Godot's default format. [codeblock] var c = Color(1, .5, .2) print(c.to_rgba64()) # Prints -140736629309441 @@ -271,37 +271,37 @@ </methods> <members> <member name="a" type="float" setter="" getter=""> - Alpha (0 to 1) + Alpha value (range 0 to 1). </member> <member name="a8" type="int" setter="" getter=""> - Alpha (0 to 255) + Alpha value (range 0 to 255). </member> <member name="b" type="float" setter="" getter=""> - Blue (0 to 1) + Blue value (range 0 to 1). </member> <member name="b8" type="int" setter="" getter=""> - Blue (0 to 255) + Blue value (range 0 to 255). </member> <member name="g" type="float" setter="" getter=""> - Green (0 to 1) + Green value (range 0 to 1). </member> <member name="g8" type="int" setter="" getter=""> - Green (0 to 255) + Green value (range 0 to 255). </member> <member name="h" type="float" setter="" getter=""> - Hue (0 to 1) + HSV hue value (range 0 to 1). </member> <member name="r" type="float" setter="" getter=""> - Red (0 to 1) + Red value (range 0 to 1). </member> <member name="r8" type="int" setter="" getter=""> - Red (0 to 255) + Red value (range 0 to 255). </member> <member name="s" type="float" setter="" getter=""> - Saturation (0 to 1) + HSV saturation value (range 0 to 1). </member> <member name="v" type="float" setter="" getter=""> - Value (0 to 1) + HSV value (range 0 to 1). </member> </members> <constants> diff --git a/doc/classes/ColorPicker.xml b/doc/classes/ColorPicker.xml index 554e6b5632..2659fd8a39 100644 --- a/doc/classes/ColorPicker.xml +++ b/doc/classes/ColorPicker.xml @@ -20,6 +20,22 @@ Adds the given color to a list of color presets. The presets are displayed in the color picker and the user will be able to select them. Note: the presets list is only for [i]this[/i] color picker. </description> </method> + <method name="erase_preset"> + <return type="void"> + </return> + <argument index="0" name="color" type="Color"> + </argument> + <description> + Remove the given color from the list of color presets of this color picker. + </description> + </method> + <method name="get_presets"> + <return type="PoolColorArray"> + </return> + <description> + Return the list of colors in the presets of the color picker. + </description> + </method> </methods> <members> <member name="color" type="Color" setter="set_pick_color" getter="get_pick_color"> @@ -44,6 +60,24 @@ </description> </signal> </signals> + <signals> + <signal name="preset_added"> + <argument index="0" name="color" type="Color"> + </argument> + <description> + Emitted when a preset is added. + </description> + </signal> + </signals> + <signals> + <signal name="preset_removed"> + <argument index="0" name="color" type="Color"> + </argument> + <description> + Emitted when a preset is removed. + </description> + </signal> + </signals> <constants> </constants> <theme_items> diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml index a4709c1c86..703043294b 100644 --- a/doc/classes/ConfigFile.xml +++ b/doc/classes/ConfigFile.xml @@ -25,6 +25,7 @@ # Save the changes by overwriting the previous file config.save("user://settings.cfg") [/codeblock] + Keep in mind that section and property names can't contain spaces. Anything after a space will be ignored on save and on load. </description> <tutorials> </tutorials> diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml index 1a27aea23f..76a475e49d 100644 --- a/doc/classes/Control.xml +++ b/doc/classes/Control.xml @@ -13,8 +13,8 @@ [Theme] resources change the Control's appearance. If you change the [Theme] on a [code]Control[/code] node, it affects all of its children. To override some of the theme's parameters, call one of the [code]add_*_override[/code] methods, like [method add_font_override]. You can override the theme with the inspector. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/gui/index.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/custom_drawing_in_2d.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/gui/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link> </tutorials> <demos> </demos> @@ -76,7 +76,7 @@ <argument index="1" name="constant" type="int"> </argument> <description> - Overrides an integer constant in the [member theme] resource the node uses. If the [code]constant[/code] is invalid, Godot clears the override. See [member Theme.INVALID_CONSTANT] for more information. + Overrides an integer constant in the [member theme] resource the node uses. If the [code]constant[/code] is invalid, Godot clears the override. </description> </method> <method name="add_font_override"> diff --git a/doc/classes/ConvexPolygonShape2D.xml b/doc/classes/ConvexPolygonShape2D.xml index 6b31149c2f..8210e7dc9c 100644 --- a/doc/classes/ConvexPolygonShape2D.xml +++ b/doc/classes/ConvexPolygonShape2D.xml @@ -18,7 +18,7 @@ <argument index="0" name="point_cloud" type="PoolVector2Array"> </argument> <description> - Currently, this method does nothing. + Based on the set of points provided, this creates and assigns the [member points] property using the convex hull algorithm. Removing all unneeded points. See [method Geometry.convex_hull_2d] for details. </description> </method> </methods> diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml index 06c996e13e..a9e2a38dcf 100644 --- a/doc/classes/Dictionary.xml +++ b/doc/classes/Dictionary.xml @@ -41,6 +41,17 @@ Erase a dictionary key/value pair by key. </description> </method> + <method name="get"> + <return type="Variant"> + </return> + <argument index="0" name="key" type="Variant"> + </argument> + <argument index="1" name="default" type="Variant" default="Null"> + </argument> + <description> + Returns the current value for the specified key in the [code]Dictionary[/code]. If the key does not exist, the method returns the value of the optional default argument, or Null if it is omitted. + </description> + </method> <method name="has"> <return type="bool"> </return> diff --git a/doc/classes/DirectionalLight.xml b/doc/classes/DirectionalLight.xml index 2dc522083d..86c8f2f03a 100644 --- a/doc/classes/DirectionalLight.xml +++ b/doc/classes/DirectionalLight.xml @@ -7,7 +7,7 @@ A directional light is a type of [Light] node that models an infinite number of parallel rays covering the entire scene. It is used for lights with strong intensity that are located far away from the scene to model sunlight or moonlight. The worldspace location of the DirectionalLight transform (origin) is ignored. Only the basis is used do determine light direction. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/lights_and_shadows.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml index d8ad208fa7..57301f954f 100644 --- a/doc/classes/Directory.xml +++ b/doc/classes/Directory.xml @@ -23,7 +23,7 @@ [/codeblock] </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/step_by_step/filesystem.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/filesystem.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/DynamicFontData.xml b/doc/classes/DynamicFontData.xml index 7b34d02316..5fcccf7db9 100644 --- a/doc/classes/DynamicFontData.xml +++ b/doc/classes/DynamicFontData.xml @@ -13,6 +13,9 @@ <methods> </methods> <members> + <member name="antialiased" type="bool" setter="set_antialiased" getter="is_antialiased"> + Controls whether the font should be rendered with anti-aliasing. + </member> <member name="font_path" type="String" setter="set_font_path" getter="get_font_path"> The path to the vector font file. </member> diff --git a/doc/classes/EditorFileSystem.xml b/doc/classes/EditorFileSystem.xml index 5a8b506f9e..91e5bd81c3 100644 --- a/doc/classes/EditorFileSystem.xml +++ b/doc/classes/EditorFileSystem.xml @@ -93,6 +93,12 @@ Remitted if a resource is reimported. </description> </signal> + <signal name="resources_reload"> + <argument index="0" name="resources" type="PoolStringArray"> + </argument> + <description> + </description> + </signal> <signal name="sources_changed"> <argument index="0" name="exist" type="bool"> </argument> diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml index aaba30ccc9..24201c39b9 100644 --- a/doc/classes/EditorImportPlugin.xml +++ b/doc/classes/EditorImportPlugin.xml @@ -49,7 +49,7 @@ [/codeblock] </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/plugins/editor/import_plugins.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/EditorInspector.xml b/doc/classes/EditorInspector.xml index a2a39fc8b6..5601f9b5ae 100644 --- a/doc/classes/EditorInspector.xml +++ b/doc/classes/EditorInspector.xml @@ -41,6 +41,14 @@ <description> </description> </signal> + <signal name="property_toggled"> + <argument index="0" name="property" type="String"> + </argument> + <argument index="1" name="checked" type="bool"> + </argument> + <description> + </description> + </signal> <signal name="resource_selected"> <argument index="0" name="res" type="Object"> </argument> diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml index ac139f18c9..feaa24b0ab 100644 --- a/doc/classes/EditorPlugin.xml +++ b/doc/classes/EditorPlugin.xml @@ -7,7 +7,7 @@ Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. Also see [EditorScript] to add functions to the editor. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/development/plugins/index.html</link> + <link>https://docs.godotengine.org/en/latest/development/plugins/index.html</link> </tutorials> <demos> </demos> @@ -453,7 +453,7 @@ <argument index="0" name="screen_name" type="String"> </argument> <description> - Emitted when user change the workspace (2D, 3D, Script, AssetLib). Also works with custom screens defined by plugins. + Emitted when user changes the workspace (2D, 3D, Script, AssetLib). Also works with custom screens defined by plugins. </description> </signal> <signal name="resource_saved"> @@ -466,14 +466,14 @@ <argument index="0" name="scene_root" type="Node"> </argument> <description> - Emitted when user change scene. The argument is a root node of freshly opened scene. + Emitted when the scene is changed in the editor. The argument will return the root node of the scene that has just become active. If this scene is new and empty, the argument will be null. </description> </signal> <signal name="scene_closed"> <argument index="0" name="filepath" type="String"> </argument> <description> - Emitted when user close scene. The argument is file path to a closed scene. + Emitted when user closes a scene. The argument is file path to a closed scene. </description> </signal> </signals> diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml index 76c105dd25..0c5de68d98 100644 --- a/doc/classes/EditorScenePostImport.xml +++ b/doc/classes/EditorScenePostImport.xml @@ -26,7 +26,7 @@ [/codeblock] </description> <tutorials> - <link>http://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_scenes.html#custom-script</link> + <link>https://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_scenes.html#custom-script</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index 566322e6c5..80281a603a 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -5,7 +5,6 @@ </brief_description> <description> Resource for environment nodes (like [WorldEnvironment]) that define multiple environment operations (such as background [Sky] or [Color], ambient light, fog, depth-of-field...). These parameters affect the final render of the scene. The order of these operations is: - - DOF Blur - Motion Blur - Bloom @@ -13,8 +12,8 @@ - Adjustments </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/environment_and_post_processing.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/high_dynamic_range.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html</link> </tutorials> <demos> </demos> @@ -120,6 +119,8 @@ <member name="fog_depth_enabled" type="bool" setter="set_fog_depth_enabled" getter="is_fog_depth_enabled"> Enables the fog depth. </member> + <member name="fog_depth_end" type="float" setter="set_fog_depth_end" getter="get_fog_depth_end"> + </member> <member name="fog_enabled" type="bool" setter="set_fog_enabled" getter="is_fog_enabled"> Enables the fog. Needs fog_height_enabled and/or for_depth_enabled to actually display fog. </member> @@ -158,6 +159,8 @@ <member name="glow_enabled" type="bool" setter="set_glow_enabled" getter="is_glow_enabled"> Enables glow rendering. </member> + <member name="glow_hdr_luminance_cap" type="float" setter="set_glow_hdr_luminance_cap" getter="get_glow_hdr_luminance_cap"> + </member> <member name="glow_hdr_scale" type="float" setter="set_glow_hdr_bleed_scale" getter="get_glow_hdr_bleed_scale"> Bleed scale of the HDR glow. </member> diff --git a/doc/classes/Expression.xml b/doc/classes/Expression.xml index d5b831a61a..c5f71fe55e 100644 --- a/doc/classes/Expression.xml +++ b/doc/classes/Expression.xml @@ -1,8 +1,27 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Expression" inherits="Reference" category="Core" version="3.1"> <brief_description> + A class that stores an expression you can execute. </brief_description> <description> + An expression can be made of any arithmetic operation, built-in math function call, method call of a passed instance, or built-in type construction call. + An example expression text using the built-in math functions could be [code]sqrt(pow(3,2) + pow(4,2))[/code]. + In the following example we use a [LineEdit] node to write our expression and show the result. + [codeblock] + onready var expression = Expression.new() + + func _ready(): + $LineEdit.connect("text_entered", self, "_on_text_entered") + + func _on_text_entered(command): + var error = expression.parse(command, []) + if error != OK: + print(get_error_text()) + return + var result = expression.execute([], null, true) + if not expression.has_execute_failed(): + $LineEdit.text = str(result) + [/codeblock] </description> <tutorials> </tutorials> @@ -19,18 +38,21 @@ <argument index="2" name="show_error" type="bool" default="true"> </argument> <description> + Executes the expression that was previously parsed by [method parse] and returns the result. Before you use the returned object, you should check if the method failed by calling [method has_execute_failed]. </description> </method> <method name="get_error_text" qualifiers="const"> <return type="String"> </return> <description> + Returns the error text if [method parse] has failed. </description> </method> <method name="has_execute_failed" qualifiers="const"> <return type="bool"> </return> <description> + Returns [code]true[/code] if [method execute] has failed. </description> </method> <method name="parse"> @@ -41,6 +63,7 @@ <argument index="1" name="input_names" type="PoolStringArray" default="PoolStringArray( )"> </argument> <description> + Parses the expression and returns a [enum @GlobalScope.Error]. </description> </method> </methods> diff --git a/doc/classes/File.xml b/doc/classes/File.xml index 20054ac9dc..058bb09090 100644 --- a/doc/classes/File.xml +++ b/doc/classes/File.xml @@ -22,7 +22,7 @@ [/codeblock] </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/step_by_step/filesystem.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/filesystem.html</link> </tutorials> <demos> </demos> @@ -100,7 +100,7 @@ <argument index="0" name="delim" type="String" default="",""> </argument> <description> - Returns the next value of the file in CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma). + Returns the next value of the file in CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma), it should be one character long. </description> </method> <method name="get_double" qualifiers="const"> @@ -327,6 +327,17 @@ Stores the given array of bytes in the file. </description> </method> + <method name="store_csv_line"> + <return type="void"> + </return> + <argument index="0" name="values" type="PoolStringArray"> + </argument> + <argument index="1" name="delim" type="String" default="",""> + </argument> + <description> + Store the given [PoolStringArray] in the file as a line formatted in the CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma), it should be one character long. + </description> + </method> <method name="store_double"> <return type="void"> </return> diff --git a/doc/classes/FileDialog.xml b/doc/classes/FileDialog.xml index 247228d265..29aa26b67f 100644 --- a/doc/classes/FileDialog.xml +++ b/doc/classes/FileDialog.xml @@ -17,7 +17,7 @@ <argument index="0" name="filter" type="String"> </argument> <description> - Add a custom filter. Filter format is: "mask ; description", example (C++): dialog->add_filter("*.png ; PNG Images"); + Add a custom filter. Example: [code]add_filter("*.png ; PNG Images")[/code] </description> </method> <method name="clear_filters"> @@ -31,12 +31,14 @@ <return type="void"> </return> <description> + Clear currently selected items in the dialog. </description> </method> <method name="get_line_edit"> <return type="LineEdit"> </return> <description> + Returns the LineEdit for the selected file. </description> </method> <method name="get_vbox"> @@ -56,6 +58,7 @@ </methods> <members> <member name="access" type="int" setter="set_access" getter="get_access" enum="FileDialog.Access"> + The file system access scope. See enum [code]Access[/code] constants. </member> <member name="current_dir" type="String" setter="set_current_dir" getter="get_current_dir"> The current working directory of the file dialog. @@ -67,13 +70,16 @@ The currently selected file path of the file dialog. </member> <member name="filters" type="PoolStringArray" setter="set_filters" getter="get_filters"> + Set file type filters. This example shows only .png and .gd files [code]set_filters(PoolStringArray(["*.png ; PNG Images","*.gd ; GD Script"]))[/code]. </member> <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="FileDialog.Mode"> + Set dialog to open or save mode, changes selection behavior. See enum [code]Mode[/code] constants. </member> <member name="mode_overrides_title" type="bool" setter="set_mode_overrides_title" getter="is_mode_overriding_title"> - If [code]true[/code], changing the [code]mode[/code] property will set the window title accordingly (e. g. setting mode to [code]MODE_OPEN_FILE[/code] will change the window title to "Open a File"). + If [code]true[/code], changing the [code]Mode[/code] property will set the window title accordingly (e. g. setting mode to [code]MODE_OPEN_FILE[/code] will change the window title to "Open a File"). </member> <member name="show_hidden_files" type="bool" setter="set_show_hidden_files" getter="is_showing_hidden_files"> + If [code]true[/code], the dialog will show hidden files. </member> </members> <signals> diff --git a/doc/classes/GIProbe.xml b/doc/classes/GIProbe.xml index 77dea73564..5fb0ccc33d 100644 --- a/doc/classes/GIProbe.xml +++ b/doc/classes/GIProbe.xml @@ -5,7 +5,7 @@ <description> </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/gi_probes.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Generic6DOFJoint.xml b/doc/classes/Generic6DOFJoint.xml index 0863ead4ec..b6ac69e257 100644 --- a/doc/classes/Generic6DOFJoint.xml +++ b/doc/classes/Generic6DOFJoint.xml @@ -113,6 +113,30 @@ <member name="angular_motor_z/target_velocity" type="float" setter="set_param_z" getter="get_param_z"> Target speed for the motor at the z-axis. </member> + <member name="angular_spring_x/damping" type="float" setter="set_param_x" getter="get_param_x"> + </member> + <member name="angular_spring_x/enabled" type="bool" setter="set_flag_x" getter="get_flag_x"> + </member> + <member name="angular_spring_x/equilibrium_point" type="float" setter="set_param_x" getter="get_param_x"> + </member> + <member name="angular_spring_x/stiffness" type="float" setter="set_param_x" getter="get_param_x"> + </member> + <member name="angular_spring_y/damping" type="float" setter="set_param_y" getter="get_param_y"> + </member> + <member name="angular_spring_y/enabled" type="bool" setter="set_flag_y" getter="get_flag_y"> + </member> + <member name="angular_spring_y/equilibrium_point" type="float" setter="set_param_y" getter="get_param_y"> + </member> + <member name="angular_spring_y/stiffness" type="float" setter="set_param_y" getter="get_param_y"> + </member> + <member name="angular_spring_z/damping" type="float" setter="set_param_z" getter="get_param_z"> + </member> + <member name="angular_spring_z/enabled" type="bool" setter="set_flag_z" getter="get_flag_z"> + </member> + <member name="angular_spring_z/equilibrium_point" type="float" setter="set_param_z" getter="get_param_z"> + </member> + <member name="angular_spring_z/stiffness" type="float" setter="set_param_z" getter="get_param_z"> + </member> <member name="linear_limit_x/damping" type="float" setter="set_param_x" getter="get_param_x"> The amount of damping that happens at the x-motion. </member> @@ -194,6 +218,32 @@ <member name="linear_motor_z/target_velocity" type="float" setter="set_param_z" getter="get_param_z"> The speed that the linear motor will attempt to reach on the z-axis. </member> + <member name="linear_spring_x/damping" type="float" setter="set_param_x" getter="get_param_x"> + </member> + <member name="linear_spring_x/enabled" type="bool" setter="set_flag_x" getter="get_flag_x"> + </member> + <member name="linear_spring_x/equilibrium_point" type="float" setter="set_param_x" getter="get_param_x"> + </member> + <member name="linear_spring_x/stiffness" type="float" setter="set_param_x" getter="get_param_x"> + </member> + <member name="linear_spring_y/damping" type="float" setter="set_param_y" getter="get_param_y"> + </member> + <member name="linear_spring_y/enabled" type="bool" setter="set_flag_y" getter="get_flag_y"> + </member> + <member name="linear_spring_y/equilibrium_point" type="float" setter="set_param_y" getter="get_param_y"> + </member> + <member name="linear_spring_y/stiffness" type="float" setter="set_param_y" getter="get_param_y"> + </member> + <member name="linear_spring_z/damping" type="float" setter="set_param_z" getter="get_param_z"> + </member> + <member name="linear_spring_z/enabled" type="bool" setter="set_flag_z" getter="get_flag_z"> + </member> + <member name="linear_spring_z/equilibrium_point" type="float" setter="set_param_z" getter="get_param_z"> + </member> + <member name="linear_spring_z/stiffness" type="float" setter="set_param_z" getter="get_param_z"> + </member> + <member name="precision" type="int" setter="set_precision" getter="get_precision"> + </member> </members> <constants> <constant name="PARAM_LINEAR_LOWER_LIMIT" value="0" enum="Param"> @@ -217,34 +267,34 @@ <constant name="PARAM_LINEAR_MOTOR_FORCE_LIMIT" value="6" enum="Param"> The maximum force the linear motor will apply while trying to reach the velocity target. </constant> - <constant name="PARAM_ANGULAR_LOWER_LIMIT" value="7" enum="Param"> + <constant name="PARAM_ANGULAR_LOWER_LIMIT" value="10" enum="Param"> The minimum rotation in negative direction to break loose and rotate around the axes. </constant> - <constant name="PARAM_ANGULAR_UPPER_LIMIT" value="8" enum="Param"> + <constant name="PARAM_ANGULAR_UPPER_LIMIT" value="11" enum="Param"> The minimum rotation in positive direction to break loose and rotate around the axes. </constant> - <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="9" enum="Param"> + <constant name="PARAM_ANGULAR_LIMIT_SOFTNESS" value="12" enum="Param"> The speed of all rotations across the axes. </constant> - <constant name="PARAM_ANGULAR_DAMPING" value="10" enum="Param"> + <constant name="PARAM_ANGULAR_DAMPING" value="13" enum="Param"> The amount of rotational damping across the axes. The lower, the more dampening occurs. </constant> - <constant name="PARAM_ANGULAR_RESTITUTION" value="11" enum="Param"> + <constant name="PARAM_ANGULAR_RESTITUTION" value="14" enum="Param"> The amount of rotational restitution across the axes. The lower, the more restitution occurs. </constant> - <constant name="PARAM_ANGULAR_FORCE_LIMIT" value="12" enum="Param"> + <constant name="PARAM_ANGULAR_FORCE_LIMIT" value="15" enum="Param"> The maximum amount of force that can occur, when rotating around the axes. </constant> - <constant name="PARAM_ANGULAR_ERP" value="13" enum="Param"> + <constant name="PARAM_ANGULAR_ERP" value="16" enum="Param"> When rotating across the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </constant> - <constant name="PARAM_ANGULAR_MOTOR_TARGET_VELOCITY" value="14" enum="Param"> + <constant name="PARAM_ANGULAR_MOTOR_TARGET_VELOCITY" value="17" enum="Param"> Target speed for the motor at the axes. </constant> - <constant name="PARAM_ANGULAR_MOTOR_FORCE_LIMIT" value="15" enum="Param"> + <constant name="PARAM_ANGULAR_MOTOR_FORCE_LIMIT" value="18" enum="Param"> Maximum acceleration for the motor at the axes. </constant> - <constant name="PARAM_MAX" value="16" enum="Param"> + <constant name="PARAM_MAX" value="22" enum="Param"> End flag of PARAM_* constants, used internally. </constant> <constant name="FLAG_ENABLE_LINEAR_LIMIT" value="0" enum="Flag"> @@ -253,12 +303,16 @@ <constant name="FLAG_ENABLE_ANGULAR_LIMIT" value="1" enum="Flag"> If [code]set[/code] there is rotational motion possible. </constant> - <constant name="FLAG_ENABLE_MOTOR" value="2" enum="Flag"> + <constant name="FLAG_ENABLE_LINEAR_SPRING" value="3" enum="Flag"> + </constant> + <constant name="FLAG_ENABLE_ANGULAR_SPRING" value="2" enum="Flag"> + </constant> + <constant name="FLAG_ENABLE_MOTOR" value="4" enum="Flag"> If [code]set[/code] there is a rotational motor across these axes. </constant> - <constant name="FLAG_ENABLE_LINEAR_MOTOR" value="3" enum="Flag"> + <constant name="FLAG_ENABLE_LINEAR_MOTOR" value="5" enum="Flag"> </constant> - <constant name="FLAG_MAX" value="4" enum="Flag"> + <constant name="FLAG_MAX" value="6" enum="Flag"> End flag of FLAG_* constants, used internally. </constant> </constants> diff --git a/doc/classes/Gradient.xml b/doc/classes/Gradient.xml index df4a507b65..bf3f125e48 100644 --- a/doc/classes/Gradient.xml +++ b/doc/classes/Gradient.xml @@ -4,7 +4,7 @@ Color interpolator node. </brief_description> <description> - Given a set of colors, this node will interpolate them in order, meaning, that if you have color 1, color 2 and color3, the ramp will interpolate (generate the colors between two colors) from color 1 to color 2 and from color 2 to color 3. Initially the ramp will have 2 colors (black and white), one (black) at ramp lower offset offset 0 and the other (white) at the ramp higher offset 1. + Given a set of colors, this node will interpolate them in order, meaning, that if you have color 1, color 2 and color 3, the ramp will interpolate (generate the colors between two colors) from color 1 to color 2 and from color 2 to color 3. Initially the ramp will have 2 colors (black and white), one (black) at ramp lower offset 0 and the other (white) at the ramp higher offset 1. </description> <tutorials> </tutorials> diff --git a/doc/classes/GridContainer.xml b/doc/classes/GridContainer.xml index 8a8a9a2d24..346ab9d357 100644 --- a/doc/classes/GridContainer.xml +++ b/doc/classes/GridContainer.xml @@ -11,16 +11,6 @@ <demos> </demos> <methods> - <method name="get_child_control_at_cell"> - <return type="Control"> - </return> - <argument index="0" name="row" type="int"> - </argument> - <argument index="1" name="column" type="int"> - </argument> - <description> - </description> - </method> </methods> <members> <member name="columns" type="int" setter="set_columns" getter="get_columns"> diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml index 08e2f649a0..2f21505757 100644 --- a/doc/classes/HTTPClient.xml +++ b/doc/classes/HTTPClient.xml @@ -10,8 +10,8 @@ For more information on HTTP, see https://developer.mozilla.org/en-US/docs/Web/HTTP (or read RFC 2616 to get it straight from the source: https://tools.ietf.org/html/rfc2616). </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/networking/http_client_class.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/networking/ssl_certificates.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/networking/http_client_class.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml index c5bb10a23a..3916eb2b5b 100644 --- a/doc/classes/HTTPRequest.xml +++ b/doc/classes/HTTPRequest.xml @@ -8,7 +8,7 @@ Can be used to make HTTP requests, i.e. download or upload files or web content via HTTP. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/networking/ssl_certificates.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml index 338d01ae5f..724e6a078d 100644 --- a/doc/classes/Input.xml +++ b/doc/classes/Input.xml @@ -7,7 +7,7 @@ A Singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. Actions and their events can be set in the Project Settings / Input Map tab. Or be set with [InputMap]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/index.html</link> </tutorials> <demos> </demos> @@ -17,8 +17,11 @@ </return> <argument index="0" name="action" type="String"> </argument> + <argument index="1" name="strength" type="float" default="1.0"> + </argument> <description> This will simulate pressing the specified action. + The strength can be used for non-boolean actions, it's ranged between 0 and 1 representing the intensity of the given action. </description> </method> <method name="action_release"> @@ -55,6 +58,7 @@ <argument index="0" name="action" type="String"> </argument> <description> + Returns a value between 0 and 1 representing the intensity of the given action. In a joypad, for example, the further away the axis (analog sticks or L2, R2 triggers) is from the dead zone, the closer the value will be to 1. If the action is mapped to a control that has no axis as the keyboard, the value returned will be 0 or 1. </description> </method> <method name="get_connected_joypads"> @@ -122,7 +126,7 @@ <argument index="0" name="button_index" type="int"> </argument> <description> - Receives a [code]JOY_BUTTON_*[/code] Enum and returns it's equivalent name as a string. + Receives a [code]JOY_BUTTON_*[/code] Enum and returns its equivalent name as a string. </description> </method> <method name="get_joy_guid" qualifiers="const"> diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml index 993d62d188..c880823aee 100644 --- a/doc/classes/InputEvent.xml +++ b/doc/classes/InputEvent.xml @@ -7,8 +7,8 @@ Base class of all sort of input event. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/2d_transforms.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml index 16000231cb..8a10dc6ab9 100644 --- a/doc/classes/InputEventAction.xml +++ b/doc/classes/InputEventAction.xml @@ -7,7 +7,7 @@ Contains a generic action which can be targeted from several type of inputs. Actions can be created from the project settings menu [code]Project > Project Settings > Input Map[/code]. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html#actions</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#actions</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml index adaeae685e..18e33c2131 100644 --- a/doc/classes/InputEventJoypadButton.xml +++ b/doc/classes/InputEventJoypadButton.xml @@ -7,7 +7,7 @@ Input event type for gamepad buttons. For joysticks see [InputEventJoypadMotion]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml index f86aec4ce0..0c73f53158 100644 --- a/doc/classes/InputEventJoypadMotion.xml +++ b/doc/classes/InputEventJoypadMotion.xml @@ -7,7 +7,7 @@ Stores information about joystick motions. One [code]InputEventJoypadMotion[/code] represents one axis at a time. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml index a013ee6266..0118fda2df 100644 --- a/doc/classes/InputEventKey.xml +++ b/doc/classes/InputEventKey.xml @@ -7,7 +7,7 @@ Stores key presses on the keyboard. Supports key presses, key releases and [member echo] events. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml index 06de96890a..27e8d17407 100644 --- a/doc/classes/InputEventMouse.xml +++ b/doc/classes/InputEventMouse.xml @@ -7,7 +7,7 @@ Stores general mouse events information. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml index a3a9055087..1342c7bf7e 100644 --- a/doc/classes/InputEventMouseButton.xml +++ b/doc/classes/InputEventMouseButton.xml @@ -7,7 +7,7 @@ Contains mouse click information. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/mouse_and_input_coordinates.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index 05e3e79d26..f7f6358910 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -7,7 +7,7 @@ Contains mouse motion information. Supports relative, absolute positions and speed. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/mouse_and_input_coordinates.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml index f777d90ccb..a320c0a028 100644 --- a/doc/classes/InputEventScreenDrag.xml +++ b/doc/classes/InputEventScreenDrag.xml @@ -8,7 +8,7 @@ Contains screen drag information. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml index 39cd0a9657..55f04cdd94 100644 --- a/doc/classes/InputEventScreenTouch.xml +++ b/doc/classes/InputEventScreenTouch.xml @@ -8,7 +8,7 @@ Stores multi-touch press/release information. Supports touch press, touch release and [member index] for multi-touch count and order. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml index 9c1814fedd..fcf2fd545e 100644 --- a/doc/classes/InputEventWithModifiers.xml +++ b/doc/classes/InputEventWithModifiers.xml @@ -7,7 +7,7 @@ Contains keys events information with modifiers support like [code]SHIFT[/code] or [code]ALT[/code]. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml index 7fd1d7e8ac..8c25f851db 100644 --- a/doc/classes/InputMap.xml +++ b/doc/classes/InputMap.xml @@ -7,7 +7,7 @@ Manages all [InputEventAction] which can be created/modified from the project settings menu [code]Project > Project Settings > Input Map[/code] or in code with [method add_action] and [method action_add_event]. See [method Node._input]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/inputs/inputevent.html#inputmap</link> + <link>https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#inputmap</link> </tutorials> <demos> </demos> diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml index 38d32fe7c8..0b8ede92d5 100644 --- a/doc/classes/ItemList.xml +++ b/doc/classes/ItemList.xml @@ -166,6 +166,14 @@ Returns whether or not the item at the specified index is disabled </description> </method> + <method name="is_item_icon_transposed" qualifiers="const"> + <return type="bool"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <description> + </description> + </method> <method name="is_item_selectable" qualifiers="const"> <return type="bool"> </return> @@ -289,6 +297,16 @@ <description> </description> </method> + <method name="set_item_icon_transposed"> + <return type="void"> + </return> + <argument index="0" name="idx" type="int"> + </argument> + <argument index="1" name="rect" type="bool"> + </argument> + <description> + </description> + </method> <method name="set_item_metadata"> <return type="void"> </return> @@ -412,6 +430,7 @@ Fired when specified list item has been selected via right mouse clicking. The click position is also provided to allow appropriate popup of context menus at the correct location. + [member allow_rmb_select] must be enabled. </description> </signal> <signal name="item_selected"> @@ -419,6 +438,7 @@ </argument> <description> Fired when specified item has been selected. + [member allow_reselect] must be enabled to reselect an item. </description> </signal> <signal name="multi_selected"> diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml index 17588717c2..fa3aaed684 100644 --- a/doc/classes/JavaScript.xml +++ b/doc/classes/JavaScript.xml @@ -7,7 +7,7 @@ The JavaScript singleton is implemented only in HTML5 export. It's used to access the browser's JavaScript context. This allows interaction with embedding pages or calling third-party JavaScript APIs. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/workflow/export/exporting_for_web.html#calling-javascript-from-script</link> + <link>https://docs.godotengine.org/en/latest/getting_started/workflow/export/exporting_for_web.html#calling-javascript-from-script</link> </tutorials> <demos> </demos> diff --git a/doc/classes/KinematicBody.xml b/doc/classes/KinematicBody.xml index 17310ab4dc..df8fb251ba 100644 --- a/doc/classes/KinematicBody.xml +++ b/doc/classes/KinematicBody.xml @@ -9,7 +9,7 @@ Kinematic Characters: KinematicBody also has an API for moving objects (the [method move_and_collide] and [method move_and_slide] methods) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/kinematic_character_2d.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link> </tutorials> <demos> </demos> @@ -69,7 +69,7 @@ </argument> <description> Moves the body along the vector [code]rel_vec[/code]. The body will stop if it collides. Returns a [KinematicCollision], which contains information about the collision. - If [code]test_only[/code] is [code]true[/true], the body does not move but the would-be collision information is given. + If [code]test_only[/code] is [code]true[/code], the body does not move but the would-be collision information is given. </description> </method> <method name="move_and_slide"> @@ -106,13 +106,13 @@ </argument> <argument index="2" name="floor_normal" type="Vector3" default="Vector3( 0, 0, 0 )"> </argument> - <argument index="3" name="infinite_inertia" type="bool" default="true"> + <argument index="3" name="stop_on_slope" type="bool" default="false"> </argument> - <argument index="4" name="stop_on_slope" type="bool" default="false"> + <argument index="4" name="max_slides" type="int" default="4"> </argument> - <argument index="5" name="max_bounces" type="int" default="4"> + <argument index="5" name="floor_max_angle" type="float" default="0.785398"> </argument> - <argument index="6" name="floor_max_angle" type="float" default="0.785398"> + <argument index="6" name="infinite_inertia" type="bool" default="true"> </argument> <description> Moves the body while keeping it attached to slopes. Similar to [method move_and_slide]. @@ -126,7 +126,7 @@ </argument> <argument index="1" name="rel_vec" type="Vector3"> </argument> - <argument index="2" name="infinite_inertia" type="bool"> + <argument index="2" name="infinite_inertia" type="bool" default="true"> </argument> <description> Checks for collisions without moving the body. Virtually sets the node's position, scale and rotation to that of the given [Transform], then tries to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/code] if a collision would occur. diff --git a/doc/classes/KinematicBody2D.xml b/doc/classes/KinematicBody2D.xml index e48660a889..8a644447ca 100644 --- a/doc/classes/KinematicBody2D.xml +++ b/doc/classes/KinematicBody2D.xml @@ -79,20 +79,20 @@ </argument> <argument index="1" name="floor_normal" type="Vector2" default="Vector2( 0, 0 )"> </argument> - <argument index="2" name="infinite_inertia" type="bool" default="true"> + <argument index="2" name="stop_on_slope" type="bool" default="false"> </argument> - <argument index="3" name="stop_on_slope" type="bool" default="false"> + <argument index="3" name="max_slides" type="int" default="4"> </argument> - <argument index="4" name="max_bounces" type="int" default="4"> + <argument index="4" name="floor_max_angle" type="float" default="0.785398"> </argument> - <argument index="5" name="floor_max_angle" type="float" default="0.785398"> + <argument index="5" name="infinite_inertia" type="bool" default="true"> </argument> <description> Moves the body along a vector. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [code]KinematicBody2D[/code] or [RigidBody2D], it will also be affected by the motion of the other body. You can use this to make moving or rotating platforms, or to make nodes push other nodes. [code]linear_velocity[/code] is a value in pixels per second. Unlike in for example [method move_and_collide], you should [i]not[/i] multiply it with [code]delta[/code] — this is done by the method. [code]floor_normal[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector2(0, 0)[/code], everything is considered a wall. This is useful for topdown games. [i]TODO: Update for stop_on_slope argument.[/i] If the body is standing on a slope and the horizontal speed (relative to the floor's speed) goes below [code]slope_stop_min_velocity[/code], the body will stop completely. This prevents the body from sliding down slopes when you include gravity in [code]linear_velocity[/code]. When set to lower values, the body will not be able to stand still on steep slopes. - If the body collides, it will change direction a maximum of [code]max_bounces[/code] times before it stops. + If the body collides, it will change direction a maximum of [code]max_slides[/code] times before it stops. [code]floor_max_angle[/code] is the maximum angle (in radians) where a slope is still considered a floor (or a ceiling), rather than a wall. The default value equals 45 degrees. Returns the movement that remained when the body stopped. To get more detailed information about collisions that occurred, use [method get_slide_collision]. </description> @@ -106,17 +106,17 @@ </argument> <argument index="2" name="floor_normal" type="Vector2" default="Vector2( 0, 0 )"> </argument> - <argument index="3" name="infinite_inertia" type="bool" default="true"> + <argument index="3" name="stop_on_slope" type="bool" default="false"> </argument> - <argument index="4" name="stop_on_slope" type="bool" default="false"> + <argument index="4" name="max_slides" type="int" default="4"> </argument> - <argument index="5" name="max_bounces" type="int" default="4"> + <argument index="5" name="floor_max_angle" type="float" default="0.785398"> </argument> - <argument index="6" name="floor_max_angle" type="float" default="0.785398"> + <argument index="6" name="infinite_inertia" type="bool" default="true"> </argument> <description> Moves the body while keeping it attached to slopes. Similar to [method move_and_slide]. - As long as the [code]snap[/code] vector is in contact with the ground, the body will remain attached to the surface. This means you must disable snap in order to jump, for example. You can do this by setting[code]snap[/code] to[code](0, 0)[/code] or by using [method move_and_slide] instead. + As long as the [code]snap[/code] vector is in contact with the ground, the body will remain attached to the surface. This means you must disable snap in order to jump, for example. You can do this by setting [code]snap[/code] to [code](0, 0)[/code] or by using [method move_and_slide] instead. </description> </method> <method name="test_move"> @@ -126,7 +126,7 @@ </argument> <argument index="1" name="rel_vec" type="Vector2"> </argument> - <argument index="2" name="infinite_inertia" type="bool"> + <argument index="2" name="infinite_inertia" type="bool" default="true"> </argument> <description> Checks for collisions without moving the body. Virtually sets the node's position, scale and rotation to that of the given [Transform2D], then tries to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/code] if a collision would occur. diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml index 1e78a196b1..90547b7c2f 100644 --- a/doc/classes/Label.xml +++ b/doc/classes/Label.xml @@ -30,7 +30,7 @@ <return type="int"> </return> <description> - Returns the total length of the text. + Returns the total number of printable characters in the text (excluding spaces and newlines). </description> </method> <method name="get_visible_line_count" qualifiers="const"> diff --git a/doc/classes/Light.xml b/doc/classes/Light.xml index 04191136a8..cf873e5b28 100644 --- a/doc/classes/Light.xml +++ b/doc/classes/Light.xml @@ -7,7 +7,7 @@ Light is the abstract base class for light nodes, so it shouldn't be used directly (It can't be instanced). Other types of light nodes inherit from it. Light contains the common variables and parameters used for lighting. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/lights_and_shadows.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml index c244b8b7a7..f842dd8311 100644 --- a/doc/classes/LineEdit.xml +++ b/doc/classes/LineEdit.xml @@ -89,6 +89,7 @@ The cursor's position inside the [code]LineEdit[/code]. When set, the text may scroll to accommodate it. </member> <member name="clear_button_enabled" type="bool" setter="set_clear_button_enabled" getter="is_clear_button_enabled"> + If [code]true[/code] the [code]LineEdit[/code] will show a clear button if [code]text[/code] is not empty. </member> <member name="context_menu_enabled" type="bool" setter="set_context_menu_enabled" getter="is_context_menu_enabled"> If [code]true[/code] the context menu will appear when right clicked. @@ -169,6 +170,7 @@ Undoes the previous action. </constant> <constant name="MENU_REDO" value="6" enum="MenuItems"> + Reverse the last undo action. </constant> <constant name="MENU_MAX" value="7" enum="MenuItems"> </constant> diff --git a/doc/classes/MeshDataTool.xml b/doc/classes/MeshDataTool.xml index 43d94004a8..c90dba1561 100644 --- a/doc/classes/MeshDataTool.xml +++ b/doc/classes/MeshDataTool.xml @@ -1,8 +1,22 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="MeshDataTool" inherits="Reference" category="Core" version="3.1"> <brief_description> + Helper tool to access and edit [Mesh] data. </brief_description> <description> + The MeshDataTool provides access to individual vertices in a [Mesh]. It allows users to read and edit vertex data of meshes. It also creates an array of faces and edges. + To use the MeshDataTool, load a mesh with [method create_from_surface]. When you are finished editing the data commit the data to a mesh with [method commit_to_surface]. + Below is an example of how the MeshDataTool may be used. + [codeblock] + var mdt = MeshDataTool.new() + mdt.create_from_surface(mesh, 0) + for i in range(mdt.get_vertex_count()): + var vertex = mdt.get_vertex(i) + ... + mdt.set_vertex(i, vertex) + mesh.surface_remove(0) + mdt.commit_to_surface(mesh) + [/codeblock] </description> <tutorials> </tutorials> @@ -13,6 +27,7 @@ <return type="void"> </return> <description> + Clears all data currently in MeshDataTool. </description> </method> <method name="commit_to_surface"> @@ -21,6 +36,7 @@ <argument index="0" name="mesh" type="ArrayMesh"> </argument> <description> + Adds a new surface to specified [Mesh] with edited data. </description> </method> <method name="create_from_surface"> @@ -31,12 +47,15 @@ <argument index="1" name="surface" type="int"> </argument> <description> + Uses specified surface of given [Mesh] to populate data for MeshDataTool. + Requires [Mesh] with primitive type [code]PRIMITIVE_TRIANGLES[/code]. </description> </method> <method name="get_edge_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of edges in this [Mesh]. </description> </method> <method name="get_edge_faces" qualifiers="const"> @@ -45,6 +64,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns array of faces that touch given edge. </description> </method> <method name="get_edge_meta" qualifiers="const"> @@ -53,6 +73,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns meta information assigned to given edge. </description> </method> <method name="get_edge_vertex" qualifiers="const"> @@ -63,12 +84,15 @@ <argument index="1" name="vertex" type="int"> </argument> <description> + Returns index of specified vertex connected to given edge. + Vertex argument can only be 0 or 1 because edges are comprised of two vertices. </description> </method> <method name="get_face_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of faces in this [Mesh]. </description> </method> <method name="get_face_edge" qualifiers="const"> @@ -79,6 +103,8 @@ <argument index="1" name="edge" type="int"> </argument> <description> + Returns specified edge associated with given face. + Edge argument must 2 or less because a face only has three edges. </description> </method> <method name="get_face_meta" qualifiers="const"> @@ -87,6 +113,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns meta data associated with given face. </description> </method> <method name="get_face_normal" qualifiers="const"> @@ -95,6 +122,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Calculates and returns face normal of given face. </description> </method> <method name="get_face_vertex" qualifiers="const"> @@ -105,18 +133,23 @@ <argument index="1" name="vertex" type="int"> </argument> <description> + Returns specified vertex of given face. + Vertex argument must be 2 or less because faces contain three vertices. </description> </method> <method name="get_format" qualifiers="const"> <return type="int"> </return> <description> + Returns format of [Mesh]. Format is an integer made up of [Mesh] format flags combined together. For example, a mesh containing both vertices and normals would return a format of [code]3[/code] because [code]ARRAY_FORMAT_VERTEX[/code] is [code]1[/code] and [code]ARRAY_FORMAT_NORMAL[/code] is [code]2[/code]. + For list of format flags see [ArrayMesh]. </description> </method> <method name="get_material" qualifiers="const"> <return type="Material"> </return> <description> + Returns material assigned to the [Mesh]. </description> </method> <method name="get_vertex" qualifiers="const"> @@ -125,6 +158,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns the vertex at given index. </description> </method> <method name="get_vertex_bones" qualifiers="const"> @@ -133,6 +167,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns the bones of the given vertex. </description> </method> <method name="get_vertex_color" qualifiers="const"> @@ -141,12 +176,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns the color of the given vertex. </description> </method> <method name="get_vertex_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the total number of vertices in [Mesh]. </description> </method> <method name="get_vertex_edges" qualifiers="const"> @@ -155,6 +192,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns array of edges that share given vertex. </description> </method> <method name="get_vertex_faces" qualifiers="const"> @@ -163,6 +201,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns array of faces that share given vertex. </description> </method> <method name="get_vertex_meta" qualifiers="const"> @@ -171,6 +210,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns meta data associated with given vertex. </description> </method> <method name="get_vertex_normal" qualifiers="const"> @@ -179,6 +219,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns normal of given vertex. </description> </method> <method name="get_vertex_tangent" qualifiers="const"> @@ -187,6 +228,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns tangent of given vertex. </description> </method> <method name="get_vertex_uv" qualifiers="const"> @@ -195,6 +237,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns UV of given vertex. </description> </method> <method name="get_vertex_uv2" qualifiers="const"> @@ -203,6 +246,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns UV2 of given vertex. </description> </method> <method name="get_vertex_weights" qualifiers="const"> @@ -211,6 +255,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns bone weights of given vertex. </description> </method> <method name="set_edge_meta"> @@ -221,6 +266,7 @@ <argument index="1" name="meta" type="Variant"> </argument> <description> + Sets the meta data of given edge. </description> </method> <method name="set_face_meta"> @@ -231,6 +277,7 @@ <argument index="1" name="meta" type="Variant"> </argument> <description> + Sets the meta data of given face. </description> </method> <method name="set_material"> @@ -239,6 +286,7 @@ <argument index="0" name="material" type="Material"> </argument> <description> + Sets the material to be used by newly constructed [Mesh]. </description> </method> <method name="set_vertex"> @@ -249,6 +297,7 @@ <argument index="1" name="vertex" type="Vector3"> </argument> <description> + Sets the position of given vertex. </description> </method> <method name="set_vertex_bones"> @@ -259,6 +308,7 @@ <argument index="1" name="bones" type="PoolIntArray"> </argument> <description> + Sets the bones of given vertex. </description> </method> <method name="set_vertex_color"> @@ -269,6 +319,7 @@ <argument index="1" name="color" type="Color"> </argument> <description> + Sets the color of given vertex. </description> </method> <method name="set_vertex_meta"> @@ -279,6 +330,7 @@ <argument index="1" name="meta" type="Variant"> </argument> <description> + Sets the meta data associated with given vertex. </description> </method> <method name="set_vertex_normal"> @@ -289,6 +341,7 @@ <argument index="1" name="normal" type="Vector3"> </argument> <description> + Sets the normal of given vertex. </description> </method> <method name="set_vertex_tangent"> @@ -299,6 +352,7 @@ <argument index="1" name="tangent" type="Plane"> </argument> <description> + Sets the tangent of given vertex. </description> </method> <method name="set_vertex_uv"> @@ -309,6 +363,7 @@ <argument index="1" name="uv" type="Vector2"> </argument> <description> + Sets the UV of given vertex. </description> </method> <method name="set_vertex_uv2"> @@ -319,6 +374,7 @@ <argument index="1" name="uv2" type="Vector2"> </argument> <description> + Sets the UV2 of given vertex. </description> </method> <method name="set_vertex_weights"> @@ -329,6 +385,7 @@ <argument index="1" name="weights" type="PoolRealArray"> </argument> <description> + Sets the bone weights of given vertex. </description> </method> </methods> diff --git a/doc/classes/MeshInstance.xml b/doc/classes/MeshInstance.xml index ef42726ca9..bcc9a7cad9 100644 --- a/doc/classes/MeshInstance.xml +++ b/doc/classes/MeshInstance.xml @@ -41,6 +41,12 @@ Returns the [Material] for a surface of the [Mesh] resource. </description> </method> + <method name="get_surface_material_count" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> <method name="set_surface_material"> <return type="void"> </return> diff --git a/doc/classes/NavigationPolygon.xml b/doc/classes/NavigationPolygon.xml index b29e19e5d8..4ede80b98c 100644 --- a/doc/classes/NavigationPolygon.xml +++ b/doc/classes/NavigationPolygon.xml @@ -1,8 +1,27 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="NavigationPolygon" inherits="Resource" category="Core" version="3.1"> <brief_description> + A node that has methods to draw outlines or use indices of vertices to create navigation polygons. </brief_description> <description> + There are two ways to create polygons. Either by using the [method add_outline] method or using the [method add_polygon] method. + Using [method add_outline]: + [code] + var polygon = NavigationPolygon.new() + var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)]) + polygon.add_outline(outline) + polygon.make_polygons_from_outlines() + $NavigationPolygonInstance.navpoly = polygon + [/code] + Using [method add_polygon] and indices of the vertices array. + [code] + var polygon = NavigationPolygon.new() + var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)]) + polygon.set_vertices(vertices) + var indices = PoolIntArray(0, 3, 1) + polygon.add_polygon(indices) + $NavigationPolygonInstance.navpoly = polygon + [/code] </description> <tutorials> </tutorials> @@ -15,6 +34,7 @@ <argument index="0" name="outline" type="PoolVector2Array"> </argument> <description> + Appends a [PoolVector2Array] that contains the vertices of an outline to the internal array that contains all the outlines. You have to call [method make_polygons_from_outlines] in order for this array to be converted to polygons that the engine will use. </description> </method> <method name="add_outline_at_index"> @@ -25,6 +45,7 @@ <argument index="1" name="index" type="int"> </argument> <description> + Adds a [PoolVector2Array] that contains the vertices of an outline to the internal array that contains all the outlines at a fixed position. You have to call [method make_polygons_from_outlines] in order for this array to be converted to polygons that the engine will use. </description> </method> <method name="add_polygon"> @@ -33,18 +54,21 @@ <argument index="0" name="polygon" type="PoolIntArray"> </argument> <description> + Adds a polygon using the indices of the vertices you get when calling [method get_vertices]. </description> </method> <method name="clear_outlines"> <return type="void"> </return> <description> + Clears the array of the outlines, but it doesn't clear the vertices and the polygons that were created by them. </description> </method> <method name="clear_polygons"> <return type="void"> </return> <description> + Clears the array of polygons, but it doesn't clear the array of outlines and vertices. </description> </method> <method name="get_outline" qualifiers="const"> @@ -53,12 +77,14 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns a [PoolVector2Array] containing the vertices of an outline that was created in the editor or by script. </description> </method> <method name="get_outline_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of outlines that were created in the editor or by script. </description> </method> <method name="get_polygon"> @@ -67,24 +93,28 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Returns a [PoolIntArray] containing the indices of the vertices of a created polygon. </description> </method> <method name="get_polygon_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the count of all polygons. </description> </method> <method name="get_vertices" qualifiers="const"> <return type="PoolVector2Array"> </return> <description> + Returns a [PoolVector2Array] containing all the vertices being used to create the polygons. </description> </method> <method name="make_polygons_from_outlines"> <return type="void"> </return> <description> + Creates polygons from the outlines added in the editor or by script. </description> </method> <method name="remove_outline"> @@ -93,6 +123,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Removes an outline created in the editor or by script. You have to call [method make_polygons_from_outlines] for the polygons to update. </description> </method> <method name="set_outline"> @@ -103,6 +134,7 @@ <argument index="1" name="outline" type="PoolVector2Array"> </argument> <description> + Changes an outline created in the editor or by script. You have to call [method make_polygons_from_outlines] for the polygons to update. </description> </method> <method name="set_vertices"> @@ -111,6 +143,7 @@ <argument index="0" name="vertices" type="PoolVector2Array"> </argument> <description> + Sets the vertices that can be then indexed to create polygons with the [method add_polygon] method. </description> </method> </methods> diff --git a/doc/classes/NetworkedMultiplayerPeer.xml b/doc/classes/NetworkedMultiplayerPeer.xml index ea6fe6d11c..990f928b25 100644 --- a/doc/classes/NetworkedMultiplayerPeer.xml +++ b/doc/classes/NetworkedMultiplayerPeer.xml @@ -7,7 +7,7 @@ Manages the connection to network peers. Assigns unique IDs to each client connected to the server. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/networking/high_level_multiplayer.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link> </tutorials> <demos> </demos> @@ -92,7 +92,7 @@ </signals> <constants> <constant name="TRANSFER_MODE_UNRELIABLE" value="0" enum="TransferMode"> - Packets are not acknowledged, no resend attempts are made for lost packets. Packets may arrive in any order. Potentially faster than [code]TRANSFER_MODE_UNRELIABLE_ORDERED[/code]. Use for non-critical data, and always consider whether the order matters. + Packets are not acknowledged, no resend attempts are made for lost packets. Packets may arrive in any order. Potentially faster than [code]TRANSFER_MODE_UNRELIABLE_ORDERED[/code]. Use for non-critical data, and always consider whether the order matters. </constant> <constant name="TRANSFER_MODE_UNRELIABLE_ORDERED" value="1" enum="TransferMode"> Packets are not acknowledged, no resend attempts are made for lost packets. Packets are received in the order they were sent in. Potentially faster than [code]TRANSFER_MODE_RELIABLE[/code]. Use for non-critical data or data that would be outdated if received late due to resend attempt(s) anyway, for example movement and positional data. diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 90e9436307..dcdb6d0500 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -12,12 +12,12 @@ [b]Processing:[/b] Nodes can override the "process" state, so that they receive a callback on each frame requesting them to process (do something). Normal processing (callback [method _process], toggled with [method set_process]) happens as fast as possible and is dependent on the frame rate, so the processing time [i]delta[/i] is passed as an argument. Physics processing (callback [method _physics_process], toggled with [method set_physics_process]) happens a fixed number of times per second (60 by default) and is useful for code related to the physics engine. Nodes can also process input events. When present, the [method _input] function will be called for each input that the program receives. In many cases, this can be overkill (unless used for simple projects), and the [method _unhandled_input] function might be preferred; it is called when the input event was not handled by anyone else (typically, GUI [Control] nodes), ensuring that the node only receives the events that were meant for it. To keep track of the scene hierarchy (especially when instancing scenes into other scenes), an "owner" can be set for the node with [method set_owner]. This keeps track of who instanced what. This is mostly useful when writing editors and tools, though. - Finally, when a node is freed with [method free] or [method queue_free], it will also free all its children. + Finally, when a node is freed with [method Object.free] or [method queue_free], it will also free all its children. [b]Groups:[/b] Nodes can be added to as many groups as you want to be easy to manage, you could create groups like "enemies" or "collectables" for example, depending on your game. See [method add_to_group], [method is_in_group] and [method remove_from_group]. You can then retrieve all nodes in these groups, iterate them and even call methods on groups via the methods on [SceneTree]. [b]Networking with nodes:[/b] After connecting to a server (or making one, see [NetworkedMultiplayerENet]) it is possible to use the built-in RPC (remote procedure call) system to communicate over the network. By calling [method rpc] with a method name, it will be called locally and in all connected peers (peers = clients and the server that accepts connections). To identify which node receives the RPC call Godot will use its [NodePath] (make sure node names are the same on all peers). Also take a look at the high-level networking tutorial and corresponding demos. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/step_by_step/scenes_and_nodes.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/scenes_and_nodes.html</link> </tutorials> <demos> </demos> @@ -176,6 +176,16 @@ </argument> <description> Finds a descendant of this node whose name matches [code]mask[/code] as in [method String.match] (i.e. case sensitive, but '*' matches zero or more characters and '?' matches any single character except '.'). Note that it does not match against the full path, just against individual node names. + If [code]owned[/code] is [code]true[/code], this method only finds nodes whose owner is this node. This is especially important for scenes instantiated through script, because those scenes don't have an owner. + </description> + </method> + <method name="find_parent" qualifiers="const"> + <return type="Node"> + </return> + <argument index="0" name="mask" type="String"> + </argument> + <description> + Finds the first parent of the current node whose name matches [code]mask[/code] as in [method String.match] (i.e. case sensitive, but '*' matches zero or more characters and '?' matches any single character except '.'). Note that it does not match against the full path, just against individual node names. </description> </method> <method name="get_child" qualifiers="const"> @@ -266,15 +276,6 @@ Returns the parent node of the current node, or an empty [code]Node[/code] if the node lacks a parent. </description> </method> - <method name="find_parent" qualifiers="const"> - <return type="Node"> - </return> - <argument index="0" name="mask" type="String"> - </argument> - <description> - Finds the first parent of the current node whose name matches [code]mask[/code] as in [method String.match] (i.e. case sensitive, but '*' matches zero or more characters and '?' matches any single character except '.'). Note that it does not match against the full path, just against individual node names. - </description> - </method> <method name="get_path" qualifiers="const"> <return type="NodePath"> </return> diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index 13eabeca17..e955f6bb7d 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -7,7 +7,7 @@ A 2D game object, with a position, rotation and scale. All 2D physics nodes and sprites inherit from Node2D. Use Node2D as a parent node to move, scale and rotate children in a 2D project. Also gives control on the node's render order. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/custom_drawing_in_2d.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index dad4ce898d..e218949757 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -556,6 +556,13 @@ Note that this method can also be used to kill processes that were not spawned by the game. </description> </method> + <method name="move_window_to_foreground"> + <return type="void"> + </return> + <description> + Moves the window to the front. + </description> + </method> <method name="native_video_is_playing"> <return type="bool"> </return> @@ -583,6 +590,7 @@ </argument> <description> Plays native video from the specified path, at the given volume and with audio and subtitle tracks. + Note: This method is only implemented on Android and iOS, and the current Android implementation does not support the [code]volume[/code], [code]audio_track[/code] and [code]subtitle_track[/code] options. </description> </method> <method name="native_video_stop"> diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index fcd105d66b..86de830d56 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -348,6 +348,16 @@ If set to true, signal emission is blocked. </description> </method> + <method name="set_deferred"> + <return type="void"> + </return> + <argument index="0" name="property" type="String"> + </argument> + <argument index="1" name="value" type="Variant"> + </argument> + <description> + </description> + </method> <method name="set_indexed"> <return type="void"> </return> diff --git a/doc/classes/OmniLight.xml b/doc/classes/OmniLight.xml index 5ed058bb06..8d67cb626b 100644 --- a/doc/classes/OmniLight.xml +++ b/doc/classes/OmniLight.xml @@ -7,7 +7,7 @@ An Omnidirectional light is a type of [Light] that emits light in all directions. The light is attenuated by distance and this attenuation can be configured by changing its energy, radius, and attenuation parameters. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/lights_and_shadows.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/OrientedPathFollow.xml b/doc/classes/OrientedPathFollow.xml index 85d60936ad..bc6af4711b 100644 --- a/doc/classes/OrientedPathFollow.xml +++ b/doc/classes/OrientedPathFollow.xml @@ -4,7 +4,7 @@ Oriented point sampler for a [Path]. </brief_description> <description> - This node behaves like [PathFollow], except it uses its parent [Path] up vector information to enforce orientation. + This node behaves like [PathFollow], except it uses its parent [Path] up vector information to enforce orientation. Make sure to check if the curve of this node's parent [Path] has up vectors enabled. See [PathFollow] and [Curve3D] for further information. </description> <tutorials> diff --git a/doc/classes/PHashTranslation.xml b/doc/classes/PHashTranslation.xml index 18c72a0576..e5745375b0 100644 --- a/doc/classes/PHashTranslation.xml +++ b/doc/classes/PHashTranslation.xml @@ -17,6 +17,7 @@ <argument index="0" name="from" type="Translation"> </argument> <description> + Generates and sets an optimized translation from the given [Translation] resource. </description> </method> </methods> diff --git a/doc/classes/PackedScene.xml b/doc/classes/PackedScene.xml index 0d58e61c3a..7dea004b90 100644 --- a/doc/classes/PackedScene.xml +++ b/doc/classes/PackedScene.xml @@ -6,10 +6,23 @@ <description> A simplified interface to a scene file. Provides access to operations and checks that can be performed on the scene resource itself. Can be used to save a node to a file. When saving, the node as well as all the node it owns get saved (see [code]owner[/code] property on [Node]). Note that the node doesn't need to own itself. - Example of saving a node: + Example of saving a node with different owners: The following example creates 3 objects: [code]Node2D[/code] ([code]node[/code]), [code]RigidBody2D[/code] ([code]rigid[/code]) and [code]CollisionObject2D[/code] ([code]collision[/code]). [code]collision[/code] is a child of [code]rigid[/code] which is a child of [code]node[/code]. Only [code]rigid[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code]. [codeblock] + # create the objects + var node = Node2D.new() + var rigid = RigidBody2D.new() + var collision = CollisionShape2D.new() + + # create the object hierarchy + rigid.add_child(collision) + node.add_child(rigid) + + # change owner of rigid, but not of collision + rigid.set_owner(node) + var scene = PackedScene.new() - var result = scene.pack(child) + # only node and rigid are now packed + var result = scene.pack(node) if result == OK: ResourceSaver.save("res://path/name.scn", scene) # or user://... [/codeblock] @@ -39,7 +52,7 @@ <argument index="0" name="edit_state" type="int" enum="PackedScene.GenEditState" default="0"> </argument> <description> - Instantiates the scene's node hierarchy. Triggers child scene instantiation(s). Triggers the [enum Object.NOTIFICATION_INSTANCED] notification on the root node. + Instantiates the scene's node hierarchy. Triggers child scene instantiation(s). Triggers [Node]'s [code]NOTIFICATION_INSTANCED[/code] notification on the root node. </description> </method> <method name="pack"> diff --git a/doc/classes/ParallaxLayer.xml b/doc/classes/ParallaxLayer.xml index 662a15e043..e6ea166282 100644 --- a/doc/classes/ParallaxLayer.xml +++ b/doc/classes/ParallaxLayer.xml @@ -6,6 +6,7 @@ <description> A ParallaxLayer must be the child of a [ParallaxBackground] node. Each ParallaxLayer can be set to move at different speeds relative to the camera movement or the [member ParallaxBackground.scroll_offset] value. This node's children will be affected by its scroll offset. + Note that any changes to this node's position and scale made after it enters the scene will be ignored. </description> <tutorials> </tutorials> diff --git a/doc/classes/Particles2D.xml b/doc/classes/Particles2D.xml index f872552a49..6416e409a3 100644 --- a/doc/classes/Particles2D.xml +++ b/doc/classes/Particles2D.xml @@ -42,9 +42,6 @@ </member> <member name="fract_delta" type="bool" setter="set_fractional_delta" getter="get_fractional_delta"> </member> - <member name="h_frames" type="int" setter="set_h_frames" getter="get_h_frames"> - Number of horizontal frames in [code]texture[/code]. - </member> <member name="lifetime" type="float" setter="set_lifetime" getter="get_lifetime"> Amount of time each particle will exist. Default value: [code]1[/code]. </member> @@ -71,9 +68,6 @@ <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> Particle texture. If [code]null[/code] particles will be squares. </member> - <member name="v_frames" type="int" setter="set_v_frames" getter="get_v_frames"> - Number of vertical frames in [code]texture[/code]. - </member> <member name="visibility_rect" type="Rect2" setter="set_visibility_rect" getter="get_visibility_rect"> Editor visibility helper. </member> diff --git a/doc/classes/ParticlesMaterial.xml b/doc/classes/ParticlesMaterial.xml index 354b98485e..2904d4c578 100644 --- a/doc/classes/ParticlesMaterial.xml +++ b/doc/classes/ParticlesMaterial.xml @@ -32,9 +32,6 @@ <member name="angular_velocity_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> Angular velocity randomness ratio. Default value: [code]0[/code]. </member> - <member name="anim_loop" type="bool" setter="set_flag" getter="get_flag"> - If [code]true[/code] animation will loop. Default value: [code]false[/code]. - </member> <member name="anim_offset" type="float" setter="set_param" getter="get_param"> Particle animation offset. </member> @@ -216,7 +213,7 @@ <constant name="FLAG_ROTATE_Y" value="1" enum="Flags"> Use with [method set_flag] to set [member flag_rotate_y] </constant> - <constant name="FLAG_MAX" value="4" enum="Flags"> + <constant name="FLAG_MAX" value="3" enum="Flags"> </constant> <constant name="EMISSION_SHAPE_POINT" value="0" enum="EmissionShape"> All particles will be emitted from a single point. diff --git a/doc/classes/PathFollow2D.xml b/doc/classes/PathFollow2D.xml index f9940dab2f..515c921d0d 100644 --- a/doc/classes/PathFollow2D.xml +++ b/doc/classes/PathFollow2D.xml @@ -23,6 +23,7 @@ The node's offset along the curve. </member> <member name="lookahead" type="float" setter="set_lookahead" getter="get_lookahead"> + How far to look ahead of the curve to calculate the tangent if the node is rotating. E.g. shorter lookaheads will lead to faster rotations. Default value: [code]4[/code]. </member> <member name="loop" type="bool" setter="set_loop" getter="has_loop"> If [code]true[/code], any offset outside the path's length will wrap around, instead of stopping at the ends. Use it for cyclic paths. diff --git a/doc/classes/Physics2DDirectSpaceState.xml b/doc/classes/Physics2DDirectSpaceState.xml index aa54d9a11a..81db70f435 100644 --- a/doc/classes/Physics2DDirectSpaceState.xml +++ b/doc/classes/Physics2DDirectSpaceState.xml @@ -7,7 +7,7 @@ Direct access object to a space in the [Physics2DServer]. It's used mainly to do queries against objects and areas residing in a given space. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/ray-casting.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> </tutorials> <demos> </demos> @@ -75,6 +75,26 @@ Additionally, the method can take an [code]exclude[/code] array of objects or [RID]s that are to be excluded from collisions, a [code]collision_mask[/code] bitmask representing the physics layers to check in, or booleans to determine if the ray should collide with [PhysicsBody]s or [Area]s, respectively. </description> </method> + <method name="intersect_point_on_canvas"> + <return type="Array"> + </return> + <argument index="0" name="point" type="Vector2"> + </argument> + <argument index="1" name="canvas_instance_id" type="int"> + </argument> + <argument index="2" name="max_results" type="int" default="32"> + </argument> + <argument index="3" name="exclude" type="Array" default="[ ]"> + </argument> + <argument index="4" name="collision_layer" type="int" default="2147483647"> + </argument> + <argument index="5" name="collide_with_bodies" type="bool" default="true"> + </argument> + <argument index="6" name="collide_with_areas" type="bool" default="false"> + </argument> + <description> + </description> + </method> <method name="intersect_ray"> <return type="Dictionary"> </return> diff --git a/doc/classes/Physics2DServer.xml b/doc/classes/Physics2DServer.xml index a473de4ce8..84e15d3b26 100644 --- a/doc/classes/Physics2DServer.xml +++ b/doc/classes/Physics2DServer.xml @@ -24,6 +24,16 @@ Adds a shape to the area, along with a transform matrix. Shapes are usually referenced by their index, so you should track which shape has a given index. </description> </method> + <method name="area_attach_canvas_instance_id"> + <return type="void"> + </return> + <argument index="0" name="area" type="RID"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </method> <method name="area_attach_object_instance_id"> <return type="void"> </return> @@ -51,6 +61,14 @@ Creates an [Area2D]. </description> </method> + <method name="area_get_canvas_instance_id" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="area" type="RID"> + </argument> + <description> + </description> + </method> <method name="area_get_object_instance_id" qualifiers="const"> <return type="int"> </return> @@ -377,6 +395,16 @@ <description> </description> </method> + <method name="body_attach_canvas_instance_id"> + <return type="void"> + </return> + <argument index="0" name="body" type="RID"> + </argument> + <argument index="1" name="id" type="int"> + </argument> + <description> + </description> + </method> <method name="body_attach_object_instance_id"> <return type="void"> </return> @@ -404,6 +432,14 @@ Creates a physics body. The first parameter can be any value from constants BODY_MODE*, for the type of body created. Additionally, the body can be created in sleeping state to save processing time. </description> </method> + <method name="body_get_canvas_instance_id" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="body" type="RID"> + </argument> + <description> + </description> + </method> <method name="body_get_collision_layer" qualifiers="const"> <return type="int"> </return> diff --git a/doc/classes/PhysicsBody.xml b/doc/classes/PhysicsBody.xml index af00027ed3..2658732f84 100644 --- a/doc/classes/PhysicsBody.xml +++ b/doc/classes/PhysicsBody.xml @@ -7,7 +7,7 @@ PhysicsBody is an abstract base class for implementing a physics body. All *Body types inherit from it. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> @@ -21,6 +21,13 @@ Adds a body to the list of bodies that this body can't collide with. </description> </method> + <method name="get_collision_exceptions"> + <return type="Array"> + </return> + <description> + Returns an array of nodes that were added as collision exceptions for this body. + </description> + </method> <method name="get_collision_layer_bit" qualifiers="const"> <return type="bool"> </return> diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml index 4278979049..f848b6df70 100644 --- a/doc/classes/PhysicsBody2D.xml +++ b/doc/classes/PhysicsBody2D.xml @@ -7,7 +7,7 @@ PhysicsBody2D is an abstract base class for implementing a physics body. All *Body2D types inherit from it. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> @@ -21,6 +21,13 @@ Adds a body to the list of bodies that this body can't collide with. </description> </method> + <method name="get_collision_exceptions"> + <return type="Array"> + </return> + <description> + Returns an array of nodes that were added as collision exceptions for this body. + </description> + </method> <method name="get_collision_layer_bit" qualifiers="const"> <return type="bool"> </return> diff --git a/doc/classes/PhysicsDirectSpaceState.xml b/doc/classes/PhysicsDirectSpaceState.xml index 1fd00fa21c..350a9ed3ce 100644 --- a/doc/classes/PhysicsDirectSpaceState.xml +++ b/doc/classes/PhysicsDirectSpaceState.xml @@ -7,7 +7,7 @@ Direct access object to a space in the [PhysicsServer]. It's used mainly to do queries against objects and areas residing in a given space. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/ray-casting.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/PhysicsServer.xml b/doc/classes/PhysicsServer.xml index f79baea0be..7dfc8e66d4 100644 --- a/doc/classes/PhysicsServer.xml +++ b/doc/classes/PhysicsServer.xml @@ -1260,7 +1260,7 @@ The higher, the stronger. </constant> <constant name="PIN_JOINT_IMPULSE_CLAMP" value="2" enum="PinJointParam"> - If above 0, this value is the maximum value for an impulse that this Joint puts on it's ends. + If above 0, this value is the maximum value for an impulse that this Joint puts on its ends. </constant> <constant name="HINGE_JOINT_BIAS" value="0" enum="HingeJointParam"> The speed with which the two bodies get pulled together when they move in different directions. @@ -1401,31 +1401,31 @@ <constant name="G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT" value="6" enum="G6DOFJointAxisParam"> The maximum force that the linear motor can apply while trying to reach the target velocity. </constant> - <constant name="G6DOF_JOINT_ANGULAR_LOWER_LIMIT" value="7" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_LOWER_LIMIT" value="10" enum="G6DOFJointAxisParam"> The minimum rotation in negative direction to break loose and rotate around the axes. </constant> - <constant name="G6DOF_JOINT_ANGULAR_UPPER_LIMIT" value="8" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_UPPER_LIMIT" value="11" enum="G6DOFJointAxisParam"> The minimum rotation in positive direction to break loose and rotate around the axes. </constant> - <constant name="G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS" value="9" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS" value="12" enum="G6DOFJointAxisParam"> A factor that gets multiplied onto all rotations across the axes. </constant> - <constant name="G6DOF_JOINT_ANGULAR_DAMPING" value="10" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_DAMPING" value="13" enum="G6DOFJointAxisParam"> The amount of rotational damping across the axes. The lower, the more dampening occurs. </constant> - <constant name="G6DOF_JOINT_ANGULAR_RESTITUTION" value="11" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_RESTITUTION" value="14" enum="G6DOFJointAxisParam"> The amount of rotational restitution across the axes. The lower, the more restitution occurs. </constant> - <constant name="G6DOF_JOINT_ANGULAR_FORCE_LIMIT" value="12" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_FORCE_LIMIT" value="15" enum="G6DOFJointAxisParam"> The maximum amount of force that can occur, when rotating around the axes. </constant> - <constant name="G6DOF_JOINT_ANGULAR_ERP" value="13" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_ERP" value="16" enum="G6DOFJointAxisParam"> When correcting the crossing of limits in rotation across the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower. </constant> - <constant name="G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY" value="14" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY" value="17" enum="G6DOFJointAxisParam"> Target speed for the motor at the axes. </constant> - <constant name="G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT" value="15" enum="G6DOFJointAxisParam"> + <constant name="G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT" value="18" enum="G6DOFJointAxisParam"> Maximum acceleration for the motor at the axes. </constant> <constant name="G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT" value="0" enum="G6DOFJointAxisFlag"> @@ -1434,10 +1434,10 @@ <constant name="G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT" value="1" enum="G6DOFJointAxisFlag"> If [code]set[/code] there is rotational motion possible. </constant> - <constant name="G6DOF_JOINT_FLAG_ENABLE_MOTOR" value="2" enum="G6DOFJointAxisFlag"> + <constant name="G6DOF_JOINT_FLAG_ENABLE_MOTOR" value="4" enum="G6DOFJointAxisFlag"> If [code]set[/code] there is a rotational motor across these axes. </constant> - <constant name="G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR" value="3" enum="G6DOFJointAxisFlag"> + <constant name="G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR" value="5" enum="G6DOFJointAxisFlag"> If [code]set[/code] there is a linear motor on this axis that targets a specific velocity. </constant> <constant name="SHAPE_PLANE" value="0" enum="ShapeType"> diff --git a/doc/classes/Plane.xml b/doc/classes/Plane.xml index 3d5eada066..a57659abda 100644 --- a/doc/classes/Plane.xml +++ b/doc/classes/Plane.xml @@ -7,7 +7,7 @@ Plane represents a normalized plane equation. Basically, "normal" is the normal of the plane (a,b,c normalized), and "d" is the distance from the origin to the plane (in the direction of "normal"). "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/math/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 0b7c0a63ad..7a9918237f 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -102,7 +102,7 @@ <argument index="0" name="name" type="String"> </argument> <description> - Returns true if the specified property exists and its initial value differs from the current value. + Returns true if the specified property exists and its initial value differs from the current value. </description> </method> <method name="property_get_revert"> @@ -111,14 +111,14 @@ <argument index="0" name="name" type="String"> </argument> <description> - Returns the initial value of the specified property. Returns null if the property does not exist. + Returns the initial value of the specified property. Returns null if the property does not exist. </description> </method> <method name="save"> <return type="int" enum="Error"> </return> <description> - Saves the configuration to the project.godot file. + Saves the configuration to the project.godot file. </description> </method> <method name="save_custom"> @@ -127,7 +127,7 @@ <argument index="0" name="file" type="String"> </argument> <description> - Saves the configuration to a custom file. + Saves the configuration to a custom file. </description> </method> <method name="set_initial_value"> @@ -182,7 +182,7 @@ Name of the project. It is used from both project manager and by the exporters. Overriding this as name.locale allows setting it in multiple languages. </member> <member name="application/config/use_custom_user_dir" type="bool" setter="" getter=""> - Allow the project to save to it's own custom user dir (in AppData on windows or ~/.config on unixes). This setting only works for desktop exporters. A name must be set in the "custom_user_dir_name" setting for this to take effect. + Allow the project to save to its own custom user dir (in AppData on windows or ~/.config on unixes). This setting only works for desktop exporters. A name must be set in the "custom_user_dir_name" setting for this to take effect. </member> <member name="application/run/disable_stderr" type="bool" setter="" getter=""> Disable printing to stderr on exported build. @@ -232,6 +232,8 @@ </member> <member name="compression/formats/zstd/window_log_size" type="int" setter="" getter=""> </member> + <member name="debug/gdscript/completion/autocomplete_setters_and_getters" type="bool" setter="" getter=""> + </member> <member name="debug/gdscript/warnings/constant_used_as_function" type="bool" setter="" getter=""> </member> <member name="debug/gdscript/warnings/deprecated_keyword" type="bool" setter="" getter=""> @@ -374,7 +376,7 @@ <member name="gui/timers/incremental_search_max_interval_msec" type="int" setter="" getter=""> Timer setting for incremental search in Tree, IntemList, etc. controls. </member> - <member name="gui/timers/text_edit_idle_detect_sec" type="int" setter="" getter=""> + <member name="gui/timers/text_edit_idle_detect_sec" type="float" setter="" getter=""> Timer for detecting idle in the editor. </member> <member name="input/ui_accept" type="Dictionary" setter="" getter=""> @@ -586,14 +588,6 @@ <member name="memory/limits/multithreaded_server/rid_pool_prealloc" type="int" setter="" getter=""> This is used by servers when used in multi threading mode (servers and visual). RIDs are preallocated to avoid stalling the server requesting them on threads. If servers get stalled too often when loading resources in a thread, increase this number. </member> - <member name="mono/debugger_agent/port" type="int" setter="" getter=""> - </member> - <member name="mono/debugger_agent/wait_for_debugger" type="bool" setter="" getter=""> - </member> - <member name="mono/debugger_agent/wait_timeout" type="int" setter="" getter=""> - </member> - <member name="mono/export/include_scripts_content" type="bool" setter="" getter=""> - </member> <member name="network/limits/debugger_stdout/max_chars_per_second" type="int" setter="" getter=""> 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. </member> @@ -606,8 +600,21 @@ <member name="network/limits/packet_peer_stream/max_buffer_po2" type="int" setter="" getter=""> Default size of packet peer stream for deserializing godot data. Over this size, data is dropped. </member> - <member name="network/remote_fs/max_pages" type="int" setter="" getter=""> - Maximum amount of pages used for remote filesystem (used by debugging). + <member name="network/limits/websocket_client/max_in_buffer_kb" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_client/max_in_packets" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_client/max_out_buffer_kb" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_client/max_out_packets" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_server/max_in_buffer_kb" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_server/max_in_packets" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_server/max_out_buffer_kb" type="int" setter="" getter=""> + </member> + <member name="network/limits/websocket_server/max_out_packets" type="int" setter="" getter=""> </member> <member name="network/remote_fs/page_read_ahead" type="int" setter="" getter=""> Amount of read ahead used by remote filesystem. Improves latency. @@ -654,7 +661,7 @@ <member name="rendering/limits/rendering/max_renderable_elements" type="int" setter="" getter=""> Max amount of elements renderable in a frame. If more than this are visible per frame, they will be dropped. Keep in mind elements refer to mesh surfaces and not mesh themselves. </member> - <member name="rendering/limits/time/time_rollover_secs" type="int" setter="" getter=""> + <member name="rendering/limits/time/time_rollover_secs" type="float" setter="" getter=""> Shaders have a time variable that constantly increases. At some point it needs to be rolled back to zero to avoid numerical errors on shader animations. This setting specifies when. </member> <member name="rendering/quality/2d/use_pixel_snap" type="bool" setter="" getter=""> @@ -693,12 +700,20 @@ <member name="rendering/quality/reflections/high_quality_ggx.mobile" type="bool" setter="" getter=""> </member> <member name="rendering/quality/reflections/texture_array_reflections" type="bool" setter="" getter=""> - For reflection probes and panorama backgrounds (sky), use a texure array instead of mipmaps. This reduces jitter noise on reflections, but costs more performance and memory. + For reflection probes and panorama backgrounds (sky), use a texture array instead of mipmaps. This reduces jitter noise on reflections, but costs more performance and memory. </member> <member name="rendering/quality/reflections/texture_array_reflections.mobile" type="bool" setter="" getter=""> </member> + <member name="rendering/quality/shading/force_blinn_over_ggx" type="bool" setter="" getter=""> + </member> + <member name="rendering/quality/shading/force_blinn_over_ggx.mobile" type="bool" setter="" getter=""> + </member> + <member name="rendering/quality/shading/force_lambert_over_burley" type="bool" setter="" getter=""> + </member> + <member name="rendering/quality/shading/force_lambert_over_burley.mobile" type="bool" setter="" getter=""> + </member> <member name="rendering/quality/shading/force_vertex_shading" type="bool" setter="" getter=""> - Force vertex shading for all rendering. This can increase performance a lot, but also reduces quality inmensely. Can work to optimize on very low end mobile. + Force vertex shading for all rendering. This can increase performance a lot, but also reduces quality immensely. Can work to optimize on very low end mobile. </member> <member name="rendering/quality/shading/force_vertex_shading.mobile" type="bool" setter="" getter=""> </member> diff --git a/doc/classes/Quat.xml b/doc/classes/Quat.xml index 67631bbc92..468839dfba 100644 --- a/doc/classes/Quat.xml +++ b/doc/classes/Quat.xml @@ -9,8 +9,8 @@ Quaternions need to be (re)normalized. </description> <tutorials> - <link>http://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link> - <link>http://docs.godotengine.org/en/latest/tutorials/math/rotations.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/rotations.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/RandomNumberGenerator.xml b/doc/classes/RandomNumberGenerator.xml new file mode 100644 index 0000000000..aee9654561 --- /dev/null +++ b/doc/classes/RandomNumberGenerator.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="RandomNumberGenerator" inherits="Reference" category="Core" version="3.1"> + <brief_description> + A class for generation pseudo-random numbers. + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="rand_range"> + <return type="float"> + </return> + <argument index="0" name="from" type="float"> + </argument> + <argument index="1" name="to" type="float"> + </argument> + <description> + Generates pseudo-random float between [code]from[/code] and [code]to[/code]. + </description> + </method> + <method name="randf"> + <return type="float"> + </return> + <description> + Generates pseudo-random float between '0.0' and '1.0'. + </description> + </method> + <method name="randi"> + <return type="int"> + </return> + <description> + Generates pseudo-random 32-bit integer between '0' and '4294967295'. + </description> + </method> + <method name="randomize"> + <return type="void"> + </return> + <description> + Setups a time-based seed to generator. + </description> + </method> + </methods> + <members> + <member name="seed" type="int" setter="set_seed" getter="get_seed"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml index 1eea940da9..1392e53f8d 100644 --- a/doc/classes/Rect2.xml +++ b/doc/classes/Rect2.xml @@ -7,7 +7,7 @@ Rect2 consists of a position, a size, and several utility functions. It is typically used for fast overlap tests. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/math/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml index a9a897ebaf..7662f72eca 100644 --- a/doc/classes/ReflectionProbe.xml +++ b/doc/classes/ReflectionProbe.xml @@ -5,7 +5,7 @@ <description> </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/reflection_probes.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/ResourceSaver.xml b/doc/classes/ResourceSaver.xml index bf3ea95bce..f388667891 100644 --- a/doc/classes/ResourceSaver.xml +++ b/doc/classes/ResourceSaver.xml @@ -47,5 +47,7 @@ </constant> <constant name="FLAG_COMPRESS" value="32" enum="SaverFlags"> </constant> + <constant name="FLAG_REPLACE_SUBRESOURCE_PATHS" value="64" enum="SaverFlags"> + </constant> </constants> </class> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 618f2f42b2..145ce7537b 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -8,7 +8,7 @@ Note that assignments to [member bbcode_text] clear the tag stack and reconstruct it from the property's contents. Any edits made to [member bbcode_text] will erase previous edits made from other manual sources such as [method append_bbcode] and the [code]push_*[/code] / [method pop] methods. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/gui/bbcode_in_richtextlabel.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel.html</link> </tutorials> <demos> </demos> @@ -111,7 +111,7 @@ <argument index="0" name="align" type="int" enum="RichTextLabel.Align"> </argument> <description> - Adds a [code][right][/code] tag to the tag stack. + Adds an alignment tag based on the given [code]align[/code] value. See [enum Align] for possible values. </description> </method> <method name="push_cell"> @@ -166,6 +166,13 @@ Adds a meta tag to the tag stack. Similar to the bbcode [code][url=something]{text}[/url][/code], but supports non-[String] metadata types. </description> </method> + <method name="push_strikethrough"> + <return type="void"> + </return> + <description> + Adds a [code][s][/code] tag to the tag stack. + </description> + </method> <method name="push_table"> <return type="void"> </return> @@ -304,15 +311,17 @@ </constant> <constant name="ITEM_UNDERLINE" value="6" enum="ItemType"> </constant> - <constant name="ITEM_ALIGN" value="7" enum="ItemType"> + <constant name="ITEM_STRIKETHROUGH" value="7" enum="ItemType"> + </constant> + <constant name="ITEM_ALIGN" value="8" enum="ItemType"> </constant> - <constant name="ITEM_INDENT" value="8" enum="ItemType"> + <constant name="ITEM_INDENT" value="9" enum="ItemType"> </constant> - <constant name="ITEM_LIST" value="9" enum="ItemType"> + <constant name="ITEM_LIST" value="10" enum="ItemType"> </constant> - <constant name="ITEM_TABLE" value="10" enum="ItemType"> + <constant name="ITEM_TABLE" value="11" enum="ItemType"> </constant> - <constant name="ITEM_META" value="11" enum="ItemType"> + <constant name="ITEM_META" value="12" enum="ItemType"> </constant> </constants> <theme_items> diff --git a/doc/classes/RigidBody.xml b/doc/classes/RigidBody.xml index f9e0f821a9..4ff332402b 100644 --- a/doc/classes/RigidBody.xml +++ b/doc/classes/RigidBody.xml @@ -10,7 +10,7 @@ If you need to override the default physics behavior, you can write a custom force integration. See [member custom_integrator]. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> @@ -60,8 +60,8 @@ <argument index="0" name="impulse" type="Vector3"> </argument> <description> - Applies a single directional impulse without affecting rotation. - This is equivalent to ``apply_impulse(Vector3(0,0,0), impulse)``. + Applies a directional impulse without affecting rotation. + This is equivalent to [code]apply_impulse(Vector3(0,0,0), impulse)[/code]. </description> </method> <method name="apply_impulse"> @@ -72,7 +72,7 @@ <argument index="1" name="impulse" type="Vector3"> </argument> <description> - Apply a positioned impulse (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied once, and only once. Both the impulse and the position are in global coordinates, and the position is relative to the object's origin. + Applies a positioned impulse which will be affected by the body mass and shape. This is the equivalent of hitting a billiard ball with a cue: a force that is applied once, and only once. Both the impulse and the position are in global coordinates, and the position is relative to the object's origin. </description> </method> <method name="apply_torque_impulse"> @@ -81,14 +81,14 @@ <argument index="0" name="impulse" type="Vector3"> </argument> <description> - Apply a torque impulse (which will be affected by the body mass and shape). This will rotate the body around the passed in vector. + Applies a torque impulse which will be affected by the body mass and shape. This will rotate the body around the passed in vector. </description> </method> <method name="get_colliding_bodies" qualifiers="const"> <return type="Array"> </return> <description> - Return a list of the bodies colliding with this one. By default, number of max contacts reported is at 0 , see [method set_max_contacts_reported] to increase it. Note that the result of this test is not immediate after moving objects. For performance, list of collisions is updated once per frame and before the physics step. Consider using signals instead. + Return a list of the bodies colliding with this one. By default, number of max contacts reported is at 0 , see [method set_max_contacts_reported] to increase it. Note that the result of this test is not immediate after moving objects. For performance, list of collisions is updated once per frame and before the physics step. Consider using signals instead. </description> </method> <method name="set_axis_velocity"> @@ -97,7 +97,7 @@ <argument index="0" name="axis_velocity" type="Vector3"> </argument> <description> - Set an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. + Sets an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior. </description> </method> </methods> @@ -109,16 +109,22 @@ RigidBody's rotational velocity. </member> <member name="axis_lock_angular_x" type="bool" setter="set_axis_lock" getter="get_axis_lock"> + Lock the body's rotation in the x-axis. </member> <member name="axis_lock_angular_y" type="bool" setter="set_axis_lock" getter="get_axis_lock"> + Lock the body's rotation in the y-axis. </member> <member name="axis_lock_angular_z" type="bool" setter="set_axis_lock" getter="get_axis_lock"> + Lock the body's rotation in the z-axis. </member> <member name="axis_lock_linear_x" type="bool" setter="set_axis_lock" getter="get_axis_lock"> + Lock the body's movement in the x-axis. </member> <member name="axis_lock_linear_y" type="bool" setter="set_axis_lock" getter="get_axis_lock"> + Lock the body's movement in the x-axis. </member> <member name="axis_lock_linear_z" type="bool" setter="set_axis_lock" getter="get_axis_lock"> + Lock the body's movement in the x-axis. </member> <member name="bounce" type="float" setter="set_bounce" getter="get_bounce"> RigidBody's bounciness. @@ -127,7 +133,7 @@ If [code]true[/code] the RigidBody will not calculate forces and will act as a static body while there is no movement. It will wake up when forces are applied through other collisions or when the [code]apply_impulse[/code] method is used. </member> <member name="contact_monitor" type="bool" setter="set_contact_monitor" getter="is_contact_monitor_enabled"> - If true, the RigidBody will emit signals when it collides with another RigidBody. + If [code]true[/code] the RigidBody will emit signals when it collides with another RigidBody. </member> <member name="contacts_reported" type="int" setter="set_max_contacts_reported" getter="get_max_contacts_reported"> The maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0. @@ -140,19 +146,19 @@ If [code]true[/code] internal force integration will be disabled (like gravity or air friction) for this body. Other than collision response, the body will only move as determined by the [method _integrate_forces] function, if defined. </member> <member name="friction" type="float" setter="set_friction" getter="get_friction"> - The body friction, from 0 (frictionless) to 1 (max friction). + The body's friction, from 0 (frictionless) to 1 (max friction). </member> <member name="gravity_scale" type="float" setter="set_gravity_scale" getter="get_gravity_scale"> This is multiplied by the global 3D gravity setting found in "Project > Project Settings > Physics > 3d" to produce RigidBody's gravity. E.g. a value of 1 will be normal gravity, 2 will apply double gravity, and 0.5 will apply half gravity to this object. </member> <member name="linear_damp" type="float" setter="set_linear_damp" getter="get_linear_damp"> - RigidBody's linear damp. Default value: -1, cannot be less than -1. If this value is different from -1, any linear damp derived from the world or areas will be overridden. + The body's linear damp. Default value: -1, cannot be less than -1. If this value is different from -1, any linear damp derived from the world or areas will be overridden. </member> <member name="linear_velocity" type="Vector3" setter="set_linear_velocity" getter="get_linear_velocity"> - RigidBody's linear velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may run in another thread and runs at a different granularity. Use [method _integrate_forces] as your process loop for precise control of the body state. + The body's linear velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may run in another thread and runs at a different granularity. Use [method _integrate_forces] as your process loop for precise control of the body state. </member> <member name="mass" type="float" setter="set_mass" getter="get_mass"> - RigidBody's mass. + The body's mass. </member> <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="RigidBody.Mode"> The body mode from the MODE_* enum. Modes include: MODE_STATIC, MODE_KINEMATIC, MODE_RIGID, and MODE_CHARACTER. @@ -160,10 +166,10 @@ <member name="physics_material_override" type="PhysicsMaterial" setter="set_physics_material_override" getter="get_physics_material_override"> </member> <member name="sleeping" type="bool" setter="set_sleeping" getter="is_sleeping"> - If [code]true[/code] RigidBody is sleeping and will not calculate forces until woken up by a collision or the [code]apply_impulse[/code] method. + If [code]true[/code] the body is sleeping and will not calculate forces until woken up by a collision or the [code]apply_impulse[/code] method. </member> <member name="weight" type="float" setter="set_weight" getter="get_weight"> - RigidBody's weight based on its mass and the global 3D gravity. Global values are set in "Project > Project Settings > Physics > 3d". + The body's weight based on its mass and the global 3D gravity. Global values are set in "Project > Project Settings > Physics > 3d". </member> </members> <signals> @@ -217,16 +223,16 @@ </signals> <constants> <constant name="MODE_RIGID" value="0" enum="Mode"> - Rigid body. This is the "natural" state of a rigid body. It is affected by forces, and can move, rotate, and be affected by user code. + Rigid body mode. This is the "natural" state of a rigid body. It is affected by forces, and can move, rotate, and be affected by user code. </constant> <constant name="MODE_STATIC" value="1" enum="Mode"> Static mode. The body behaves like a [StaticBody], and can only move by user code. </constant> <constant name="MODE_CHARACTER" value="2" enum="Mode"> - Character body. This behaves like a rigid body, but can not rotate. + Character body mode. This behaves like a rigid body, but can not rotate. </constant> <constant name="MODE_KINEMATIC" value="3" enum="Mode"> - Kinematic body. The body behaves like a [KinematicBody], and can only move by user code. + Kinematic body mode. The body behaves like a [KinematicBody], and can only move by user code. </constant> </constants> </class> diff --git a/doc/classes/RigidBody2D.xml b/doc/classes/RigidBody2D.xml index 1f6b3934c2..079440ab8b 100644 --- a/doc/classes/RigidBody2D.xml +++ b/doc/classes/RigidBody2D.xml @@ -29,6 +29,7 @@ <argument index="0" name="force" type="Vector2"> </argument> <description> + Adds a constant directional force without affecting rotation. </description> </method> <method name="add_force"> @@ -48,6 +49,7 @@ <argument index="0" name="torque" type="float"> </argument> <description> + Adds a constant rotational force. </description> </method> <method name="apply_central_impulse"> @@ -56,6 +58,7 @@ <argument index="0" name="impulse" type="Vector2"> </argument> <description> + Applies a directional impulse without affecting rotation. </description> </method> <method name="apply_impulse"> @@ -75,6 +78,7 @@ <argument index="0" name="torque" type="float"> </argument> <description> + Applies a rotational impulse to the body. </description> </method> <method name="get_colliding_bodies" qualifiers="const"> diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index 1985845552..dd94ee66d2 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -7,8 +7,8 @@ As one of the most important classes, the [code]SceneTree[/code] manages the hierarchy of nodes in a scene as well as scenes themselves. Nodes can be added, retrieved and removed. The whole scene tree (and thus the current scene) can be paused. Scenes can be loaded, switched and reloaded. You can also use the SceneTree to organize your nodes into groups: every node can be assigned as many groups as you want to create, e.g. a "enemy" group. You can then iterate these groups or even call methods and set properties on all the group's members at once. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/step_by_step/scene_tree.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/viewports/multiple_resolutions.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/scene_tree.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/viewports/multiple_resolutions.html</link> </tutorials> <demos> </demos> @@ -278,6 +278,10 @@ </member> <member name="paused" type="bool" setter="set_pause" getter="is_paused"> If [code]true[/code] the SceneTree is paused. + Doing so will have the following behavior: + * 2D and 3D physics will be stopped. + * _process and _physics_process will not be called anymore in nodes. + * _input and _input_event will not be called anymore either. </member> <member name="refuse_new_network_connections" type="bool" setter="set_refuse_new_network_connections" getter="is_refusing_new_network_connections"> If [code]true[/code] the SceneTree's [member network_peer] refuses new incoming connections. diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index 128d7475cc..ec1d544c03 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -8,7 +8,7 @@ The [code]new[/code] method of a script subclass creates a new instance. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/step_by_step/scripting.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/scripting.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/ScriptCreateDialog.xml b/doc/classes/ScriptCreateDialog.xml index 3de068dbcb..67ce9a8e87 100644 --- a/doc/classes/ScriptCreateDialog.xml +++ b/doc/classes/ScriptCreateDialog.xml @@ -24,6 +24,8 @@ </argument> <argument index="1" name="path" type="String"> </argument> + <argument index="2" name="built_in_enabled" type="bool" default="true"> + </argument> <description> Prefills required fields to configure the ScriptCreateDialog for use. </description> diff --git a/doc/classes/Shader.xml b/doc/classes/Shader.xml index 7f9a124683..dd6a023af4 100644 --- a/doc/classes/Shader.xml +++ b/doc/classes/Shader.xml @@ -7,7 +7,7 @@ This class allows you to define a custom shader program that can be used for various materials to render objects. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/shading/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/shading/index.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Shape.xml b/doc/classes/Shape.xml index bc1a429418..6e51d3156f 100644 --- a/doc/classes/Shape.xml +++ b/doc/classes/Shape.xml @@ -7,7 +7,7 @@ Base class for all 3D shape resources. Nodes that inherit from this can be used as shapes for a [PhysicsBody] or [Area] objects. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml index 2772538cec..96b8a77d9e 100644 --- a/doc/classes/Shape2D.xml +++ b/doc/classes/Shape2D.xml @@ -7,7 +7,7 @@ Base class for all 2D Shapes. All 2D shape types inherit from this. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/SkeletonIK.xml b/doc/classes/SkeletonIK.xml index 50246f1b18..e720ff8f52 100644 --- a/doc/classes/SkeletonIK.xml +++ b/doc/classes/SkeletonIK.xml @@ -45,6 +45,8 @@ </member> <member name="min_distance" type="float" setter="set_min_distance" getter="get_min_distance"> </member> + <member name="override_tip_basis" type="bool" setter="set_override_tip_basis" getter="is_override_tip_basis"> + </member> <member name="root_bone" type="String" setter="set_root_bone" getter="get_root_bone"> </member> <member name="target" type="Transform" setter="set_target_transform" getter="get_target_transform"> diff --git a/doc/classes/SoftBody.xml b/doc/classes/SoftBody.xml index 196d29fc60..6c3929d65b 100644 --- a/doc/classes/SoftBody.xml +++ b/doc/classes/SoftBody.xml @@ -20,6 +20,13 @@ Adds a body to the list of bodies that this body can't collide with. </description> </method> + <method name="get_collision_exceptions"> + <return type="Array"> + </return> + <description> + Returns an array of nodes that were added as collision exceptions for this body. + </description> + </method> <method name="get_collision_layer_bit" qualifiers="const"> <return type="bool"> </return> diff --git a/doc/classes/Spatial.xml b/doc/classes/Spatial.xml index 7fd7b5deed..6f9d779737 100644 --- a/doc/classes/Spatial.xml +++ b/doc/classes/Spatial.xml @@ -8,7 +8,7 @@ Affine operations (rotate, scale, translate) happen in parent's local coordinate system, unless the Spatial object is set as top level. Affine operations in this coordinate system correspond to direct affine operations on the Spatial's transform. The word local below refers to this coordinate system. The coordinate system that is attached to the Spatial object itself is referred to as object-local coordinate system. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/introduction_to_3d.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/SpatialMaterial.xml b/doc/classes/SpatialMaterial.xml index 354c6686bb..3503505999 100644 --- a/doc/classes/SpatialMaterial.xml +++ b/doc/classes/SpatialMaterial.xml @@ -1,11 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="SpatialMaterial" inherits="Material" category="Core" version="3.1"> <brief_description> + Default 3D rendering material. </brief_description> <description> + This provides a default material with a wide variety of rendering features and properties without the need to write shader code. See the tutorial below for details. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/spatial_material.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html</link> </tutorials> <demos> </demos> @@ -13,16 +15,20 @@ </methods> <members> <member name="albedo_color" type="Color" setter="set_albedo" getter="get_albedo"> + The material's base color. </member> <member name="albedo_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> <member name="anisotropy" type="float" setter="set_anisotropy" getter="get_anisotropy"> + The strength of the anisotropy effect. </member> <member name="anisotropy_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] anisotropy is enabled. Changes the shape of the specular blob and aligns it to tangent space. Default value: [code]false[/code]. </member> <member name="anisotropy_flowmap" type="Texture" setter="set_texture" getter="get_texture"> </member> <member name="ao_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] ambient occlusion is enabled. </member> <member name="ao_light_affect" type="float" setter="set_ao_light_affect" getter="get_ao_light_affect"> </member> @@ -35,6 +41,7 @@ <member name="clearcoat" type="float" setter="set_clearcoat" getter="get_clearcoat"> </member> <member name="clearcoat_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] clearcoat rendering is enabled. Adds a secondary transparent pass to the material. Default value: [code]false[/code]. </member> <member name="clearcoat_gloss" type="float" setter="set_clearcoat_gloss" getter="get_clearcoat_gloss"> </member> @@ -43,6 +50,11 @@ <member name="depth_deep_parallax" type="bool" setter="set_depth_deep_parallax" getter="is_depth_deep_parallax_enabled"> </member> <member name="depth_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] Depth mapping is enabled. See also [member normal_enabled]. + </member> + <member name="depth_flip_binormal" type="bool" setter="set_depth_deep_parallax_flip_binormal" getter="get_depth_deep_parallax_flip_binormal"> + </member> + <member name="depth_flip_tangent" type="bool" setter="set_depth_deep_parallax_flip_tangent" getter="get_depth_deep_parallax_flip_tangent"> </member> <member name="depth_max_layers" type="int" setter="set_depth_deep_parallax_max_layers" getter="get_depth_deep_parallax_max_layers"> </member> @@ -71,10 +83,13 @@ <member name="distance_fade_mode" type="int" setter="set_distance_fade" getter="get_distance_fade" enum="SpatialMaterial.DistanceFadeMode"> </member> <member name="emission" type="Color" setter="set_emission" getter="get_emission"> + The emitted light's color. See [member emission_enabled]. </member> <member name="emission_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] the body emits light. </member> <member name="emission_energy" type="float" setter="set_emission_energy" getter="get_emission_energy"> + The emitted light's strength. See [member emission_enabled]. </member> <member name="emission_on_uv2" type="bool" setter="set_flag" getter="get_flag"> </member> @@ -85,36 +100,49 @@ <member name="flags_albedo_tex_force_srgb" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="flags_disable_ambient_light" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the object receives no ambient light. Default value: [code]false[/code]. </member> <member name="flags_do_not_receive_shadows" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the object receives no shadow that would otherwise be cast onto it. Default value: [code]false[/code]. </member> <member name="flags_ensure_correct_normals" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="flags_fixed_size" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the object is rendered at the same size regardless of distance. Default value: [code]false[/code]. </member> <member name="flags_no_depth_test" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] depth testing is disabled and the object will be drawn in render order. </member> <member name="flags_transparent" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] transparency is enabled on the body. Default value: [code]false[/code]. See also [member params_blend_mode]. </member> <member name="flags_unshaded" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the object is unaffected by lighting. Default value: [code]false[/code]. </member> <member name="flags_use_point_size" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] render point size can be changed. Note: this is only effective for objects whose geometry is point-based rather than triangle-based. See also [member params_point_size]. </member> <member name="flags_vertex_lighting" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] lighting is calculated per vertex rather than per pixel. This may increase performance on low-end devices. Default value: [code]false[/code]. </member> <member name="flags_world_triplanar" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] triplanar mapping is calculated in world space rather than object local space. See also [member uv1_triplanar]. Default value: [code]false[/code]. </member> <member name="metallic" type="float" setter="set_metallic" getter="get_metallic"> + The reflectivity of the object's surface. The higher the value the more light is reflected. </member> <member name="metallic_specular" type="float" setter="set_specular" getter="get_specular"> + General reflectivity amount. Note: unlike [member metallic], this is not energy-conserving, so it should be left at [code]0.5[/code] in most cases. See also [member roughness]. </member> <member name="metallic_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> <member name="metallic_texture_channel" type="int" setter="set_metallic_texture_channel" getter="get_metallic_texture_channel" enum="SpatialMaterial.TextureChannel"> </member> <member name="normal_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] normal mapping is enabled. </member> <member name="normal_scale" type="float" setter="set_normal_scale" getter="get_normal_scale"> + The strength of the normal map's effect. </member> <member name="normal_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> @@ -123,40 +151,55 @@ <member name="params_billboard_keep_scale" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="params_billboard_mode" type="int" setter="set_billboard_mode" getter="get_billboard_mode" enum="SpatialMaterial.BillboardMode"> + Controls how the object faces the camera. See [enum BillboardMode]. </member> <member name="params_blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="SpatialMaterial.BlendMode"> + The material's blend mode. Note that values other than [code]Mix[/code] force the object into the transparent pipeline. See [enum BlendMode]. </member> <member name="params_cull_mode" type="int" setter="set_cull_mode" getter="get_cull_mode" enum="SpatialMaterial.CullMode"> + Which side of the object is not drawn when backfaces are rendered. See [enum CullMode]. </member> <member name="params_depth_draw_mode" type="int" setter="set_depth_draw_mode" getter="get_depth_draw_mode" enum="SpatialMaterial.DepthDrawMode"> + Determines when depth rendering takes place. See [enum DepthDrawMode]. See also [member flags_transparent]. </member> <member name="params_diffuse_mode" type="int" setter="set_diffuse_mode" getter="get_diffuse_mode" enum="SpatialMaterial.DiffuseMode"> + The algorithm used for diffuse light scattering. See [enum DiffuseMode]. </member> <member name="params_grow" type="bool" setter="set_grow_enabled" getter="is_grow_enabled"> + If [code]true[/code] enables the vertex grow setting. See [member params_grow_amount]. </member> <member name="params_grow_amount" type="float" setter="set_grow" getter="get_grow"> + Grows object vertices in the direction of their normals. </member> <member name="params_line_width" type="float" setter="set_line_width" getter="get_line_width"> </member> <member name="params_point_size" type="float" setter="set_point_size" getter="get_point_size"> + The point size in pixels. See [member flags_use_point_size]. </member> <member name="params_specular_mode" type="int" setter="set_specular_mode" getter="get_specular_mode" enum="SpatialMaterial.SpecularMode"> + The method for rendering the specular blob. See [enum SpecularMode]. </member> <member name="params_use_alpha_scissor" type="bool" setter="set_flag" getter="get_flag"> </member> <member name="particles_anim_h_frames" type="int" setter="set_particles_anim_h_frames" getter="get_particles_anim_h_frames"> + The number of horizontal frames in the particle spritesheet. Only enabled when using [code]BillboardMode.BILLBOARD_PARTICLES[/code]. See [member params_billboard_mode]. </member> - <member name="particles_anim_loop" type="int" setter="set_particles_anim_loop" getter="get_particles_anim_loop"> + <member name="particles_anim_loop" type="bool" setter="set_particles_anim_loop" getter="get_particles_anim_loop"> + If [code]true[/code] particle animations are looped. Only enabled when using [code]BillboardMode.BILLBOARD_PARTICLES[/code]. See [member params_billboard_mode]. </member> <member name="particles_anim_v_frames" type="int" setter="set_particles_anim_v_frames" getter="get_particles_anim_v_frames"> + The number of vertical frames in the particle spritesheet. Only enabled when using [code]BillboardMode.BILLBOARD_PARTICLES[/code]. See [member params_billboard_mode]. </member> <member name="proximity_fade_distance" type="float" setter="set_proximity_fade_distance" getter="get_proximity_fade_distance"> </member> <member name="proximity_fade_enable" type="bool" setter="set_proximity_fade" getter="is_proximity_fade_enabled"> + If [code]true[/code] the proximity and distance fade effect is enabled. Default value: [code]false[/code]. </member> <member name="refraction_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] the refraction effect is enabled. Distorts transparency based on light from behind the object. Default value: [code]false[/code]. </member> <member name="refraction_scale" type="float" setter="set_refraction" getter="get_refraction"> + The strength of the refraction effect. </member> <member name="refraction_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> @@ -165,26 +208,33 @@ <member name="rim" type="float" setter="set_rim" getter="get_rim"> </member> <member name="rim_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] rim effect is enabled. Default value: [code]false[/code]. </member> <member name="rim_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> <member name="rim_tint" type="float" setter="set_rim_tint" getter="get_rim_tint"> + The amount of to blend light and albedo color when rendering rim effect. If [code]0[/code] the light color is used, while [code]1[/code] means albedo color is used. An intermediate value generally works best. </member> <member name="roughness" type="float" setter="set_roughness" getter="get_roughness"> + Surface reflection. A value of [code]0[/code] represents a perfect mirror while a value of [code]1[/code] completely blurs the reflection. See also [member metallic]. </member> <member name="roughness_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> <member name="roughness_texture_channel" type="int" setter="set_roughness_texture_channel" getter="get_roughness_texture_channel" enum="SpatialMaterial.TextureChannel"> </member> <member name="subsurf_scatter_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] subsurface scattering is enabled. Emulates light that penetrates an object's surface, is scattered, and then emerges. </member> <member name="subsurf_scatter_strength" type="float" setter="set_subsurface_scattering_strength" getter="get_subsurface_scattering_strength"> + The strength of the subsurface scattering effect. </member> <member name="subsurf_scatter_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> <member name="transmission" type="Color" setter="set_transmission" getter="get_transmission"> + The color used by the transmission effect. Represents the light passing through an object. </member> <member name="transmission_enabled" type="bool" setter="set_feature" getter="get_feature"> + If [code]true[/code] the transmission effect is enabled. Default value: [code]false[/code]. </member> <member name="transmission_texture" type="Texture" setter="set_texture" getter="get_texture"> </member> @@ -205,8 +255,10 @@ <member name="uv2_triplanar_sharpness" type="float" setter="set_uv2_triplanar_blend_sharpness" getter="get_uv2_triplanar_blend_sharpness"> </member> <member name="vertex_color_is_srgb" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the model's vertex colors are processed as sRGB mode. Default value: [code]false[/code]. </member> <member name="vertex_color_use_as_albedo" type="bool" setter="set_flag" getter="get_flag"> + If [code]true[/code] the vertex color is used as albedo color. Default value: [code]false[/code]. </member> </members> <constants> @@ -275,6 +327,7 @@ <constant name="FEATURE_MAX" value="12" enum="Feature"> </constant> <constant name="BLEND_MODE_MIX" value="0" enum="BlendMode"> + Default blend mode. </constant> <constant name="BLEND_MODE_ADD" value="1" enum="BlendMode"> </constant> @@ -283,18 +336,25 @@ <constant name="BLEND_MODE_MUL" value="3" enum="BlendMode"> </constant> <constant name="DEPTH_DRAW_OPAQUE_ONLY" value="0" enum="DepthDrawMode"> + Default depth draw mode. Depth is drawn only for opaque objects. </constant> <constant name="DEPTH_DRAW_ALWAYS" value="1" enum="DepthDrawMode"> + Depth draw is calculated for both opaque and transparent objects. </constant> <constant name="DEPTH_DRAW_DISABLED" value="2" enum="DepthDrawMode"> + No depth draw. </constant> <constant name="DEPTH_DRAW_ALPHA_OPAQUE_PREPASS" value="3" enum="DepthDrawMode"> + For transparent objects, an opaque pass is made first with the opaque parts, then transparency is drawn. </constant> <constant name="CULL_BACK" value="0" enum="CullMode"> + Default cull mode. The back of the object is culled when not visible. </constant> <constant name="CULL_FRONT" value="1" enum="CullMode"> + The front of the object is culled when not visible. </constant> <constant name="CULL_DISABLED" value="2" enum="CullMode"> + No culling is performed. </constant> <constant name="FLAG_UNSHADED" value="0" enum="Flags"> </constant> @@ -335,32 +395,46 @@ <constant name="FLAG_MAX" value="18" enum="Flags"> </constant> <constant name="DIFFUSE_BURLEY" value="0" enum="DiffuseMode"> + Default diffuse scattering algorithm. </constant> <constant name="DIFFUSE_LAMBERT" value="1" enum="DiffuseMode"> + Diffuse scattering ignores roughness. </constant> <constant name="DIFFUSE_LAMBERT_WRAP" value="2" enum="DiffuseMode"> + Extends Lambert to cover more than 90 degrees when roughness increases. </constant> <constant name="DIFFUSE_OREN_NAYAR" value="3" enum="DiffuseMode"> + Attempts to use roughness to emulate microsurfacing. </constant> <constant name="DIFFUSE_TOON" value="4" enum="DiffuseMode"> + Uses a hard cut for lighting, with smoothing affected by roughness. </constant> <constant name="SPECULAR_SCHLICK_GGX" value="0" enum="SpecularMode"> + Default specular blob. </constant> <constant name="SPECULAR_BLINN" value="1" enum="SpecularMode"> + Older specular algorithm, included for compatibility. </constant> <constant name="SPECULAR_PHONG" value="2" enum="SpecularMode"> + Older specular algorithm, included for compatibility. </constant> <constant name="SPECULAR_TOON" value="3" enum="SpecularMode"> + Toon blob which changes size based on roughness. </constant> <constant name="SPECULAR_DISABLED" value="4" enum="SpecularMode"> + No specular blob. </constant> <constant name="BILLBOARD_DISABLED" value="0" enum="BillboardMode"> + Default value. </constant> <constant name="BILLBOARD_ENABLED" value="1" enum="BillboardMode"> + The object's z-axis will always face the camera. </constant> <constant name="BILLBOARD_FIXED_Y" value="2" enum="BillboardMode"> + The object's x-axis will always face the camera. </constant> <constant name="BILLBOARD_PARTICLES" value="3" enum="BillboardMode"> + Used for particle systems. Enables particle animation options. </constant> <constant name="TEXTURE_CHANNEL_RED" value="0" enum="TextureChannel"> </constant> diff --git a/doc/classes/SpinBox.xml b/doc/classes/SpinBox.xml index 0fcd5bbaf5..5087cf355a 100644 --- a/doc/classes/SpinBox.xml +++ b/doc/classes/SpinBox.xml @@ -19,6 +19,8 @@ </method> </methods> <members> + <member name="align" type="int" setter="set_align" getter="get_align" enum="LineEdit.Align"> + </member> <member name="editable" type="bool" setter="set_editable" getter="is_editable"> </member> <member name="prefix" type="String" setter="set_prefix" getter="get_prefix"> diff --git a/doc/classes/SplitContainer.xml b/doc/classes/SplitContainer.xml index d56da68448..6370c40aba 100644 --- a/doc/classes/SplitContainer.xml +++ b/doc/classes/SplitContainer.xml @@ -11,6 +11,12 @@ <demos> </demos> <methods> + <method name="clamp_split_offset"> + <return type="void"> + </return> + <description> + </description> + </method> </methods> <members> <member name="collapsed" type="bool" setter="set_collapsed" getter="is_collapsed"> diff --git a/doc/classes/SpotLight.xml b/doc/classes/SpotLight.xml index 1f81e9e5c2..11f914aac2 100644 --- a/doc/classes/SpotLight.xml +++ b/doc/classes/SpotLight.xml @@ -7,7 +7,7 @@ A SpotLight light is a type of [Light] node that emits lights in a specific direction, in the shape of a cone. The light is attenuated through the distance and this attenuation can be configured by changing the energy, radius and attenuation parameters of [Light]. TODO: Image of a spotlight. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/lights_and_shadows.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml index cf8769d22b..40a4e04a80 100644 --- a/doc/classes/StreamPeerSSL.xml +++ b/doc/classes/StreamPeerSSL.xml @@ -7,7 +7,7 @@ SSL Stream peer. This object can be used to connect to SSL servers. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/networking/ssl_certificates.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> </tutorials> <demos> </demos> @@ -63,6 +63,8 @@ <constant name="STATUS_DISCONNECTED" value="0" enum="Status"> A status representing a [code]StreamPeerSSL[/code] that is disconnected. </constant> + <constant name="STATUS_HANDSHAKING" value="1" enum="Status"> + </constant> <constant name="STATUS_CONNECTED" value="2" enum="Status"> A status representing a [code]StreamPeerSSL[/code] that is connected to a host. </constant> diff --git a/doc/classes/StreamPeerTCP.xml b/doc/classes/StreamPeerTCP.xml index 664ffc60c3..9a0fceddab 100644 --- a/doc/classes/StreamPeerTCP.xml +++ b/doc/classes/StreamPeerTCP.xml @@ -4,7 +4,7 @@ TCP Stream peer. </brief_description> <description> - TCP Stream peer. This object can be used to connect to TCP servers, or also is returned by a tcp server. + TCP Stream peer. This object can be used to connect to TCP servers, or also is returned by a TCP server. </description> <tutorials> </tutorials> @@ -54,6 +54,7 @@ <return type="bool"> </return> <description> + Returns [code]true[/code] if this peer is currently connected to a host, [code]false[code] otherwise. </description> </method> <method name="set_no_delay"> diff --git a/doc/classes/String.xml b/doc/classes/String.xml index d404c32b38..536165487d 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -671,6 +671,7 @@ <return type="PoolByteArray"> </return> <description> + Returns the SHA-256 hash of the string as an array of bytes. </description> </method> <method name="sha256_text"> diff --git a/doc/classes/StyleBoxFlat.xml b/doc/classes/StyleBoxFlat.xml index 641d6214a4..bf544d2b78 100644 --- a/doc/classes/StyleBoxFlat.xml +++ b/doc/classes/StyleBoxFlat.xml @@ -5,22 +5,21 @@ </brief_description> <description> This stylebox can be used to achieve all kinds of looks without the need of a texture. Those properties are customizable: - - Color - - Border width (individual width for each border) - - Rounded corners (individual radius for each corner) - - Shadow - About corner radius: - Setting corner radius to high values is allowed. As soon as corners would overlap the stylebox will switch to a relative system. Example: - [codeblock] - height = 30 - corner_radius_top_left = 50 - corner_radius_bottom_left = 100 - [/codeblock] - The relative system now would take the 1:2 ratio of the two left corners to calculate the actual corner width. Both corners added will [b]never[/b] be more than the height. Result: - [codeblock] - corner_radius_top_left: 10 - corner_radius_bottom_left: 20 - [/codeblock] + - Color + - Border width (individual width for each border) + - Rounded corners (individual radius for each corner) + - Shadow + Setting corner radius to high values is allowed. As soon as corners would overlap the stylebox will switch to a relative system. Example: + [codeblock] + height = 30 + corner_radius_top_left = 50 + corner_radius_bottom_left = 100 + [/codeblock] + The relative system now would take the 1:2 ratio of the two left corners to calculate the actual corner width. Both corners added will [b]never[/b] be more than the height. Result: + [codeblock] + corner_radius_top_left: 10 + corner_radius_bottom_left: 20 + [/codeblock] </description> <tutorials> </tutorials> @@ -117,7 +116,7 @@ <member name="corner_detail" type="int" setter="set_corner_detail" getter="get_corner_detail"> This sets the amount of vertices used for each corner. Higher values result in rounder corners but take more processing power to compute. When choosing a value you should take the corner radius ([method set_corner_radius]) into account. For corner radius smaller than 10: 4-5 should be enough - For corner radius smaller than 30: 8-12 should be enough ... + For corner radius smaller than 30: 8-12 should be enough </member> <member name="corner_radius_bottom_left" type="int" setter="set_corner_radius" getter="get_corner_radius"> The corner radius of the bottom left corner. When set to 0 the corner is not rounded. diff --git a/doc/classes/SurfaceTool.xml b/doc/classes/SurfaceTool.xml index deda7bc292..2e5d5d81c9 100644 --- a/doc/classes/SurfaceTool.xml +++ b/doc/classes/SurfaceTool.xml @@ -14,6 +14,7 @@ [/codeblock] The [code]SurfaceTool[/code] now contains one vertex of a triangle which has a UV coordinate and a specified [Color]. If another vertex were added without calls to [method add_uv] or [method add_color] then the last values would be used. It is very important that vertex attributes are passed [b]before[/b] the call to [method add_vertex], failure to do this will result in an error when committing the vertex information to a mesh. + Additionally, the attributes used before the first vertex is added determine the format of the mesh. For example if you only add UVs to the first vertex, you cannot add color to any of the subsequent vertices. </description> <tutorials> </tutorials> @@ -26,7 +27,7 @@ <argument index="0" name="bones" type="PoolIntArray"> </argument> <description> - Add an array of bones for the next Vertex to use. + Add an array of bones for the next Vertex to use. Array must contain 4 integers. </description> </method> <method name="add_color"> @@ -99,6 +100,7 @@ </argument> <description> Insert a triangle fan made of array data into [Mesh] being constructed. + Requires primitive type be set to [code]PRIMITIVE_TRIANGLES[/code]. </description> </method> <method name="add_uv"> @@ -134,7 +136,7 @@ <argument index="0" name="weights" type="PoolRealArray"> </argument> <description> - Specify weight value for next Vertex to use. + Specify weight values for next Vertex to use. Array must contain 4 values. </description> </method> <method name="append_from"> @@ -147,6 +149,7 @@ <argument index="2" name="transform" type="Transform"> </argument> <description> + Append vertices from a given [Mesh] surface onto the current vertex array with specified [Transform]. </description> </method> <method name="begin"> @@ -184,6 +187,7 @@ <argument index="1" name="surface" type="int"> </argument> <description> + Creates a vertex array from an existing [Mesh]. </description> </method> <method name="deindex"> @@ -201,12 +205,15 @@ <description> Generates normals from Vertices so you do not have to do it manually. Setting "flip" [code]true[/code] inverts resulting normals. + Requires primitive type to be set to [code]PRIMITIVE_TRIANGLES[/code]. </description> </method> <method name="generate_tangents"> <return type="void"> </return> <description> + Generates a tangent vector for each vertex. + Requires that each vertex have UVs and normals set already. </description> </method> <method name="index"> diff --git a/doc/classes/TabContainer.xml b/doc/classes/TabContainer.xml index 5acfd6194e..f17c10b31e 100644 --- a/doc/classes/TabContainer.xml +++ b/doc/classes/TabContainer.xml @@ -82,6 +82,7 @@ <return type="int"> </return> <description> + Returns the [code]TabContainer[/code] rearrange group id. </description> </method> <method name="set_popup"> @@ -132,6 +133,7 @@ <argument index="0" name="group_id" type="int"> </argument> <description> + Defines rearrange group id, choose for each [code]TabContainer[/code] the same value to enable tab drag between [code]TabContainer[/code]. Enable drag with [code]set_drag_to_rearrange_enabled(true)[/code]. </description> </method> </methods> @@ -140,6 +142,7 @@ The current tab index. When set, this index's [Control] node's [code]visible[/code] property is set to [code]true[/code] and all others are set to [code]false[/code]. </member> <member name="drag_to_rearrange_enabled" type="bool" setter="set_drag_to_rearrange_enabled" getter="get_drag_to_rearrange_enabled"> + If [code]true[/code], tabs can be rearranged with mouse drag. </member> <member name="tab_align" type="int" setter="set_tab_align" getter="get_tab_align" enum="TabContainer.TabAlign"> The alignment of all tabs in the tab container. See the [code]ALIGN_*[/code] constants for details. @@ -171,10 +174,13 @@ </signals> <constants> <constant name="ALIGN_LEFT" value="0" enum="TabAlign"> + Align the tabs to the left. </constant> <constant name="ALIGN_CENTER" value="1" enum="TabAlign"> + Align the tabs to the center. </constant> <constant name="ALIGN_RIGHT" value="2" enum="TabAlign"> + Align the tabs to the right. </constant> </constants> <theme_items> diff --git a/doc/classes/Tabs.xml b/doc/classes/Tabs.xml index fc1d0476ed..350b49513d 100644 --- a/doc/classes/Tabs.xml +++ b/doc/classes/Tabs.xml @@ -19,6 +19,7 @@ <argument index="1" name="icon" type="Texture" default="null"> </argument> <description> + Adds a new tab. </description> </method> <method name="ensure_tab_visible"> @@ -27,6 +28,7 @@ <argument index="0" name="idx" type="int"> </argument> <description> + Moves the Scroll view to make the tab visible. </description> </method> <method name="get_offset_buttons_visible" qualifiers="const"> @@ -39,12 +41,14 @@ <return type="bool"> </return> <description> + Returns [code]true[/code] if select with right mouse button is enabled. </description> </method> <method name="get_tab_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of tabs. </description> </method> <method name="get_tab_disabled" qualifiers="const"> @@ -53,6 +57,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> + Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is disabled. </description> </method> <method name="get_tab_icon" qualifiers="const"> @@ -61,6 +66,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> + Returns the [Texture] for the tab at index [code]tab_idx[/code] or null if the tab has no [Texture]. </description> </method> <method name="get_tab_offset" qualifiers="const"> @@ -84,12 +90,14 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> + Returns the title of the tab at index [code]tab_idx[/code]. Tab titles default to the name of the indexed child node, but this can be overridden with [method set_tab_title]. </description> </method> <method name="get_tabs_rearrange_group" qualifiers="const"> <return type="int"> </return> <description> + Returns the [code]Tabs[/code] rearrange group id. </description> </method> <method name="move_tab"> @@ -109,6 +117,7 @@ <argument index="0" name="tab_idx" type="int"> </argument> <description> + Removes tab at index [code]tab_idx[/code] </description> </method> <method name="set_select_with_rmb"> @@ -117,6 +126,7 @@ <argument index="0" name="enabled" type="bool"> </argument> <description> + If [code]true[/code] enables selecting a tab with right mouse button. </description> </method> <method name="set_tab_disabled"> @@ -127,6 +137,7 @@ <argument index="1" name="disabled" type="bool"> </argument> <description> + If [code]disabled[/code] is false, hides the tab at index [code]tab_idx[/code]. Note that its title text will remain, unless also removed with [method set_tab_title]. </description> </method> <method name="set_tab_icon"> @@ -137,6 +148,7 @@ <argument index="1" name="icon" type="Texture"> </argument> <description> + Sets an icon for the tab at index [code]tab_idx[/code]. </description> </method> <method name="set_tab_title"> @@ -147,6 +159,7 @@ <argument index="1" name="title" type="String"> </argument> <description> + Sets a title for the tab at index [code]tab_idx[/code]. </description> </method> <method name="set_tabs_rearrange_group"> @@ -155,17 +168,21 @@ <argument index="0" name="group_id" type="int"> </argument> <description> + Defines rearrange group id, choose for each [code]Tabs[/code] the same value to enable tab drag between [code]Tabs[/code]. Enable drag with [code]set_drag_to_rearrange_enabled(true)[/code]. </description> </method> </methods> <members> <member name="current_tab" type="int" setter="set_current_tab" getter="get_current_tab"> + Select tab at index [code]tab_idx[/code]. </member> <member name="drag_to_rearrange_enabled" type="bool" setter="set_drag_to_rearrange_enabled" getter="get_drag_to_rearrange_enabled"> + If [code]true[/code], tabs can be rearranged with mouse drag. </member> <member name="scrolling_enabled" type="bool" setter="set_scrolling_enabled" getter="get_scrolling_enabled"> </member> <member name="tab_align" type="int" setter="set_tab_align" getter="get_tab_align" enum="Tabs.TabAlign"> + The alignment of all tabs. See enum [code]TabAlign[/code] constants for details. </member> <member name="tab_close_display_policy" type="int" setter="set_tab_close_display_policy" getter="get_tab_close_display_policy" enum="Tabs.CloseButtonDisplayPolicy"> </member> @@ -210,10 +227,13 @@ </signals> <constants> <constant name="ALIGN_LEFT" value="0" enum="TabAlign"> + Align the tabs to the left. </constant> <constant name="ALIGN_CENTER" value="1" enum="TabAlign"> + Align the tabs to the center. </constant> <constant name="ALIGN_RIGHT" value="2" enum="TabAlign"> + Align the tabs to the right. </constant> <constant name="ALIGN_MAX" value="3" enum="TabAlign"> </constant> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index a958c3fcfa..b2e3885ff2 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -467,7 +467,9 @@ <constant name="MENU_UNDO" value="5" enum="MenuItems"> Undoes the previous action. </constant> - <constant name="MENU_MAX" value="6" enum="MenuItems"> + <constant name="MENU_REDO" value="6" enum="MenuItems"> + </constant> + <constant name="MENU_MAX" value="7" enum="MenuItems"> </constant> </constants> <theme_items> diff --git a/doc/classes/TextureProgress.xml b/doc/classes/TextureProgress.xml index f74420e8b1..3cbaf0429c 100644 --- a/doc/classes/TextureProgress.xml +++ b/doc/classes/TextureProgress.xml @@ -52,10 +52,13 @@ [Texture] that draws under the progress bar. The bar's background. </member> <member name="tint_over" type="Color" setter="set_tint_over" getter="get_tint_over"> + Multiplies the color of the bar's [code]texture_over[/code] texture. The effect is similar to [member CanvasItem.modulate], except it only affects this specific texture instead of the entire node. </member> <member name="tint_progress" type="Color" setter="set_tint_progress" getter="get_tint_progress"> + Multiplies the color of the bar's [code]texture_progress[/code] texture. </member> <member name="tint_under" type="Color" setter="set_tint_under" getter="get_tint_under"> + Multiplies the color of the bar's [code]texture_under[/code] texture. </member> </members> <constants> @@ -72,16 +75,19 @@ The [member texture_progress] fills from bottom to top. </constant> <constant name="FILL_CLOCKWISE" value="4" enum="FillMode"> - Turns the node into a radial bar. The [member texture_progress] fills clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to refine its behavior. + Turns the node into a radial bar. The [member texture_progress] fills clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to control the way the bar fills up. </constant> <constant name="FILL_COUNTER_CLOCKWISE" value="5" enum="FillMode"> - Turns the node into a radial bar. The [member texture_progress] fills counter-clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to refine its behavior. + Turns the node into a radial bar. The [member texture_progress] fills counter-clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to control the way the bar fills up. </constant> <constant name="FILL_BILINEAR_LEFT_AND_RIGHT" value="6" enum="FillMode"> + The [member texture_progress] fills from the center, expanding both towards the left and the right. </constant> <constant name="FILL_BILINEAR_TOP_AND_BOTTOM" value="7" enum="FillMode"> + The [member texture_progress] fills from the center, expanding both towards the top and the bottom. </constant> <constant name="FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE" value="8" enum="FillMode"> + Turns the node into a radial bar. The [member texture_progress] fills radially from the center, expanding both clockwise and counter-clockwise. See [member radial_center_offset], [member radial_initial_angle] and [member radial_fill_degrees] to control the way the bar fills up. </constant> </constants> </class> diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml index fe43b54d5e..8c6acd2c51 100644 --- a/doc/classes/Theme.xml +++ b/doc/classes/Theme.xml @@ -12,6 +12,12 @@ <demos> </demos> <methods> + <method name="clear"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="clear_color"> <return type="void"> </return> diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index 6f8c76d1ea..7034d75473 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -7,7 +7,7 @@ Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list of tiles (textures plus optional collision, navigation, and/or occluder shapes) which are used to create grid-based maps. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/using_tilemaps.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml index 3f0d6317a6..ffd15e8d8b 100644 --- a/doc/classes/TileSet.xml +++ b/doc/classes/TileSet.xml @@ -268,7 +268,7 @@ <argument index="1" name="shape_id" type="int"> </argument> <description> - Returns the [Transform2D] of a tile's sahpe. + Returns the [Transform2D] of a tile's shape. </description> </method> <method name="tile_get_shapes" qualifiers="const"> diff --git a/doc/classes/Transform.xml b/doc/classes/Transform.xml index 09edfe4235..b3168ef129 100644 --- a/doc/classes/Transform.xml +++ b/doc/classes/Transform.xml @@ -7,8 +7,8 @@ Represents one or many transformations in 3D space such as translation, rotation, or scaling. It consists of a [Basis] "basis" and an [Vector3] "origin". It is similar to a 3x4 matrix. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/math/index.html</link> - <link>http://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml index c4e9dbfb70..b57f8f3556 100644 --- a/doc/classes/Translation.xml +++ b/doc/classes/Translation.xml @@ -7,6 +7,8 @@ Translations are resources that can be loaded/unloaded on demand. They map a string to another string. </description> <tutorials> + <link>https://docs.godotengine.org/en/stable/tutorials/i18n/internationalizing_games.html</link> + <link>https://docs.godotengine.org/en/stable/tutorials/i18n/locales.html</link> </tutorials> <demos> </demos> @@ -19,7 +21,7 @@ <argument index="1" name="xlated_message" type="String"> </argument> <description> - Add a message for translation. + Adds a message if nonexistent, followed by its translation. </description> </method> <method name="erase_message"> @@ -28,7 +30,7 @@ <argument index="0" name="src_message" type="String"> </argument> <description> - Erase a message. + Erases a message. </description> </method> <method name="get_message" qualifiers="const"> @@ -37,25 +39,27 @@ <argument index="0" name="src_message" type="String"> </argument> <description> - Return a message for translation. + Returns a message's translation. </description> </method> <method name="get_message_count" qualifiers="const"> <return type="int"> </return> <description> + Returns the number of existing messages. </description> </method> <method name="get_message_list" qualifiers="const"> <return type="PoolStringArray"> </return> <description> - Return all the messages (keys). + Returns all the messages (keys). </description> </method> </methods> <members> <member name="locale" type="String" setter="set_locale" getter="get_locale"> + The locale of the translation. </member> </members> <constants> diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml index 52d2b2cc47..c2c400ccd5 100644 --- a/doc/classes/TranslationServer.xml +++ b/doc/classes/TranslationServer.xml @@ -1,11 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="TranslationServer" inherits="Object" category="Core" version="3.1"> <brief_description> - Server that manages all translations. Translations can be set to it and removed from it. + Server that manages all translations. </brief_description> <description> + Server that manages all translations. Translations can be set to it and removed from it. </description> <tutorials> + <link>https://docs.godotengine.org/en/stable/tutorials/i18n/internationalizing_games.html</link> + <link>https://docs.godotengine.org/en/stable/tutorials/i18n/locales.html</link> </tutorials> <demos> </demos> @@ -16,18 +19,21 @@ <argument index="0" name="translation" type="Translation"> </argument> <description> + Adds a [Translation] resource. </description> </method> <method name="clear"> <return type="void"> </return> <description> + Clears the server from all translations. </description> </method> <method name="get_locale" qualifiers="const"> <return type="String"> </return> <description> + Returns the current locale of the game. </description> </method> <method name="get_locale_name" qualifiers="const"> @@ -36,6 +42,7 @@ <argument index="0" name="locale" type="String"> </argument> <description> + Returns a locale's language and its variant (e.g. "en_US" would return "English (United States)"). </description> </method> <method name="remove_translation"> @@ -44,6 +51,7 @@ <argument index="0" name="translation" type="Translation"> </argument> <description> + Removes the given translation from the server. </description> </method> <method name="set_locale"> @@ -52,6 +60,7 @@ <argument index="0" name="locale" type="String"> </argument> <description> + Sets the locale of the game. </description> </method> <method name="translate" qualifiers="const"> @@ -60,6 +69,7 @@ <argument index="0" name="message" type="String"> </argument> <description> + Returns the current locale's translation for the given message (key). </description> </method> </methods> diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml index 0431718066..1ad8166b91 100644 --- a/doc/classes/Tree.xml +++ b/doc/classes/Tree.xml @@ -230,7 +230,7 @@ The amount of columns. </member> <member name="drop_mode_flags" type="int" setter="set_drop_mode_flags" getter="get_drop_mode_flags"> - The drop mode as an OR combination of flags. See [code]DROP_MODE_*[/code] constants. Once dropping is done, reverts to [code]DROP_MODE_DISABLED[/code]. Setting this during [method can_drop_data] is recommended. + The drop mode as an OR combination of flags. See [code]DROP_MODE_*[/code] constants. Once dropping is done, reverts to [code]DROP_MODE_DISABLED[/code]. Setting this during [method Control.can_drop_data] is recommended. </member> <member name="hide_folding" type="bool" setter="set_hide_folding" getter="is_folding_hidden"> If [code]true[/code] the folding arrow is hidden. @@ -315,12 +315,12 @@ <argument index="0" name="position" type="Vector2"> </argument> <description> - Emitted when an item is selected with right mouse button. + Emitted when an item is selected with the right mouse button. </description> </signal> <signal name="item_selected"> <description> - Emitted when an item is selected with right mouse button. + Emitted when an item is selected. </description> </signal> <signal name="multi_selected"> @@ -384,6 +384,8 @@ </theme_item> <theme_item name="custom_button_pressed" type="StyleBox"> </theme_item> + <theme_item name="draw_guides" type="int"> + </theme_item> <theme_item name="draw_relationship_lines" type="int"> </theme_item> <theme_item name="drop_position_color" type="Color"> diff --git a/doc/classes/TreeItem.xml b/doc/classes/TreeItem.xml index 57e0f2825a..b4227b34be 100644 --- a/doc/classes/TreeItem.xml +++ b/doc/classes/TreeItem.xml @@ -25,7 +25,7 @@ <argument index="4" name="tooltip" type="String" default=""""> </argument> <description> - Adds a button with [Texture] [code]button[/code] at column [code]column[/code]. The [code]button_idx[/code] index is used to identify the button when calling other methods. If not specified, the next available index is used, which may be retrieved by calling [code]get_buton_count()[/code] immediately after this method. Optionally, the button can be [code]disabled[/code] and have a [code]tooltip[/code]. + Adds a button with [Texture] [code]button[/code] at column [code]column[/code]. The [code]button_idx[/code] index is used to identify the button when calling other methods. If not specified, the next available index is used, which may be retrieved by calling [method get_button_count] immediately after this method. Optionally, the button can be [code]disabled[/code] and have a [code]tooltip[/code]. </description> </method> <method name="clear_custom_bg_color"> @@ -400,6 +400,7 @@ </argument> <description> Sets the given column's custom draw callback to [code]callback[/code] method on [code]object[/code]. + The [code]callback[/code] should accept two arguments: the [TreeItem] that is drawn and its position and size as a [Rect2]. </description> </method> <method name="set_editable"> @@ -558,13 +559,10 @@ <constant name="CELL_MODE_RANGE" value="2" enum="TreeCellMode"> Cell contains a range. </constant> - <constant name="CELL_MODE_RANGE_EXPRESSION" value="3" enum="TreeCellMode"> - Cell contains a range expression. - </constant> - <constant name="CELL_MODE_ICON" value="4" enum="TreeCellMode"> + <constant name="CELL_MODE_ICON" value="3" enum="TreeCellMode"> Cell contains an icon. </constant> - <constant name="CELL_MODE_CUSTOM" value="5" enum="TreeCellMode"> + <constant name="CELL_MODE_CUSTOM" value="4" enum="TreeCellMode"> </constant> <constant name="ALIGN_LEFT" value="0" enum="TextAlign"> Align text to the left. See [code]set_text_align()[/code]. diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml index 1dc03ed314..e792835605 100644 --- a/doc/classes/Tween.xml +++ b/doc/classes/Tween.xml @@ -14,7 +14,7 @@ tween.start() [/codeblock] Many methods require a property name, such as "position" above. You can find the correct property name by hovering over the property in the Inspector. - Many of the methods accept [code]trans_type[/code] and [code]ease_type[/code]. The first accepts an [enum TransitionType] constant, and refers to the way the timing of the animation is handled (see [code]http://easings.net/[/code] for some examples). The second accepts an [enum EaseType] constant, and controls the where [code]trans_type[/code] is applied to the interpolation (in the beginning, the end, or both). If you don't know which transition and easing to pick, you can try different [enum TransitionType] constants with [enum EASE_IN_OUT], and use the one that looks best. + Many of the methods accept [code]trans_type[/code] and [code]ease_type[/code]. The first accepts an [enum TransitionType] constant, and refers to the way the timing of the animation is handled (see [code]http://easings.net/[/code] for some examples). The second accepts an [enum EaseType] constant, and controls the where [code]trans_type[/code] is applied to the interpolation (in the beginning, the end, or both). If you don't know which transition and easing to pick, you can try different [enum TransitionType] constants with [code]EASE_IN_OUT[/code], and use the one that looks best. </description> <tutorials> </tutorials> diff --git a/doc/classes/UndoRedo.xml b/doc/classes/UndoRedo.xml index 0ea5c6e005..93806ac326 100644 --- a/doc/classes/UndoRedo.xml +++ b/doc/classes/UndoRedo.xml @@ -102,8 +102,11 @@ <method name="clear_history"> <return type="void"> </return> + <argument index="0" name="increase_version" type="bool" default="true"> + </argument> <description> Clear the undo/redo history and associated references. + Passing [code]false[/code] to [code]increase_version[/code] will prevent the version number to be increased from this. </description> </method> <method name="commit_action"> diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml index 7e03e7f0fe..006a843c32 100644 --- a/doc/classes/Vector2.xml +++ b/doc/classes/Vector2.xml @@ -7,7 +7,7 @@ 2-element structure that can be used to represent positions in 2d space or any other pair of numeric values. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/math/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> </tutorials> <demos> </demos> @@ -259,15 +259,18 @@ </methods> <members> <member name="x" type="float" setter="" getter=""> - The vector's x component. + The vector's x component. Also accessible by using the index position [code][0][/code]. </member> <member name="y" type="float" setter="" getter=""> - The vector's y component. + The vector's y component. Also accessible by using the index position [code][1][/code]. </member> </members> <constants> <constant name="ZERO" value="Vector2( 0, 0 )"> - Null vector. + Zero vector. + </constant> + <constant name="ONE" value="Vector2( 1, 1 )"> + One vector. </constant> <constant name="INF" value="Vector2( inf, inf )"> Infinite vector. diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml index 4211c34d8e..48856875e7 100644 --- a/doc/classes/Vector3.xml +++ b/doc/classes/Vector3.xml @@ -7,7 +7,7 @@ Vector3 is one of the core classes of the engine, and includes several built-in helper functions to perform basic vector math operations. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/math/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> </tutorials> <demos> </demos> @@ -260,13 +260,13 @@ </methods> <members> <member name="x" type="float" setter="" getter=""> - The vector's x component. + The vector's x component. Also accessible by using the index position [code][0][/code]. </member> <member name="y" type="float" setter="" getter=""> - The vector's y component. + The vector's y component. Also accessible by using the index position [code][1][/code]. </member> <member name="z" type="float" setter="" getter=""> - The vector's z component. + The vector's z component. Also accessible by using the index position [code][2][/code]. </member> </members> <constants> @@ -280,7 +280,10 @@ Enumerated value for the Z axis. </constant> <constant name="ZERO" value="Vector3( 0, 0, 0 )"> - Null vector. + Zero vector. + </constant> + <constant name="ONE" value="Vector3( 1, 1, 1 )"> + One vector. </constant> <constant name="INF" value="Vector3( inf, inf, inf )"> Infinite vector. diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index 9cd501630e..4706651c6e 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -12,8 +12,8 @@ Finally, viewports can also behave as render targets, in which case they will not be visible unless the associated texture is used to draw. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/2d/2d_transforms.html</link> - <link>http://docs.godotengine.org/en/3.0/tutorials/viewports/index.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/viewports/index.html</link> </tutorials> <demos> </demos> @@ -125,6 +125,12 @@ <description> </description> </method> + <method name="is_input_handled" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> <method name="is_size_override_enabled" qualifiers="const"> <return type="bool"> </return> @@ -147,6 +153,12 @@ <description> </description> </method> + <method name="set_input_as_handled"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="set_size_override"> <return type="void"> </return> @@ -222,6 +234,8 @@ <member name="gui_snap_controls_to_pixels" type="bool" setter="set_snap_controls_to_pixels" getter="is_snap_controls_to_pixels_enabled"> If [code]true[/code] the GUI controls on the viewport will lay pixel perfectly. Default value: [code]true[/code]. </member> + <member name="handle_input_locally" type="bool" setter="set_handle_input_locally" getter="is_handling_input_locally"> + </member> <member name="hdr" type="bool" setter="set_hdr" getter="get_hdr"> If [code]true[/code] the viewport rendering will receive benefits from High Dynamic Range algorithm. Default value: [code]true[/code]. </member> diff --git a/doc/classes/VisualServer.xml b/doc/classes/VisualServer.xml index 58b3d33cdb..d2bc56001c 100644 --- a/doc/classes/VisualServer.xml +++ b/doc/classes/VisualServer.xml @@ -239,10 +239,6 @@ </argument> <argument index="3" name="normal_map" type="RID"> </argument> - <argument index="4" name="h_frames" type="int"> - </argument> - <argument index="5" name="v_frames" type="int"> - </argument> <description> Adds a particles system to the [CanvasItem]'s draw commands. </description> @@ -1117,11 +1113,13 @@ </argument> <argument index="2" name="depth_begin" type="float"> </argument> - <argument index="3" name="depth_curve" type="float"> + <argument index="3" name="depth_end" type="float"> + </argument> + <argument index="4" name="depth_curve" type="float"> </argument> - <argument index="4" name="transmit" type="bool"> + <argument index="5" name="transmit" type="bool"> </argument> - <argument index="5" name="transmit_curve" type="float"> + <argument index="6" name="transmit_curve" type="float"> </argument> <description> </description> @@ -1163,7 +1161,9 @@ </argument> <argument index="8" name="hdr_bleed_scale" type="float"> </argument> - <argument index="9" name="bicubic_upscale" type="bool"> + <argument index="9" name="hdr_luminance_cap" type="float"> + </argument> + <argument index="10" name="bicubic_upscale" type="bool"> </argument> <description> </description> @@ -3613,7 +3613,7 @@ If [code]true[/code] sets the viewport active, else sets it inactive. </description> </method> - <method name="viewport_set_canvas_layer"> + <method name="viewport_set_canvas_stacking"> <return type="void"> </return> <argument index="0" name="viewport" type="RID"> @@ -3622,8 +3622,11 @@ </argument> <argument index="2" name="layer" type="int"> </argument> + <argument index="3" name="sublayer" type="int"> + </argument> <description> - Sets the renderlayer for a viewport's canvas. + Sets the stacking order for a viewport's canvas. + [code]layer[/code] is the actual canvas layer, while [code]sublayer[/code] specifies the stacking order of the canvas among those in the same layer. </description> </method> <method name="viewport_set_canvas_transform"> @@ -4380,7 +4383,7 @@ </constant> <constant name="ENV_TONE_MAPPER_LINEAR" value="0" enum="EnvironmentToneMapper"> </constant> - <constant name="ENV_TONE_MAPPER_REINHARDT" value="1" enum="EnvironmentToneMapper"> + <constant name="ENV_TONE_MAPPER_REINHARD" value="1" enum="EnvironmentToneMapper"> </constant> <constant name="ENV_TONE_MAPPER_FILMIC" value="2" enum="EnvironmentToneMapper"> </constant> diff --git a/doc/classes/World.xml b/doc/classes/World.xml index 540848e40a..4e954acd48 100644 --- a/doc/classes/World.xml +++ b/doc/classes/World.xml @@ -7,7 +7,7 @@ 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. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/ray-casting.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml index 780cdd181a..9c3d66dade 100644 --- a/doc/classes/World2D.xml +++ b/doc/classes/World2D.xml @@ -7,7 +7,7 @@ Class that has everything pertaining to a 2D world. A physics space, a visual scenario and a sound space. 2D nodes register their resources into the current 2D world. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/physics/ray-casting.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml index e68ad2800e..45e1af4e42 100644 --- a/doc/classes/WorldEnvironment.xml +++ b/doc/classes/WorldEnvironment.xml @@ -9,7 +9,7 @@ The [code]WorldEnvironment[/code] allows the user to specify default lighting parameters (e.g. ambient lighting), various post-processing effects (e.g. SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, skybox). Usually, these are added in order to improve the realism/color balance of the scene. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/environment_and_post_processing.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link> </tutorials> <demos> </demos> diff --git a/doc/classes/YSort.xml b/doc/classes/YSort.xml index 12b9cb623f..45ae8645b1 100644 --- a/doc/classes/YSort.xml +++ b/doc/classes/YSort.xml @@ -14,6 +14,7 @@ </methods> <members> <member name="sort_enabled" type="bool" setter="set_sort_enabled" getter="is_sort_enabled"> + If [code]true[/code] child nodes are sorted, otherwise sorting is disabled. Default: [code]true[/code]. </member> </members> <constants> diff --git a/doc/tools/doc_merge.py b/doc/tools/doc_merge.py index 57ac4bdcdd..496d5dcb74 100644 --- a/doc/tools/doc_merge.py +++ b/doc/tools/doc_merge.py @@ -82,7 +82,7 @@ def find_signal_descr(old_class, name): def find_constant_descr(old_class, name): - if (old_class == None): + if (old_class is None): return None constants = old_class.find("constants") if(constants != None and len(list(constants)) > 0): diff --git a/doc/tools/doc_status.py b/doc/tools/doc_status.py index ab74c0b9d6..4bb4342d5f 100644 --- a/doc/tools/doc_status.py +++ b/doc/tools/doc_status.py @@ -229,11 +229,11 @@ class ClassStatus: output['overall'] = (description_progress + items_progress).to_colored_string('{percent}%', '{pad_percent}{s}') if self.name.startswith('Total'): - output['url'] = color('url', 'http://docs.godotengine.org/en/latest/classes/') + output['url'] = color('url', 'https://docs.godotengine.org/en/latest/classes/') if flags['s']: output['comment'] = color('part_good', 'ALL OK') else: - output['url'] = color('url', 'http://docs.godotengine.org/en/latest/classes/class_{name}.html'.format(name=self.name.lower())) + output['url'] = color('url', 'https://docs.godotengine.org/en/latest/classes/class_{name}.html'.format(name=self.name.lower())) if flags['s'] and not flags['g'] and self.is_ok(): output['comment'] = color('part_good', 'ALL OK') diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py index 63a5c8cbbf..7b7cc52547 100755 --- a/doc/tools/makerst.py +++ b/doc/tools/makerst.py @@ -375,7 +375,7 @@ def make_method( event=False, pp=None ): - if (declare or pp == None): + if (declare or pp is None): t = '- ' else: t = "" @@ -405,7 +405,7 @@ def make_method( t += 'void' t += ' ' - if declare or pp == None: + if declare or pp is None: s = '**' + method_data.attrib['name'] + '** ' else: @@ -577,7 +577,7 @@ def make_rst_class(node): make_method(f, name, m, True, True) f.write('\n') d = m.find('description') - if d == None or d.text.strip() == '': + if d is None or d.text.strip() == '': continue f.write(rstize_text(d.text.strip(), name)) f.write("\n\n") @@ -610,8 +610,7 @@ def make_rst_class(node): s += ' = **' + c.attrib['value'] + '**' if c.text.strip() != '': s += ' --- ' + rstize_text(c.text.strip(), name) - f.write(s + '\n') - f.write('\n') + f.write(s + '\n\n') # Constants if len(consts) > 0: @@ -623,8 +622,7 @@ def make_rst_class(node): s += ' = **' + c.attrib['value'] + '**' if c.text.strip() != '': s += ' --- ' + rstize_text(c.text.strip(), name) - f.write(s + '\n') - f.write('\n') + f.write(s + '\n\n') # Class description descr = node.find('description') @@ -678,7 +676,7 @@ def make_rst_class(node): make_method(f, name, m, True) f.write('\n') d = m.find('description') - if d == None or d.text.strip() == '': + if d is None or d.text.strip() == '': continue f.write(rstize_text(d.text.strip(), name)) f.write("\n\n") diff --git a/drivers/coreaudio/audio_driver_coreaudio.cpp b/drivers/coreaudio/audio_driver_coreaudio.cpp index 09e50e4aaa..850b90d59b 100644 --- a/drivers/coreaudio/audio_driver_coreaudio.cpp +++ b/drivers/coreaudio/audio_driver_coreaudio.cpp @@ -95,11 +95,6 @@ Error AudioDriverCoreAudio::init() { result = AudioObjectAddPropertyListener(kAudioObjectSystemObject, &prop, &output_device_address_cb, this); ERR_FAIL_COND_V(result != noErr, FAILED); - - prop.mSelector = kAudioHardwarePropertyDefaultInputDevice; - - result = AudioObjectAddPropertyListener(kAudioObjectSystemObject, &prop, &input_device_address_cb, this); - ERR_FAIL_COND_V(result != noErr, FAILED); #endif AudioStreamBasicDescription strdesc; @@ -123,26 +118,6 @@ Error AudioDriverCoreAudio::init() { break; } - zeromem(&strdesc, sizeof(strdesc)); - size = sizeof(strdesc); - result = AudioUnitGetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, kInputBus, &strdesc, &size); - ERR_FAIL_COND_V(result != noErr, FAILED); - - switch (strdesc.mChannelsPerFrame) { - case 1: // Mono - capture_channels = 1; - break; - - case 2: // Stereo - capture_channels = 2; - break; - - default: - // Unknown number of channels, default to stereo - capture_channels = 2; - break; - } - mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); zeromem(&strdesc, sizeof(strdesc)); @@ -158,11 +133,6 @@ Error AudioDriverCoreAudio::init() { result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &strdesc, sizeof(strdesc)); ERR_FAIL_COND_V(result != noErr, FAILED); - strdesc.mChannelsPerFrame = capture_channels; - - result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, kInputBus, &strdesc, sizeof(strdesc)); - ERR_FAIL_COND_V(result != noErr, FAILED); - int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); // Sample rate is independent of channels (ref: https://stackoverflow.com/questions/11048825/audio-sample-frequency-rely-on-channels) buffer_frames = closest_power_of_2(latency * mix_rate / 1000); @@ -175,9 +145,6 @@ Error AudioDriverCoreAudio::init() { unsigned int buffer_size = buffer_frames * channels; samples_in.resize(buffer_size); input_buf.resize(buffer_size); - input_buffer.resize(buffer_size * 8); - input_position = 0; - input_size = 0; print_verbose("CoreAudio: detected " + itos(channels) + " channels"); print_verbose("CoreAudio: audio buffer frames: " + itos(buffer_frames) + " calculated latency: " + itos(buffer_frames * 1000 / mix_rate) + "ms"); @@ -189,16 +156,10 @@ Error AudioDriverCoreAudio::init() { result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, kOutputBus, &callback, sizeof(callback)); ERR_FAIL_COND_V(result != noErr, FAILED); - zeromem(&callback, sizeof(AURenderCallbackStruct)); - callback.inputProc = &AudioDriverCoreAudio::input_callback; - callback.inputProcRefCon = this; - result = AudioUnitSetProperty(audio_unit, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, 0, &callback, sizeof(callback)); - ERR_FAIL_COND_V(result != noErr, FAILED); - result = AudioUnitInitialize(audio_unit); ERR_FAIL_COND_V(result != noErr, FAILED); - return OK; + return capture_init(); } OSStatus AudioDriverCoreAudio::output_callback(void *inRefCon, @@ -265,7 +226,7 @@ OSStatus AudioDriverCoreAudio::input_callback(void *inRefCon, bufferList.mBuffers[0].mNumberChannels = ad->capture_channels; bufferList.mBuffers[0].mDataByteSize = ad->input_buf.size() * sizeof(int16_t); - OSStatus result = AudioUnitRender(ad->audio_unit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, &bufferList); + OSStatus result = AudioUnitRender(ad->input_unit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, &bufferList); if (result == noErr) { for (int i = 0; i < inNumberFrames * ad->capture_channels; i++) { int32_t sample = ad->input_buf[i] << 16; @@ -277,7 +238,7 @@ OSStatus AudioDriverCoreAudio::input_callback(void *inRefCon, } } } else { - ERR_PRINT(("AudioUnitRender failed, code: " + itos(result)).utf8().get_data()); + ERR_PRINTS("AudioUnitRender failed, code: " + itos(result)); } ad->unlock(); @@ -289,7 +250,7 @@ void AudioDriverCoreAudio::start() { if (!active) { OSStatus result = AudioOutputUnitStart(audio_unit); if (result != noErr) { - ERR_PRINT(("AudioOutputUnitStart failed, code: " + itos(result)).utf8().get_data()); + ERR_PRINTS("AudioOutputUnitStart failed, code: " + itos(result)); } else { active = true; } @@ -300,7 +261,7 @@ void AudioDriverCoreAudio::stop() { if (active) { OSStatus result = AudioOutputUnitStop(audio_unit); if (result != noErr) { - ERR_PRINT(("AudioOutputUnitStop failed, code: " + itos(result)).utf8().get_data()); + ERR_PRINTS("AudioOutputUnitStop failed, code: " + itos(result)); } else { active = false; } @@ -332,6 +293,8 @@ bool AudioDriverCoreAudio::try_lock() { } void AudioDriverCoreAudio::finish() { + capture_finish(); + if (audio_unit) { OSStatus result; @@ -375,6 +338,7 @@ void AudioDriverCoreAudio::finish() { ERR_PRINT("AudioComponentInstanceDispose failed"); } + audio_unit = NULL; unlock(); } @@ -384,20 +348,160 @@ void AudioDriverCoreAudio::finish() { } } -Error AudioDriverCoreAudio::capture_start() { +Error AudioDriverCoreAudio::capture_init() { + AudioComponentDescription desc; + zeromem(&desc, sizeof(desc)); + desc.componentType = kAudioUnitType_Output; +#ifdef OSX_ENABLED + desc.componentSubType = kAudioUnitSubType_HALOutput; +#else + desc.componentSubType = kAudioUnitSubType_RemoteIO; +#endif + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + + AudioComponent comp = AudioComponentFindNext(NULL, &desc); + ERR_FAIL_COND_V(comp == NULL, FAILED); + + OSStatus result = AudioComponentInstanceNew(comp, &input_unit); + ERR_FAIL_COND_V(result != noErr, FAILED); + +#ifdef OSX_ENABLED + AudioObjectPropertyAddress prop; + prop.mSelector = kAudioHardwarePropertyDefaultInputDevice; + prop.mScope = kAudioObjectPropertyScopeGlobal; + prop.mElement = kAudioObjectPropertyElementMaster; + + result = AudioObjectAddPropertyListener(kAudioObjectSystemObject, &prop, &input_device_address_cb, this); + ERR_FAIL_COND_V(result != noErr, FAILED); +#endif UInt32 flag = 1; - OSStatus result = AudioUnitSetProperty(audio_unit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, &flag, sizeof(flag)); + result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, &flag, sizeof(flag)); + ERR_FAIL_COND_V(result != noErr, FAILED); + flag = 0; + result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, kOutputBus, &flag, sizeof(flag)); + ERR_FAIL_COND_V(result != noErr, FAILED); + + UInt32 size; +#ifdef OSX_ENABLED + AudioDeviceID deviceId; + size = sizeof(AudioDeviceID); + AudioObjectPropertyAddress property = { kAudioHardwarePropertyDefaultInputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; + + result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &property, 0, NULL, &size, &deviceId); + ERR_FAIL_COND_V(result != noErr, FAILED); + + result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &deviceId, sizeof(AudioDeviceID)); + ERR_FAIL_COND_V(result != noErr, FAILED); +#endif + + AudioStreamBasicDescription strdesc; + zeromem(&strdesc, sizeof(strdesc)); + size = sizeof(strdesc); + result = AudioUnitGetProperty(input_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, kInputBus, &strdesc, &size); + ERR_FAIL_COND_V(result != noErr, FAILED); + + switch (strdesc.mChannelsPerFrame) { + case 1: // Mono + capture_channels = 1; + break; + + case 2: // Stereo + capture_channels = 2; + break; + + default: + // Unknown number of channels, default to stereo + capture_channels = 2; + break; + } + + mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); + + zeromem(&strdesc, sizeof(strdesc)); + strdesc.mFormatID = kAudioFormatLinearPCM; + strdesc.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked; + strdesc.mChannelsPerFrame = capture_channels; + strdesc.mSampleRate = mix_rate; + strdesc.mFramesPerPacket = 1; + strdesc.mBitsPerChannel = 16; + strdesc.mBytesPerFrame = strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; + strdesc.mBytesPerPacket = strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; + + result = AudioUnitSetProperty(input_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, kInputBus, &strdesc, sizeof(strdesc)); + ERR_FAIL_COND_V(result != noErr, FAILED); + + AURenderCallbackStruct callback; + zeromem(&callback, sizeof(AURenderCallbackStruct)); + callback.inputProc = &AudioDriverCoreAudio::input_callback; + callback.inputProcRefCon = this; + result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, kInputBus, &callback, sizeof(callback)); + ERR_FAIL_COND_V(result != noErr, FAILED); + + result = AudioUnitInitialize(input_unit); ERR_FAIL_COND_V(result != noErr, FAILED); return OK; } +void AudioDriverCoreAudio::capture_finish() { + if (input_unit) { + lock(); + + AURenderCallbackStruct callback; + zeromem(&callback, sizeof(AURenderCallbackStruct)); + OSStatus result = AudioUnitSetProperty(input_unit, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, 0, &callback, sizeof(callback)); + if (result != noErr) { + ERR_PRINT("AudioUnitSetProperty failed"); + } + + result = AudioUnitUninitialize(input_unit); + if (result != noErr) { + ERR_PRINT("AudioUnitUninitialize failed"); + } + +#ifdef OSX_ENABLED + AudioObjectPropertyAddress prop; + prop.mSelector = kAudioHardwarePropertyDefaultInputDevice; + prop.mScope = kAudioObjectPropertyScopeGlobal; + prop.mElement = kAudioObjectPropertyElementMaster; + + result = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &prop, &input_device_address_cb, this); + if (result != noErr) { + ERR_PRINT("AudioObjectRemovePropertyListener failed"); + } +#endif + + result = AudioComponentInstanceDispose(input_unit); + if (result != noErr) { + ERR_PRINT("AudioComponentInstanceDispose failed"); + } + + input_unit = NULL; + unlock(); + } +} + +Error AudioDriverCoreAudio::capture_start() { + + input_buffer_init(buffer_frames); + + OSStatus result = AudioOutputUnitStart(input_unit); + if (result != noErr) { + ERR_PRINTS("AudioOutputUnitStart failed, code: " + itos(result)); + } + + return OK; +} + Error AudioDriverCoreAudio::capture_stop() { - UInt32 flag = 0; - OSStatus result = AudioUnitSetProperty(audio_unit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, &flag, sizeof(flag)); - ERR_FAIL_COND_V(result != noErr, FAILED); + if (input_unit) { + OSStatus result = AudioOutputUnitStop(input_unit); + if (result != noErr) { + ERR_PRINTS("AudioOutputUnitStop failed, code: " + itos(result)); + } + } return OK; } @@ -531,12 +635,14 @@ void AudioDriverCoreAudio::_set_device(const String &device, bool capture) { } if (found) { - OSStatus result = AudioUnitSetProperty(audio_unit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, capture ? kInputBus : kOutputBus, &deviceId, sizeof(AudioDeviceID)); + OSStatus result = AudioUnitSetProperty(capture ? input_unit : audio_unit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &deviceId, sizeof(AudioDeviceID)); ERR_FAIL_COND(result != noErr); - // Reset audio input to keep synchronisation. - input_position = 0; - input_size = 0; + if (capture) { + // Reset audio input to keep synchronisation. + input_position = 0; + input_size = 0; + } } } @@ -580,6 +686,7 @@ String AudioDriverCoreAudio::capture_get_device() { AudioDriverCoreAudio::AudioDriverCoreAudio() { audio_unit = NULL; + input_unit = NULL; active = false; mutex = NULL; diff --git a/drivers/coreaudio/audio_driver_coreaudio.h b/drivers/coreaudio/audio_driver_coreaudio.h index d3f7c8d596..474a9e43ae 100644 --- a/drivers/coreaudio/audio_driver_coreaudio.h +++ b/drivers/coreaudio/audio_driver_coreaudio.h @@ -43,6 +43,7 @@ class AudioDriverCoreAudio : public AudioDriver { AudioComponentInstance audio_unit; + AudioComponentInstance input_unit; bool active; Mutex *mutex; @@ -83,6 +84,9 @@ class AudioDriverCoreAudio : public AudioDriver { UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData); + Error capture_init(); + void capture_finish(); + public: const char *get_name() const { return "CoreAudio"; diff --git a/drivers/coremidi/core_midi.cpp b/drivers/coremidi/core_midi.cpp index e8106c4543..2ebbabaa38 100644 --- a/drivers/coremidi/core_midi.cpp +++ b/drivers/coremidi/core_midi.cpp @@ -51,13 +51,13 @@ Error MIDIDriverCoreMidi::open() { OSStatus result = MIDIClientCreate(name, NULL, NULL, &client); CFRelease(name); if (result != noErr) { - ERR_PRINTS("MIDIClientCreate failed: " + String(GetMacOSStatusErrorString(result))); + ERR_PRINTS("MIDIClientCreate failed, code: " + itos(result)); return ERR_CANT_OPEN; } result = MIDIInputPortCreate(client, CFSTR("Godot Input"), MIDIDriverCoreMidi::read, (void *)this, &port_in); if (result != noErr) { - ERR_PRINTS("MIDIInputPortCreate failed: " + String(GetMacOSStatusErrorString(result))); + ERR_PRINTS("MIDIInputPortCreate failed, code: " + itos(result)); return ERR_CANT_OPEN; } @@ -65,7 +65,7 @@ Error MIDIDriverCoreMidi::open() { for (int i = 0; i < sources; i++) { MIDIEndpointRef source = MIDIGetSource(i); - if (source != NULL) { + if (source) { MIDIPortConnectSource(port_in, source, (void *)this); connected_sources.insert(i, source); } diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h index d109ef7b91..dfdb3a6bba 100644 --- a/drivers/dummy/rasterizer_dummy.h +++ b/drivers/dummy/rasterizer_dummy.h @@ -63,7 +63,8 @@ public: void environment_set_dof_blur_near(RID p_env, bool p_enable, float p_distance, float p_transition, float p_far_amount, VS::EnvironmentDOFBlurQuality p_quality) {} void environment_set_dof_blur_far(RID p_env, bool p_enable, float p_distance, float p_transition, float p_far_amount, VS::EnvironmentDOFBlurQuality p_quality) {} - void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale) {} + void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale) {} + void environment_set_fog(RID p_env, bool p_enable, float p_begin, float p_end, RID p_gradient_texture) {} void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_int, float p_fade_out, float p_depth_tolerance, bool p_roughness) {} @@ -74,7 +75,7 @@ public: void environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, RID p_ramp) {} void environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount) {} - void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve) {} + void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve) {} void environment_set_fog_height(RID p_env, bool p_enable, float p_min_height, float p_max_height, float p_height_curve) {} bool is_environment(RID p_env) { return false; } @@ -584,22 +585,12 @@ public: SelfList<RasterizerScene::InstanceBase>::List instance_list; - _FORCE_INLINE_ void instance_change_notify() { - - SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first(); - while (instances) { - - instances->self()->base_changed(); - instances = instances->next(); - } - } - - _FORCE_INLINE_ void instance_material_change_notify() { + _FORCE_INLINE_ void instance_change_notify(bool p_aabb = true, bool p_materials = true) { SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first(); while (instances) { - instances->self()->base_material_changed(); + instances->self()->base_changed(p_aabb, p_materials); instances = instances->next(); } } @@ -691,6 +682,8 @@ public: int particles_get_draw_passes(RID p_particles) const { return 0; } RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const { return RID(); } + virtual bool particles_is_inactive(RID p_particles) const { return false; } + /* RENDER TARGET */ RID render_target_create() { return RID(); } diff --git a/drivers/gles2/rasterizer_canvas_gles2.cpp b/drivers/gles2/rasterizer_canvas_gles2.cpp index 30776091a4..9227c04e71 100644 --- a/drivers/gles2/rasterizer_canvas_gles2.cpp +++ b/drivers/gles2/rasterizer_canvas_gles2.cpp @@ -1111,6 +1111,7 @@ void RasterizerCanvasGLES2::initialize() { // polygon buffer { uint32_t poly_size = GLOBAL_DEF("rendering/limits/buffers/canvas_polygon_buffer_size_kb", 128); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/canvas_polygon_buffer_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/canvas_polygon_buffer_size_kb", PROPERTY_HINT_RANGE, "0,256,1,or_greater")); poly_size *= 1024; poly_size = MAX(poly_size, (2 + 2 + 4) * 4 * sizeof(float)); glGenBuffers(1, &data.polygon_buffer); @@ -1122,6 +1123,7 @@ void RasterizerCanvasGLES2::initialize() { glBindBuffer(GL_ARRAY_BUFFER, 0); uint32_t index_size = GLOBAL_DEF("rendering/limits/buffers/canvas_polygon_index_size_kb", 128); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/canvas_polygon_index_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/canvas_polygon_index_size_kb", PROPERTY_HINT_RANGE, "0,256,1,or_greater")); index_size *= 1024; // kb glGenBuffers(1, &data.polygon_index_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, data.polygon_index_buffer); @@ -1185,7 +1187,6 @@ void RasterizerCanvasGLES2::initialize() { _EIDX(1, 1), _EIDX(1, 2), _EIDX(2, 2), _EIDX(2, 2), _EIDX(2, 1), _EIDX(1, 1) }; - ; #undef _EIDX glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elems), elems, GL_STATIC_DRAW); @@ -1200,6 +1201,8 @@ void RasterizerCanvasGLES2::initialize() { state.canvas_shader.bind(); state.lens_shader.init(); + + state.canvas_shader.set_conditional(CanvasShaderGLES2::USE_PIXEL_SNAP, GLOBAL_DEF("rendering/quality/2d/use_pixel_snap", false)); } void RasterizerCanvasGLES2::finalize() { diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index 5f4b5428e8..f49dbfeabb 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -58,11 +58,13 @@ #define _EXT_DEBUG_SEVERITY_LOW_ARB 0x9148 #define _EXT_DEBUG_OUTPUT 0x92E0 -#if (defined WINDOWS_ENABLED) && !(defined UWP_ENABLED) +#ifndef GLAPIENTRY +#if defined(WINDOWS_ENABLED) && !defined(UWP_ENABLED) #define GLAPIENTRY APIENTRY #else #define GLAPIENTRY #endif +#endif #if !defined(GLES_OVER_GL) && !defined(IPHONE_ENABLED) // Used for debugging on mobile, but not iOS as EGL is not available @@ -74,6 +76,11 @@ #include <EGL/eglext.h> #endif +#if defined(MINGW_ENABLED) || defined(_MSC_VER) +#define strcpy strcpy_s +#endif + +#ifndef IPHONE_ENABLED static void GLAPIENTRY _gl_debug_print(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const GLvoid *userParam) { if (type == _EXT_DEBUG_TYPE_OTHER_ARB) @@ -83,6 +90,7 @@ static void GLAPIENTRY _gl_debug_print(GLenum source, GLenum type, GLuint id, GL return; //these are ultimately annoying, so removing for now char debSource[256], debType[256], debSev[256]; + if (source == _EXT_DEBUG_SOURCE_API_ARB) strcpy(debSource, "OpenGL"); else if (source == _EXT_DEBUG_SOURCE_WINDOW_SYSTEM_ARB) @@ -120,6 +128,7 @@ static void GLAPIENTRY _gl_debug_print(GLenum source, GLenum type, GLuint id, GL ERR_PRINTS(output); } +#endif // IPHONE_ENABLED typedef void (*DEBUGPROCARB)(GLenum source, GLenum type, diff --git a/drivers/gles2/rasterizer_scene_gles2.cpp b/drivers/gles2/rasterizer_scene_gles2.cpp index 15f1aa44be..7addbaa9fe 100644 --- a/drivers/gles2/rasterizer_scene_gles2.cpp +++ b/drivers/gles2/rasterizer_scene_gles2.cpp @@ -605,7 +605,6 @@ bool RasterizerSceneGLES2::reflection_probe_instance_postprocess_step(RID p_inst size >>= 1; int mipmaps = 6; - int mm_level = mipmaps - 1; storage->shaders.cubemap_filter.set_conditional(CubemapFilterShaderGLES2::USE_SOURCE_PANORAMA, false); storage->shaders.cubemap_filter.bind(); @@ -628,8 +627,6 @@ bool RasterizerSceneGLES2::reflection_probe_instance_postprocess_step(RID p_inst size >>= 1; - mm_level--; - lod++; } @@ -711,7 +708,7 @@ void RasterizerSceneGLES2::environment_set_dof_blur_near(RID p_env, bool p_enabl ERR_FAIL_COND(!env); } -void RasterizerSceneGLES2::environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale) { +void RasterizerSceneGLES2::environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale) { Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); } @@ -742,20 +739,39 @@ void RasterizerSceneGLES2::environment_set_adjustment(RID p_env, bool p_enable, } void RasterizerSceneGLES2::environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); + + env->fog_enabled = p_enable; + env->fog_color = p_color; + env->fog_sun_color = p_sun_color; + env->fog_sun_amount = p_sun_amount; } -void RasterizerSceneGLES2::environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve) { +void RasterizerSceneGLES2::environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); + + env->fog_depth_enabled = p_enable; + env->fog_depth_begin = p_depth_begin; + env->fog_depth_end = p_depth_end; + env->fog_depth_curve = p_depth_curve; + env->fog_transmit_enabled = p_transmit; + env->fog_transmit_curve = p_transmit_curve; } void RasterizerSceneGLES2::environment_set_fog_height(RID p_env, bool p_enable, float p_min_height, float p_max_height, float p_height_curve) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); -} + env->fog_height_enabled = p_enable; + env->fog_height_min = p_min_height; + env->fog_height_max = p_max_height; + env->fog_height_curve = p_height_curve; +} bool RasterizerSceneGLES2::is_environment(RID p_env) { return environment_owner.owns(p_env); } @@ -1191,6 +1207,8 @@ bool RasterizerSceneGLES2::_setup_material(RasterizerStorageGLES2::Material *p_m state.scene_shader.set_uniform(SceneShaderGLES2::SKELETON_TEXTURE_SIZE, p_skeleton_tex_size); + state.current_main_tex = 0; + for (int i = 0; i < tc; i++) { glActiveTexture(GL_TEXTURE0 + i); @@ -1221,6 +1239,9 @@ bool RasterizerSceneGLES2::_setup_material(RasterizerStorageGLES2::Material *p_m t = t->get_ptr(); glBindTexture(t->target, t->tex_id); + if (i == 0) { + state.current_main_tex = t->tex_id; + } } state.scene_shader.use_material((void *)p_material); @@ -2031,6 +2052,19 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements, glDisable(GL_BLEND); } + float fog_max_distance = 0; + bool using_fog = false; + if (p_env && !p_shadow && p_env->fog_enabled && (p_env->fog_depth_enabled || p_env->fog_height_enabled)) { + state.scene_shader.set_conditional(SceneShaderGLES2::FOG_DEPTH_ENABLED, p_env->fog_depth_enabled); + state.scene_shader.set_conditional(SceneShaderGLES2::FOG_HEIGHT_ENABLED, p_env->fog_height_enabled); + if (p_env->fog_depth_end > 0) { + fog_max_distance = p_env->fog_depth_end; + } else { + fog_max_distance = p_projection.get_z_far(); + } + using_fog = true; + } + RasterizerStorageGLES2::Texture *prev_lightmap = NULL; float lightmap_energy = 1.0; bool prev_use_lightmap_capture = false; @@ -2142,7 +2176,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements, } //condition to enable vertex lighting on this object - bool vertex_lit = light && (material->shader->spatial.uses_vertex_lighting || storage->config.force_vertex_shading) && !unshaded; + bool vertex_lit = (material->shader->spatial.uses_vertex_lighting || storage->config.force_vertex_shading) && ((!unshaded && light) || using_fog); //fog forces vertex lighting because it still applies even if unshaded or no fog if (vertex_lit != prev_vertex_lit) { state.scene_shader.set_conditional(SceneShaderGLES2::USE_VERTEX_LIGHTING, vertex_lit); @@ -2268,17 +2302,40 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements, rebind_light = true; rebind_reflection = true; rebind_lightmap = true; + + if (using_fog) { + + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_COLOR_BASE, p_env->fog_color); + Color sun_color_amount = p_env->fog_sun_color; + sun_color_amount.a = p_env->fog_sun_amount; + + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_SUN_COLOR_AMOUNT, sun_color_amount); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_TRANSMIT_ENABLED, p_env->fog_transmit_enabled); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_TRANSMIT_CURVE, p_env->fog_transmit_curve); + + if (p_env->fog_depth_enabled) { + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_DEPTH_BEGIN, p_env->fog_depth_begin); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_DEPTH_CURVE, p_env->fog_depth_curve); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_MAX_DISTANCE, fog_max_distance); + } + + if (p_env->fog_height_enabled) { + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_HEIGHT_MIN, p_env->fog_height_min); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_HEIGHT_MAX, p_env->fog_height_max); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_HEIGHT_MAX, p_env->fog_height_max); + state.scene_shader.set_uniform(SceneShaderGLES2::FOG_HEIGHT_CURVE, p_env->fog_height_curve); + } + } } - state.scene_shader.set_uniform(SceneShaderGLES2::CAMERA_MATRIX, view_transform_inverse); - state.scene_shader.set_uniform(SceneShaderGLES2::CAMERA_INVERSE_MATRIX, p_view_transform); + state.scene_shader.set_uniform(SceneShaderGLES2::CAMERA_MATRIX, p_view_transform); + state.scene_shader.set_uniform(SceneShaderGLES2::CAMERA_INVERSE_MATRIX, view_transform_inverse); state.scene_shader.set_uniform(SceneShaderGLES2::PROJECTION_MATRIX, p_projection); state.scene_shader.set_uniform(SceneShaderGLES2::PROJECTION_INVERSE_MATRIX, projection_inverse); state.scene_shader.set_uniform(SceneShaderGLES2::TIME, storage->frame.time[0]); state.scene_shader.set_uniform(SceneShaderGLES2::SCREEN_PIXEL_SIZE, screen_pixel_size); - state.scene_shader.set_uniform(SceneShaderGLES2::NORMAL_MULT, 1.0); // TODO mirror? } if (rebind_light && light) { @@ -2328,6 +2385,8 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements, state.scene_shader.set_conditional(SceneShaderGLES2::USE_REFLECTION_PROBE2, false); state.scene_shader.set_conditional(SceneShaderGLES2::USE_LIGHTMAP, false); state.scene_shader.set_conditional(SceneShaderGLES2::USE_LIGHTMAP_CAPTURE, false); + state.scene_shader.set_conditional(SceneShaderGLES2::FOG_DEPTH_ENABLED, false); + state.scene_shader.set_conditional(SceneShaderGLES2::FOG_HEIGHT_ENABLED, false); } void RasterizerSceneGLES2::_draw_sky(RasterizerStorageGLES2::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy) { @@ -2402,13 +2461,20 @@ void RasterizerSceneGLES2::_draw_sky(RasterizerStorageGLES2::Sky *p_sky, const C glEnableVertexAttribArray(VS::ARRAY_VERTEX); glEnableVertexAttribArray(VS::ARRAY_TEX_UV); + storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_ASYM_PANO, asymmetrical); + storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_PANORAMA, !asymmetrical); storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_MULTIPLIER, true); storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_CUBEMAP, false); - storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_PANORAMA, true); storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_COPY_SECTION, false); storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_CUSTOM_ALPHA, false); storage->shaders.copy.bind(); storage->shaders.copy.set_uniform(CopyShaderGLES2::MULTIPLIER, p_energy); + if (asymmetrical) { + // pack the bits we need from our projection matrix + storage->shaders.copy.set_uniform(CopyShaderGLES2::ASYM_PROJ, camera.matrix[2][0], camera.matrix[0][0], camera.matrix[2][1], camera.matrix[1][1]); + ///@TODO I couldn't get mat3 + p_transform.basis to work, that would be better here. + storage->shaders.copy.set_uniform(CopyShaderGLES2::PANO_TRANSFORM, p_transform); + } glDrawArrays(GL_TRIANGLE_FAN, 0, 4); @@ -2416,6 +2482,8 @@ void RasterizerSceneGLES2::_draw_sky(RasterizerStorageGLES2::Sky *p_sky, const C glDisableVertexAttribArray(VS::ARRAY_TEX_UV); glBindBuffer(GL_ARRAY_BUFFER, 0); + storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_ASYM_PANO, false); + storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_PANORAMA, false); storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_MULTIPLIER, false); storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_CUBEMAP, false); } @@ -2426,6 +2494,7 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const Environment *env = NULL; int viewport_width, viewport_height; + bool probe_interior = false; if (p_reflection_probe.is_valid()) { ReflectionProbeInstance *probe = reflection_probe_instance_owner.getornull(p_reflection_probe); @@ -2443,6 +2512,8 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const viewport_width = probe->probe_ptr->resolution; viewport_height = probe->probe_ptr->resolution; + probe_interior = probe->probe_ptr->interior; + } else { state.render_no_shadows = false; current_fb = storage->frame.current_rt->fbo; @@ -2516,9 +2587,30 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + // clear color - storage->frame.clear_request = false; + Color clear_color(0, 0, 0, 0); + + if (storage->frame.current_rt && storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_TRANSPARENT]) { + clear_color = Color(0, 0, 0, 0); + storage->frame.clear_request = false; + } else if (!env || env->bg_mode == VS::ENV_BG_CLEAR_COLOR || env->bg_mode == VS::ENV_BG_SKY) { + if (storage->frame.clear_request) { + clear_color = storage->frame.clear_request_color.to_linear(); + storage->frame.clear_request = false; + } + } else if (env->bg_mode == VS::ENV_BG_CANVAS || env->bg_mode == VS::ENV_BG_COLOR || env->bg_mode == VS::ENV_BG_COLOR_SKY) { + clear_color = env->bg_color.to_linear(); + storage->frame.clear_request = false; + } else { + storage->frame.clear_request = false; + } + + if (!env || env->bg_mode != VS::ENV_BG_KEEP) { + glClearColor(clear_color.r, clear_color.g, clear_color.b, clear_color.a); + } + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1); @@ -2553,6 +2645,10 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const } } + if (probe_interior) { + env_radiance_tex = 0; //do not use radiance texture on interiors + } + // render opaque things first render_list.sort_by_key(false); _render_render_list(render_list.elements, render_list.element_count, p_cam_transform, p_cam_projection, p_shadow_atlas, env, env_radiance_tex, 0.0, 0.0, false, false, false); @@ -2984,6 +3080,7 @@ void RasterizerSceneGLES2::initialize() { { uint32_t immediate_buffer_size = GLOBAL_DEF("rendering/limits/buffers/immediate_buffer_size_kb", 2048); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/immediate_buffer_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/immediate_buffer_size_kb", PROPERTY_HINT_RANGE, "0,8192,1,or_greater")); glGenBuffers(1, &state.immediate_buffer); glBindBuffer(GL_ARRAY_BUFFER, state.immediate_buffer); diff --git a/drivers/gles2/rasterizer_scene_gles2.h b/drivers/gles2/rasterizer_scene_gles2.h index 14b9116952..ba406183c7 100644 --- a/drivers/gles2/rasterizer_scene_gles2.h +++ b/drivers/gles2/rasterizer_scene_gles2.h @@ -353,6 +353,22 @@ public: int canvas_max_layer; + bool fog_enabled; + Color fog_color; + Color fog_sun_color; + float fog_sun_amount; + + bool fog_depth_enabled; + float fog_depth_begin; + float fog_depth_end; + float fog_depth_curve; + bool fog_transmit_enabled; + float fog_transmit_curve; + bool fog_height_enabled; + float fog_height_min; + float fog_height_max; + float fog_height_curve; + Environment() { bg_mode = VS::ENV_BG_CLEAR_COLOR; sky_custom_fov = 0.0; @@ -361,6 +377,25 @@ public: ambient_energy = 1.0; ambient_sky_contribution = 0.0; canvas_max_layer = 0; + + fog_enabled = false; + fog_color = Color(0.5, 0.5, 0.5); + fog_sun_color = Color(0.8, 0.8, 0.0); + fog_sun_amount = 0; + + fog_depth_enabled = true; + + fog_depth_begin = 10; + fog_depth_end = 0; + fog_depth_curve = 1; + + fog_transmit_enabled = true; + fog_transmit_curve = 1; + + fog_height_enabled = false; + fog_height_min = 0; + fog_height_max = 100; + fog_height_curve = 1; } }; @@ -378,7 +413,7 @@ public: virtual void environment_set_dof_blur_near(RID p_env, bool p_enable, float p_distance, float p_transition, float p_amount, VS::EnvironmentDOFBlurQuality p_quality); virtual void environment_set_dof_blur_far(RID p_env, bool p_enable, float p_distance, float p_transition, float p_amount, VS::EnvironmentDOFBlurQuality p_quality); - virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale); + virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale); virtual void environment_set_fog(RID p_env, bool p_enable, float p_begin, float p_end, RID p_gradient_texture); virtual void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_in, float p_fade_out, float p_depth_tolerance, bool p_roughness); @@ -389,7 +424,7 @@ public: virtual void environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, RID p_ramp); virtual void environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount); - virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve); + virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve); virtual void environment_set_fog_height(RID p_env, bool p_enable, float p_min_height, float p_max_height, float p_height_curve); virtual bool is_environment(RID p_env); diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index d5865064cf..3beb8eac33 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -613,8 +613,72 @@ Ref<Image> RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer) return Ref<Image>(img); #else - ERR_EXPLAIN("Sorry, It's not possible to obtain images back in OpenGL ES"); - ERR_FAIL_V(Ref<Image>()); + Image::Format real_format; + GLenum gl_format; + GLenum gl_internal_format; + GLenum gl_type; + bool compressed; + _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed); + + PoolVector<uint8_t> data; + + int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, Image::FORMAT_RGBA8, false); + + data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers + PoolVector<uint8_t>::Write wb = data.write(); + + GLuint temp_framebuffer; + glGenFramebuffers(1, &temp_framebuffer); + + GLuint temp_color_texture; + glGenTextures(1, &temp_color_texture); + + glBindFramebuffer(GL_FRAMEBUFFER, temp_framebuffer); + + glBindTexture(GL_TEXTURE_2D, temp_color_texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->alloc_width, texture->alloc_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, temp_color_texture, 0); + + glDepthMask(GL_FALSE); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glDisable(GL_BLEND); + glDepthFunc(GL_LEQUAL); + glColorMask(1, 1, 1, 1); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texture->tex_id); + + glViewport(0, 0, texture->alloc_width, texture->alloc_height); + + shaders.copy.bind(); + + glClearColor(0.0, 0.0, 0.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); + bind_quad_array(); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glReadPixels(0, 0, texture->alloc_width, texture->alloc_height, GL_RGBA, GL_UNSIGNED_BYTE, &wb[0]); + + glDeleteTextures(1, &temp_color_texture); + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glDeleteFramebuffers(1, &temp_framebuffer); + + wb = PoolVector<uint8_t>::Write(); + + data.resize(data_size); + + Image *img = memnew(Image(texture->alloc_width, texture->alloc_height, false, Image::FORMAT_RGBA8, data)); + if (!texture->compressed) { + img->convert(real_format); + } + + return Ref<Image>(img); + #endif } @@ -1061,6 +1125,10 @@ void RasterizerStorageGLES2::_update_shader(Shader *p_shader) const { p_shader->uniforms.clear(); + if (p_shader->code == String()) { + return; //just invalid, but no error + } + ShaderCompilerGLES2::GeneratedCode gen_code; ShaderCompilerGLES2::IdentifierActions *actions = NULL; @@ -1429,8 +1497,9 @@ Variant RasterizerStorageGLES2::material_get_param_default(RID p_material, const if (material->shader) { if (material->shader->uniforms.has(p_param)) { - Vector<ShaderLanguage::ConstantNode::Value> default_value = material->shader->uniforms[p_param].default_value; - return ShaderLanguage::constant_value_to_variant(default_value, material->shader->uniforms[p_param].type); + ShaderLanguage::ShaderNode::Uniform uniform = material->shader->uniforms[p_param]; + Vector<ShaderLanguage::ConstantNode::Value> default_value = uniform.default_value; + return ShaderLanguage::constant_value_to_variant(default_value, uniform.type, uniform.hint); } } return Variant(); @@ -1538,7 +1607,7 @@ void RasterizerStorageGLES2::_update_material(Material *p_material) { if (p_material->shader && p_material->shader->mode == VS::SHADER_SPATIAL) { if (p_material->shader->spatial.blend_mode == Shader::Spatial::BLEND_MODE_MIX && - (!p_material->shader->spatial.uses_alpha || (p_material->shader->spatial.uses_alpha && p_material->shader->spatial.depth_draw_mode == Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS))) { + (!p_material->shader->spatial.uses_alpha || p_material->shader->spatial.depth_draw_mode == Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS)) { can_cast_shadow = true; } @@ -1559,7 +1628,7 @@ void RasterizerStorageGLES2::_update_material(Material *p_material) { } for (Map<RasterizerScene::InstanceBase *, int>::Element *E = p_material->instance_owners.front(); E; E = E->next()) { - E->key()->base_material_changed(); + E->key()->base_changed(false, true); } } } @@ -1946,7 +2015,7 @@ void RasterizerStorageGLES2::mesh_add_surface(RID p_mesh, uint32_t p_format, VS: } mesh->surfaces.push_back(surface); - mesh->instance_change_notify(); + mesh->instance_change_notify(true, false); info.vertex_mem += surface->total_data_size; } @@ -2016,7 +2085,7 @@ void RasterizerStorageGLES2::mesh_surface_set_material(RID p_mesh, int p_surface _material_add_geometry(mesh->surfaces[p_surface]->material, mesh->surfaces[p_surface]); } - mesh->instance_material_change_notify(); + mesh->instance_change_notify(false, true); } RID RasterizerStorageGLES2::mesh_surface_get_material(RID p_mesh, int p_surface) const { @@ -2124,13 +2193,11 @@ void RasterizerStorageGLES2::mesh_remove_surface(RID p_mesh, int p_surface) { info.vertex_mem -= surface->total_data_size; - mesh->instance_material_change_notify(); - memdelete(surface); mesh->surfaces.remove(p_surface); - mesh->instance_change_notify(); + mesh->instance_change_notify(true, true); } int RasterizerStorageGLES2::mesh_get_surface_count(RID p_mesh) const { @@ -2704,7 +2771,7 @@ void RasterizerStorageGLES2::update_dirty_multimeshes() { multimesh->dirty_aabb = false; multimesh->dirty_data = false; - multimesh->instance_change_notify(); + multimesh->instance_change_notify(true, false); multimesh_update_list.remove(multimesh_update_list.first()); } @@ -2809,7 +2876,7 @@ void RasterizerStorageGLES2::immediate_end(RID p_immediate) { ERR_FAIL_COND(!im->building); im->building = false; - im->instance_change_notify(); + im->instance_change_notify(true, false); } void RasterizerStorageGLES2::immediate_clear(RID p_immediate) { @@ -2818,7 +2885,7 @@ void RasterizerStorageGLES2::immediate_clear(RID p_immediate) { ERR_FAIL_COND(im->building); im->chunks.clear(); - im->instance_change_notify(); + im->instance_change_notify(true, false); } AABB RasterizerStorageGLES2::immediate_get_aabb(RID p_immediate) const { @@ -2832,7 +2899,7 @@ void RasterizerStorageGLES2::immediate_set_material(RID p_immediate, RID p_mater ERR_FAIL_COND(!im); im->material = p_material; - im->instance_material_change_notify(); + im->instance_change_notify(false, true); } RID RasterizerStorageGLES2::immediate_get_material(RID p_immediate) const { @@ -3043,7 +3110,7 @@ void RasterizerStorageGLES2::update_dirty_skeletons() { } for (Set<RasterizerScene::InstanceBase *>::Element *E = skeleton->instances.front(); E; E = E->next()) { - E->get()->base_changed(); + E->get()->base_changed(true, false); } skeleton_update_list.remove(skeleton_update_list.first()); @@ -3108,7 +3175,7 @@ void RasterizerStorageGLES2::light_set_param(RID p_light, VS::LightParam p_param case VS::LIGHT_PARAM_SHADOW_NORMAL_BIAS: case VS::LIGHT_PARAM_SHADOW_BIAS: { light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } break; default: {} } @@ -3123,7 +3190,7 @@ void RasterizerStorageGLES2::light_set_shadow(RID p_light, bool p_enabled) { light->shadow = p_enabled; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES2::light_set_shadow_color(RID p_light, const Color &p_color) { @@ -3154,7 +3221,7 @@ void RasterizerStorageGLES2::light_set_cull_mask(RID p_light, uint32_t p_mask) { light->cull_mask = p_mask; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES2::light_set_reverse_cull_face_mode(RID p_light, bool p_enabled) { @@ -3164,7 +3231,7 @@ void RasterizerStorageGLES2::light_set_reverse_cull_face_mode(RID p_light, bool light->reverse_cull = p_enabled; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES2::light_omni_set_shadow_mode(RID p_light, VS::LightOmniShadowMode p_mode) { @@ -3174,7 +3241,7 @@ void RasterizerStorageGLES2::light_omni_set_shadow_mode(RID p_light, VS::LightOm light->omni_shadow_mode = p_mode; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } VS::LightOmniShadowMode RasterizerStorageGLES2::light_omni_get_shadow_mode(RID p_light) { @@ -3191,7 +3258,7 @@ void RasterizerStorageGLES2::light_omni_set_shadow_detail(RID p_light, VS::Light light->omni_shadow_detail = p_detail; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES2::light_directional_set_shadow_mode(RID p_light, VS::LightDirectionalShadowMode p_mode) { @@ -3201,7 +3268,7 @@ void RasterizerStorageGLES2::light_directional_set_shadow_mode(RID p_light, VS:: light->directional_shadow_mode = p_mode; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES2::light_directional_set_blend_splits(RID p_light, bool p_enable) { @@ -3211,7 +3278,7 @@ void RasterizerStorageGLES2::light_directional_set_blend_splits(RID p_light, boo light->directional_blend_splits = p_enable; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } bool RasterizerStorageGLES2::light_directional_get_blend_splits(RID p_light) const { @@ -3330,7 +3397,7 @@ void RasterizerStorageGLES2::reflection_probe_set_update_mode(RID p_probe, VS::R ERR_FAIL_COND(!reflection_probe); reflection_probe->update_mode = p_mode; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES2::reflection_probe_set_intensity(RID p_probe, float p_intensity) { @@ -3371,7 +3438,7 @@ void RasterizerStorageGLES2::reflection_probe_set_max_distance(RID p_probe, floa ERR_FAIL_COND(!reflection_probe); reflection_probe->max_distance = p_distance; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES2::reflection_probe_set_extents(RID p_probe, const Vector3 &p_extents) { @@ -3379,7 +3446,7 @@ void RasterizerStorageGLES2::reflection_probe_set_extents(RID p_probe, const Vec ERR_FAIL_COND(!reflection_probe); reflection_probe->extents = p_extents; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES2::reflection_probe_set_origin_offset(RID p_probe, const Vector3 &p_offset) { @@ -3387,7 +3454,7 @@ void RasterizerStorageGLES2::reflection_probe_set_origin_offset(RID p_probe, con ERR_FAIL_COND(!reflection_probe); reflection_probe->origin_offset = p_offset; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES2::reflection_probe_set_as_interior(RID p_probe, bool p_enable) { @@ -3411,7 +3478,7 @@ void RasterizerStorageGLES2::reflection_probe_set_enable_shadows(RID p_probe, bo ERR_FAIL_COND(!reflection_probe); reflection_probe->enable_shadows = p_enable; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES2::reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers) { @@ -3419,7 +3486,7 @@ void RasterizerStorageGLES2::reflection_probe_set_cull_mask(RID p_probe, uint32_ ERR_FAIL_COND(!reflection_probe); reflection_probe->cull_mask = p_layers; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES2::reflection_probe_set_resolution(RID p_probe, int p_resolution) { @@ -3603,7 +3670,7 @@ void RasterizerStorageGLES2::lightmap_capture_set_bounds(RID p_capture, const AA LightmapCapture *capture = lightmap_capture_data_owner.getornull(p_capture); ERR_FAIL_COND(!capture); capture->bounds = p_bounds; - capture->instance_change_notify(); + capture->instance_change_notify(true, false); } AABB RasterizerStorageGLES2::lightmap_capture_get_bounds(RID p_capture) const { @@ -3624,7 +3691,7 @@ void RasterizerStorageGLES2::lightmap_capture_set_octree(RID p_capture, const Po PoolVector<uint8_t>::Read r = p_octree.read(); copymem(w.ptr(), r.ptr(), p_octree.size()); } - capture->instance_change_notify(); + capture->instance_change_notify(true, false); } PoolVector<uint8_t> RasterizerStorageGLES2::lightmap_capture_get_octree(RID p_capture) const { @@ -3775,6 +3842,10 @@ RID RasterizerStorageGLES2::particles_get_draw_pass_mesh(RID p_particles, int p_ void RasterizerStorageGLES2::update_particles() { } +bool RasterizerStorageGLES2::particles_is_inactive(RID p_particles) const { + return true; +} + //////// void RasterizerStorageGLES2::instance_add_skeleton(RID p_skeleton, RasterizerScene::InstanceBase *p_instance) { @@ -4394,6 +4465,7 @@ void RasterizerStorageGLES2::initialize() { } } + config.keep_original_textures = false; config.shrink_textures_x2 = false; config.float_texture_supported = config.extensions.has("GL_ARB_texture_float") || config.extensions.has("GL_OES_texture_float"); @@ -4541,6 +4613,7 @@ void RasterizerStorageGLES2::initialize() { #endif config.force_vertex_shading = GLOBAL_GET("rendering/quality/shading/force_vertex_shading"); + config.use_fast_texture_filter = GLOBAL_GET("rendering/quality/filters/use_nearest_mipmap_filter"); } void RasterizerStorageGLES2::finalize() { diff --git a/drivers/gles2/rasterizer_storage_gles2.h b/drivers/gles2/rasterizer_storage_gles2.h index b42e2dfb1f..5bdc65a0b5 100644 --- a/drivers/gles2/rasterizer_storage_gles2.h +++ b/drivers/gles2/rasterizer_storage_gles2.h @@ -43,7 +43,6 @@ /* #include "shaders/blend_shape.glsl.gen.h" #include "shaders/canvas.glsl.gen.h" -#include "shaders/copy.glsl.gen.h" #include "shaders/particles.glsl.gen.h" */ @@ -61,20 +60,12 @@ public: bool shrink_textures_x2; bool use_fast_texture_filter; - // bool use_anisotropic_filter; - - bool hdr_supported; - - bool use_rgba_2d_shadows; - - // float anisotropic_level; int max_texture_image_units; int max_texture_size; - bool generate_wireframes; - - bool use_texture_array_environment; + // TODO implement wireframe in GLES2 + // bool generate_wireframes; Set<String> extensions; @@ -84,7 +75,6 @@ public: bool keep_original_textures; - bool no_depth_prepass; bool force_vertex_shading; } config; @@ -160,20 +150,12 @@ public: struct Instantiable : public RID_Data { SelfList<RasterizerScene::InstanceBase>::List instance_list; - _FORCE_INLINE_ void instance_change_notify() { - SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first(); - - while (instances) { - instances->self()->base_changed(); - instances = instances->next(); - } - } + _FORCE_INLINE_ void instance_change_notify(bool p_aabb, bool p_materials) { - _FORCE_INLINE_ void instance_material_change_notify() { SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first(); - while (instances) { - instances->self()->base_material_changed(); + + instances->self()->base_changed(p_aabb, p_materials); instances = instances->next(); } } @@ -273,31 +255,28 @@ public: void *detect_normal_ud; Texture() { - flags = 0; - width = 0; - height = 0; alloc_width = 0; alloc_height = 0; - format = Image::FORMAT_L8; - target = 0; - data_size = 0; - total_data_size = 0; + stored_cube_sides = 0; ignore_mipmaps = false; - - compressed = false; - - active = false; - + render_target = NULL; + flags = width = height = 0; tex_id = 0; - - stored_cube_sides = 0; - + data_size = 0; + format = Image::FORMAT_L8; + active = false; + compressed = false; + total_data_size = 0; + mipmaps = 0; + detect_3d = NULL; + detect_3d_ud = NULL; + detect_srgb = NULL; + detect_srgb_ud = NULL; + detect_normal = NULL; + detect_normal_ud = NULL; proxy = NULL; - - render_target = NULL; - redraw_if_visible = false; } @@ -430,6 +409,7 @@ public: int light_mode; */ + bool uses_screen_texture; bool uses_screen_uv; bool uses_time; @@ -673,7 +653,7 @@ public: SelfList<MultiMesh> *mm = multimeshes.first(); while (mm) { - mm->self()->instance_material_change_notify(); + mm->self()->instance_change_notify(false, true); mm = mm->next(); } } @@ -1110,6 +1090,8 @@ public: virtual int particles_get_draw_passes(RID p_particles) const; virtual RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const; + virtual bool particles_is_inactive(RID p_particles) const; + /* INSTANCE */ virtual void instance_add_skeleton(RID p_skeleton, RasterizerScene::InstanceBase *p_instance); diff --git a/drivers/gles2/shader_compiler_gles2.cpp b/drivers/gles2/shader_compiler_gles2.cpp index 082c520480..45b0d695a3 100644 --- a/drivers/gles2/shader_compiler_gles2.cpp +++ b/drivers/gles2/shader_compiler_gles2.cpp @@ -80,19 +80,17 @@ static String _opstr(SL::Operator p_op) { static String _mkid(const String &p_id) { - StringBuffer<> id; - id += "m_"; - id += p_id; - - return id.as_string(); + String id = "m_" + p_id; + return id.replace("__", "_dus_"); //doubleunderscore is reserverd in glsl } static String f2sp0(float p_float) { - if (int(p_float) == p_float) - return itos(p_float) + ".0"; - else - return rtoss(p_float); + String num = rtoss(p_float); + if (num.find(".") == -1 && num.find("e") == -1) { + num += ".0"; + } + return num; } static String get_constant_text(SL::DataType p_type, const Vector<SL::ConstantNode::Value> &p_values) { @@ -364,6 +362,7 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener for (int i = 0; i < snode->functions.size(); i++) { SL::FunctionNode *fnode = snode->functions[i].function; + current_func_name = fnode->name; function_code[fnode->name] = _dump_node_code(fnode->body, 1, r_gen_code, p_actions, p_default_actions, p_assigning); } @@ -815,8 +814,8 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { /** SPATIAL SHADER **/ actions[VS::SHADER_SPATIAL].renames["WORLD_MATRIX"] = "world_transform"; - actions[VS::SHADER_SPATIAL].renames["INV_CAMERA_MATRIX"] = "camera_matrix"; - actions[VS::SHADER_SPATIAL].renames["CAMERA_MATRIX"] = "camera_inverse_matrix"; + actions[VS::SHADER_SPATIAL].renames["INV_CAMERA_MATRIX"] = "camera_inverse_matrix"; + actions[VS::SHADER_SPATIAL].renames["CAMERA_MATRIX"] = "camera_matrix"; actions[VS::SHADER_SPATIAL].renames["PROJECTION_MATRIX"] = "projection_matrix"; actions[VS::SHADER_SPATIAL].renames["INV_PROJECTION_MATRIX"] = "projection_inverse_matrix"; actions[VS::SHADER_SPATIAL].renames["MODELVIEW_MATRIX"] = "modelview"; @@ -932,7 +931,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { actions[VS::SHADER_PARTICLES].renames["COLOR"] = "out_color"; actions[VS::SHADER_PARTICLES].renames["VELOCITY"] = "out_velocity_active.xyz"; actions[VS::SHADER_PARTICLES].renames["MASS"] = "mass"; - actions[VS::SHADER_PARTICLES].renames["ACTIVE"] = "active"; + actions[VS::SHADER_PARTICLES].renames["ACTIVE"] = "shader_active"; actions[VS::SHADER_PARTICLES].renames["RESTART"] = "restart"; actions[VS::SHADER_PARTICLES].renames["CUSTOM"] = "out_custom"; actions[VS::SHADER_PARTICLES].renames["TRANSFORM"] = "xform"; diff --git a/drivers/gles2/shader_gles2.cpp b/drivers/gles2/shader_gles2.cpp index 628a57c06d..84bd413abb 100644 --- a/drivers/gles2/shader_gles2.cpp +++ b/drivers/gles2/shader_gles2.cpp @@ -99,7 +99,7 @@ void ShaderGLES2::bind_uniforms() { const Map<uint32_t, CameraMatrix>::Element *C = uniform_cameras.front(); while (C) { - int idx = E->key(); + int idx = C->key(); int location = version->uniform_location[idx]; if (location < 0) { @@ -196,6 +196,12 @@ static void _display_error_with_code(const String &p_error, const Vector<const c ERR_PRINTS(p_error); } +static String _mkid(const String &p_id) { + + String id = "m_" + p_id; + return id.replace("__", "_dus_"); //doubleunderscore is reserverd in glsl +} + ShaderGLES2::Version *ShaderGLES2::get_current_version() { Version *_v = version_map.getptr(conditional_version); @@ -492,15 +498,15 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() { if (cc) { // uniforms for (int i = 0; i < cc->custom_uniforms.size(); i++) { - StringName native_uniform_name = "m_" + cc->custom_uniforms[i]; - GLint location = glGetUniformLocation(v.id, ((String)native_uniform_name).ascii().get_data()); + String native_uniform_name = _mkid(cc->custom_uniforms[i]); + GLint location = glGetUniformLocation(v.id, (native_uniform_name).ascii().get_data()); v.custom_uniform_locations[cc->custom_uniforms[i]] = location; } // textures for (int i = 0; i < cc->texture_uniforms.size(); i++) { - StringName native_uniform_name = "m_" + cc->texture_uniforms[i]; - GLint location = glGetUniformLocation(v.id, ((String)native_uniform_name).ascii().get_data()); + String native_uniform_name = _mkid(cc->texture_uniforms[i]); + GLint location = glGetUniformLocation(v.id, (native_uniform_name).ascii().get_data()); v.custom_uniform_locations[cc->texture_uniforms[i]] = location; } } diff --git a/drivers/gles2/shaders/canvas.glsl b/drivers/gles2/shaders/canvas.glsl index 3db60f7caa..79d4eb2243 100644 --- a/drivers/gles2/shaders/canvas.glsl +++ b/drivers/gles2/shaders/canvas.glsl @@ -96,6 +96,10 @@ VERTEX_SHADER_CODE color_interp = color; +#ifdef USE_PIXEL_SNAP + outvec.xy = floor(outvec + 0.5).xy; +#endif + gl_Position = projection_matrix * outvec; } @@ -144,7 +148,10 @@ void main() { vec4 color = color_interp; +#if !defined(COLOR_USED) + //default behavior, texture by color color *= texture2D(color_texture, uv_interp); +#endif #ifdef SCREEN_UV_USED vec2 screen_uv = gl_FragCoord.xy * screen_pixel_size; diff --git a/drivers/gles2/shaders/copy.glsl b/drivers/gles2/shaders/copy.glsl index 16bbde196d..0b8da4f875 100644 --- a/drivers/gles2/shaders/copy.glsl +++ b/drivers/gles2/shaders/copy.glsl @@ -35,6 +35,8 @@ void main() { #if defined(USE_CUBEMAP) || defined(USE_PANORAMA) cube_interp = cube_in; +#elif defined(USE_ASYM_PANO) + uv_interp = vertex_attrib.xy; #else uv_interp = uv_in; #endif @@ -68,6 +70,11 @@ varying vec2 uv_interp; #endif /* clang-format on */ +#ifdef USE_ASYM_PANO +uniform highp mat4 pano_transform; +uniform highp vec4 asym_proj; +#endif + #ifdef USE_CUBEMAP uniform samplerCube source_cube; // texunit:0 #else @@ -108,6 +115,21 @@ void main() { vec4 color = texturePanorama(source, normalize(cube_interp)); +#elif defined(USE_ASYM_PANO) + + // When an asymmetrical projection matrix is used (applicable for stereoscopic rendering i.e. VR) we need to do this calculation per fragment to get a perspective correct result. + // Note that we're ignoring the x-offset for IPD, with Z sufficiently in the distance it becomes neglectible, as a result we could probably just set cube_normal.z to -1. + // The Matrix[2][0] (= asym_proj.x) and Matrix[2][1] (= asym_proj.z) values are what provide the right shift in the image. + + vec3 cube_normal; + cube_normal.z = -1000000.0; + cube_normal.x = (cube_normal.z * (-uv_interp.x - asym_proj.x)) / asym_proj.y; + cube_normal.y = (cube_normal.z * (-uv_interp.y - asym_proj.z)) / asym_proj.a; + cube_normal = mat3(pano_transform) * cube_normal; + cube_normal.z = -cube_normal.z; + + vec4 color = texturePanorama(source, normalize(cube_normal.xyz)); + #elif defined(USE_CUBEMAP) vec4 color = textureCube(source_cube, normalize(cube_interp)); #else diff --git a/drivers/gles2/shaders/scene.glsl b/drivers/gles2/shaders/scene.glsl index 42b50790b2..15b90a7771 100644 --- a/drivers/gles2/shaders/scene.glsl +++ b/drivers/gles2/shaders/scene.glsl @@ -75,17 +75,15 @@ attribute highp vec4 instance_custom_data; // attrib:12 // uniforms // -uniform mat4 camera_matrix; -uniform mat4 camera_inverse_matrix; -uniform mat4 projection_matrix; -uniform mat4 projection_inverse_matrix; +uniform highp mat4 camera_matrix; +uniform highp mat4 camera_inverse_matrix; +uniform highp mat4 projection_matrix; +uniform highp mat4 projection_inverse_matrix; -uniform mat4 world_transform; +uniform highp mat4 world_transform; uniform highp float time; -uniform float normal_mult; - #ifdef RENDER_DEPTH uniform float light_bias; uniform float light_normal_bias; @@ -156,22 +154,22 @@ varying highp vec3 diffuse_interp; varying highp vec3 specular_interp; // general for all lights -uniform vec4 light_color; -uniform float light_specular; +uniform highp vec4 light_color; +uniform highp float light_specular; // directional -uniform vec3 light_direction; +uniform highp vec3 light_direction; // omni -uniform vec3 light_position; +uniform highp vec3 light_position; -uniform float light_range; -uniform float light_attenuation; +uniform highp float light_range; +uniform highp float light_attenuation; // spot -uniform float light_spot_attenuation; -uniform float light_spot_range; -uniform float light_spot_angle; +uniform highp float light_spot_attenuation; +uniform highp float light_spot_range; +uniform highp float light_spot_angle; void light_compute( vec3 N, @@ -247,7 +245,7 @@ void light_compute( float cLdotH = max(dot(L, H), 0.0); float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25; float blinn = pow(cNdotH, shininess); - blinn *= (shininess + 8.0) / (8.0 * 3.141592654); + blinn *= (shininess + 8.0) * (1.0 / (8.0 * M_PI)); specular_brdf_NL = (blinn) / max(4.0 * cNdotV * cNdotL, 0.75); #endif @@ -262,9 +260,9 @@ void light_compute( #ifdef USE_REFLECTION_PROBE1 -uniform mat4 refprobe1_local_matrix; +uniform highp mat4 refprobe1_local_matrix; varying mediump vec4 refprobe1_reflection_normal_blend; -uniform vec3 refprobe1_box_extents; +uniform highp vec3 refprobe1_box_extents; #ifndef USE_LIGHTMAP varying mediump vec3 refprobe1_ambient_normal; @@ -274,9 +272,9 @@ varying mediump vec3 refprobe1_ambient_normal; #ifdef USE_REFLECTION_PROBE2 -uniform mat4 refprobe2_local_matrix; +uniform highp mat4 refprobe2_local_matrix; varying mediump vec4 refprobe2_reflection_normal_blend; -uniform vec3 refprobe2_box_extents; +uniform highp vec3 refprobe2_box_extents; #ifndef USE_LIGHTMAP varying mediump vec3 refprobe2_ambient_normal; @@ -286,6 +284,32 @@ varying mediump vec3 refprobe2_ambient_normal; #endif //vertex lighting for refprobes +#if defined(FOG_DEPTH_ENABLED) || defined(FOG_HEIGHT_ENABLED) + +varying vec4 fog_interp; + +uniform mediump vec4 fog_color_base; +#ifdef LIGHT_MODE_DIRECTIONAL +uniform mediump vec4 fog_sun_color_amount; +#endif + +uniform bool fog_transmit_enabled; +uniform mediump float fog_transmit_curve; + +#ifdef FOG_DEPTH_ENABLED +uniform highp float fog_depth_begin; +uniform mediump float fog_depth_curve; +uniform mediump float fog_max_distance; +#endif + +#ifdef FOG_HEIGHT_ENABLED +uniform highp float fog_height_min; +uniform highp float fog_height_max; +uniform mediump float fog_height_curve; +#endif + +#endif //fog + void main() { highp vec4 vertex = vertex_attrib; @@ -304,11 +328,10 @@ void main() { #endif - vec3 normal = normal_attrib * normal_mult; + vec3 normal = normal_attrib; #if defined(ENABLE_TANGENT_INTERP) || defined(ENABLE_NORMALMAP) vec3 tangent = tangent_attrib.xyz; - tangent *= normal_mult; float binormalf = tangent_attrib.a; vec3 binormal = normalize(cross(normal, tangent) * binormalf); #endif @@ -333,7 +356,7 @@ void main() { normal = normalize((world_matrix * vec4(normal, 0.0)).xyz); #if defined(ENABLE_TANGENT_INTERP) || defined(ENABLE_NORMALMAP) - tangent = normalize((world_matrix * vec4(tangent, 0.0)), xyz); + tangent = normalize((world_matrix * vec4(tangent, 0.0)).xyz); binormal = normalize((world_matrix * vec4(binormal, 0.0)).xyz); #endif #endif @@ -379,7 +402,7 @@ void main() { #endif - mat4 modelview = camera_matrix * world_matrix; + mat4 modelview = camera_inverse_matrix * world_matrix; float roughness = 1.0; #define world_transform world_matrix @@ -406,11 +429,11 @@ VERTEX_SHADER_CODE #endif #if !defined(SKIP_TRANSFORM_USED) && defined(VERTEX_WORLD_COORDS_USED) - vertex = camera_matrix * vertex; - normal = normalize((camera_matrix * vec4(normal, 0.0)).xyz); + vertex = camera_inverse_matrix * vertex; + normal = normalize((camera_inverse_matrix * vec4(normal, 0.0)).xyz); #if defined(ENABLE_TANGENT_INTERP) || defined(ENABLE_NORMALMAP) - tangent = normalize((camera_matrix * vec4(tangent, 0.0)).xyz); - binormal = normalize((camera_matrix * vec4(binormal, 0.0)).xyz); + tangent = normalize((camera_inverse_matrix * vec4(tangent, 0.0)).xyz); + binormal = normalize((camera_inverse_matrix * vec4(binormal, 0.0)).xyz); #endif #endif @@ -583,6 +606,37 @@ VERTEX_SHADER_CODE #endif //USE_REFLECTION_PROBE2 +#if defined(FOG_DEPTH_ENABLED) || defined(FOG_HEIGHT_ENABLED) + + float fog_amount = 0.0; + +#ifdef LIGHT_MODE_DIRECTIONAL + + vec3 fog_color = mix(fog_color_base.rgb, fog_sun_color_amount.rgb, fog_sun_color_amount.a * pow(max(dot(normalize(vertex_interp), light_direction), 0.0), 8.0)); +#else + vec3 fog_color = fog_color_base.rgb; +#endif + +#ifdef FOG_DEPTH_ENABLED + + { + + float fog_z = smoothstep(fog_depth_begin, fog_max_distance, length(vertex)); + + fog_amount = pow(fog_z, fog_depth_curve) * fog_color_base.a; + } +#endif + +#ifdef FOG_HEIGHT_ENABLED + { + float y = (camera_matrix * vec4(vertex_interp, 1.0)).y; + fog_amount = max(fog_amount, pow(smoothstep(fog_height_min, fog_height_max, y), fog_height_curve)); + } +#endif + fog_interp = vec4(fog_color, fog_amount); + +#endif //fog + #endif //use vertex lighting gl_Position = projection_matrix * vec4(vertex_interp, 1.0); } @@ -613,13 +667,13 @@ precision highp int; // uniforms // -uniform mat4 camera_matrix; +uniform highp mat4 camera_matrix; /* clang-format on */ -uniform mat4 camera_inverse_matrix; -uniform mat4 projection_matrix; -uniform mat4 projection_inverse_matrix; +uniform highp mat4 camera_inverse_matrix; +uniform highp mat4 projection_matrix; +uniform highp mat4 projection_inverse_matrix; -uniform mat4 world_transform; +uniform highp mat4 world_transform; uniform highp float time; @@ -646,9 +700,9 @@ varying mediump vec3 refprobe1_ambient_normal; #else uniform bool refprobe1_use_box_project; -uniform vec3 refprobe1_box_extents; +uniform highp vec3 refprobe1_box_extents; uniform vec3 refprobe1_box_offset; -uniform mat4 refprobe1_local_matrix; +uniform highp mat4 refprobe1_local_matrix; #endif //use vertex lighting @@ -673,9 +727,9 @@ varying mediump vec3 refprobe2_ambient_normal; #else uniform bool refprobe2_use_box_project; -uniform vec3 refprobe2_box_extents; +uniform highp vec3 refprobe2_box_extents; uniform vec3 refprobe2_box_offset; -uniform mat4 refprobe2_local_matrix; +uniform highp mat4 refprobe2_local_matrix; #endif //use vertex lighting @@ -816,27 +870,29 @@ uniform float ambient_energy; varying highp vec3 diffuse_interp; varying highp vec3 specular_interp; +uniform highp vec3 light_direction; //may be used by fog, so leave here + #else //done in fragment // general for all lights -uniform vec4 light_color; -uniform float light_specular; +uniform highp vec4 light_color; +uniform highp float light_specular; // directional -uniform vec3 light_direction; +uniform highp vec3 light_direction; // omni -uniform vec3 light_position; +uniform highp vec3 light_position; -uniform float light_attenuation; +uniform highp float light_attenuation; // spot -uniform float light_spot_attenuation; -uniform float light_spot_range; -uniform float light_spot_angle; +uniform highp float light_spot_attenuation; +uniform highp float light_spot_range; +uniform highp float light_spot_angle; #endif //this is needed outside above if because dual paraboloid wants it -uniform float light_range; +uniform highp float light_range; #ifdef USE_SHADOW @@ -953,9 +1009,7 @@ float G_GGX_2cos(float cos_theta_m, float alpha) { // This approximates G_GGX_2cos(cos_theta_l, alpha) * G_GGX_2cos(cos_theta_v, alpha) // See Filament docs, Specular G section. float V_GGX(float cos_theta_l, float cos_theta_v, float alpha) { - float v = cos_theta_l * (cos_theta_v * (1.0 - alpha) + alpha); - float l = cos_theta_v * (cos_theta_l * (1.0 - alpha) + alpha); - return 0.5 / (v + l); + return 0.5 / mix(2.0 * cos_theta_l * cos_theta_v, cos_theta_l + cos_theta_v, alpha); } float D_GGX(float cos_theta_m, float alpha) { @@ -1065,7 +1119,19 @@ LIGHT_SHADER_CODE float NdotL = dot(N, L); float cNdotL = max(NdotL, 0.0); // clamped NdotL float NdotV = dot(N, V); - float cNdotV = max(NdotV, 0.0); + float cNdotV = max(abs(NdotV), 1e-6); + +#if defined(DIFFUSE_BURLEY) || defined(SPECULAR_BLINN) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_USE_CLEARCOAT) + vec3 H = normalize(V + L); +#endif + +#if defined(SPECULAR_BLINN) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_USE_CLEARCOAT) + float cNdotH = max(dot(N, H), 0.0); +#endif + +#if defined(DIFFUSE_BURLEY) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_USE_CLEARCOAT) + float cLdotH = max(dot(L, H), 0.0); +#endif if (metallic < 1.0) { #if defined(DIFFUSE_OREN_NAYAR) @@ -1101,13 +1167,9 @@ LIGHT_SHADER_CODE #elif defined(DIFFUSE_BURLEY) { - - vec3 H = normalize(V + L); - float cLdotH = max(0.0, dot(L, H)); - - float FD90 = 0.5 + 2.0 * cLdotH * cLdotH * roughness; - float FdV = 1.0 + (FD90 - 1.0) * SchlickFresnel(cNdotV); - float FdL = 1.0 + (FD90 - 1.0) * SchlickFresnel(cNdotL); + float FD90_minus_1 = 2.0 * cLdotH * cLdotH * roughness - 0.5; + float FdV = 1.0 + FD90_minus_1 * SchlickFresnel(cNdotV); + float FdL = 1.0 + FD90_minus_1 * SchlickFresnel(cNdotL); diffuse_brdf_NL = (1.0 / M_PI) * FdV * FdL * cNdotL; /* float energyBias = mix(roughness, 0.0, 0.5); @@ -1150,13 +1212,9 @@ LIGHT_SHADER_CODE #if defined(SPECULAR_BLINN) //normalized blinn - vec3 H = normalize(V + L); - float cNdotH = max(dot(N, H), 0.0); - float cVdotH = max(dot(V, H), 0.0); - float cLdotH = max(dot(L, H), 0.0); float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25; float blinn = pow(cNdotH, shininess); - blinn *= (shininess + 8.0) / (8.0 * 3.141592654); + blinn *= (shininess + 8.0) * (1.0 / (8.0 * M_PI)); specular_brdf_NL = (blinn) / max(4.0 * cNdotV * cNdotL, 0.75); #elif defined(SPECULAR_PHONG) @@ -1165,7 +1223,7 @@ LIGHT_SHADER_CODE float cRdotV = max(0.0, dot(R, V)); float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25; float phong = pow(cRdotV, shininess); - phong *= (shininess + 8.0) / (8.0 * 3.141592654); + phong *= (shininess + 8.0) * (1.0 / (8.0 * M_PI)); specular_brdf_NL = (phong) / max(4.0 * cNdotV * cNdotL, 0.75); #elif defined(SPECULAR_TOON) @@ -1181,18 +1239,13 @@ LIGHT_SHADER_CODE #elif defined(SPECULAR_SCHLICK_GGX) // shlick+ggx as default - vec3 H = normalize(V + L); - - float cNdotH = max(dot(N, H), 0.0); - float cLdotH = max(dot(L, H), 0.0); - #if defined(LIGHT_USE_ANISOTROPY) float alpha = roughness * roughness; float aspect = sqrt(1.0 - anisotropy * 0.9); float ax = alpha / aspect; float ay = alpha * aspect; - //float XdotH = dot(T, H); - //float YdotH = dot(B, H); + float XdotH = dot(T, H); + float YdotH = dot(B, H); float D = D_GGX_anisotropic(cNdotH, ax, ay, XdotH, YdotH, cNdotH); //float G = G_GGX_anisotropic_2cos(cNdotL, ax, ay, XdotH, YdotH) * G_GGX_anisotropic_2cos(cNdotV, ax, ay, XdotH, YdotH); float G = V_GGX_anisotropic(ax, ay, dot(T, V), dot(T, L), dot(B, V), dot(B, L), cNdotV, cNdotL)) @@ -1216,24 +1269,18 @@ LIGHT_SHADER_CODE specular_light += specular_brdf_NL * light_color * specular_blob_intensity * attenuation; #if defined(LIGHT_USE_CLEARCOAT) - if (clearcoat_gloss > 0.0) { -#if !defined(SPECULAR_SCHLICK_GGX) && !defined(SPECULAR_BLINN) - vec3 H = normalize(V + L); -#endif + #if !defined(SPECULAR_SCHLICK_GGX) - float cNdotH = max(dot(N, H), 0.0); - float cLdotH = max(dot(L, H), 0.0); - float cLdotH5 = SchlickFresnel(cLdotH); + float cLdotH5 = SchlickFresnel(cLdotH); #endif - float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss)); - float Fr = mix(.04, 1.0, cLdotH5); - //float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25); - float Gr = V_GGX(cNdotL, cNdotV, 0.25); + float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss)); + float Fr = mix(.04, 1.0, cLdotH5); + //float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25); + float Gr = V_GGX(cNdotL, cNdotV, 0.25); - float clearcoat_specular_brdf_NL = 0.25 * clearcoat * Gr * Fr * Dr * cNdotL; + float clearcoat_specular_brdf_NL = 0.25 * clearcoat * Gr * Fr * Dr * cNdotL; - specular_light += clearcoat_specular_brdf_NL * light_color * specular_blob_intensity * attenuation; - } + specular_light += clearcoat_specular_brdf_NL * light_color * specular_blob_intensity * attenuation; #endif } @@ -1248,8 +1295,7 @@ LIGHT_SHADER_CODE #define SAMPLE_SHADOW_TEXEL(p_shadow, p_pos, p_depth) step(p_depth, texture2D(p_shadow, p_pos).r) #define SAMPLE_SHADOW_TEXEL_PROJ(p_shadow, p_pos) step(p_pos.z, texture2DProj(p_shadow, p_pos).r) -float sample_shadow( - highp sampler2D shadow, highp vec4 spos) { +float sample_shadow(highp sampler2D shadow, highp vec4 spos) { #ifdef SHADOW_MODE_PCF_13 @@ -1296,6 +1342,36 @@ float sample_shadow( #endif +#if defined(FOG_DEPTH_ENABLED) || defined(FOG_HEIGHT_ENABLED) + +#if defined(USE_VERTEX_LIGHTING) + +varying vec4 fog_interp; + +#else +uniform mediump vec4 fog_color_base; +#ifdef LIGHT_MODE_DIRECTIONAL +uniform mediump vec4 fog_sun_color_amount; +#endif + +uniform bool fog_transmit_enabled; +uniform mediump float fog_transmit_curve; + +#ifdef FOG_DEPTH_ENABLED +uniform highp float fog_depth_begin; +uniform mediump float fog_depth_curve; +uniform mediump float fog_max_distance; +#endif + +#ifdef FOG_HEIGHT_ENABLED +uniform highp float fog_height_min; +uniform highp float fog_height_max; +uniform mediump float fog_height_curve; +#endif + +#endif //vertex lit +#endif //fog + void main() { #ifdef RENDER_DEPTH_DUAL_PARABOLOID @@ -1540,7 +1616,7 @@ FRAGMENT_SHADER_CODE highp vec4 splane = shadow_coord; float shadow_len = length(splane.xyz); - splane = normalize(splane.xyz); + splane.xyz = normalize(splane.xyz); vec4 clamp_rect = light_clamp; @@ -1834,12 +1910,12 @@ FRAGMENT_SHADER_CODE highp vec4 splane = shadow_coord; splane.xyz /= splane.w; - float shadow = sample_shadow(light_shadow_atlas, splane.xy, splane.z); + float shadow = sample_shadow(light_shadow_atlas, splane); light_att *= shadow; } #endif -#endif +#endif // LIGHT_MODE_SPOT #ifdef USE_VERTEX_LIGHTING //vertex lighting @@ -1926,5 +2002,50 @@ FRAGMENT_SHADER_CODE #endif //unshaded +//apply fog +#if defined(FOG_DEPTH_ENABLED) || defined(FOG_HEIGHT_ENABLED) + +#if defined(USE_VERTEX_LIGHTING) + + gl_FragColor.rgb = mix(gl_FragColor.rgb, fog_interp.rgb, fog_interp.a); +#else //pixel based fog + float fog_amount = 0.0; + +#ifdef LIGHT_MODE_DIRECTIONAL + + vec3 fog_color = mix(fog_color_base.rgb, fog_sun_color_amount.rgb, fog_sun_color_amount.a * pow(max(dot(eye_position, light_direction), 0.0), 8.0)); +#else + vec3 fog_color = fog_color_base.rgb; +#endif + +#ifdef FOG_DEPTH_ENABLED + + { + + float fog_z = smoothstep(fog_depth_begin, fog_max_distance, length(vertex)); + + fog_amount = pow(fog_z, fog_depth_curve) * fog_color_base.a; + + if (fog_transmit_enabled) { + vec3 total_light = gl_FragColor.rgb; + float transmit = pow(fog_z, fog_transmit_curve); + fog_color = mix(max(total_light, fog_color), fog_color, transmit); + } + } +#endif + +#ifdef FOG_HEIGHT_ENABLED + { + float y = (camera_matrix * vec4(vertex, 1.0)).y; + fog_amount = max(fog_amount, pow(smoothstep(fog_height_min, fog_height_max, y), fog_height_curve)); + } +#endif + + gl_FragColor.rgb = mix(gl_FragColor.rgb, fog_color, fog_amount); + +#endif //use vertex lit + +#endif // defined(FOG_DEPTH_ENABLED) || defined(FOG_HEIGHT_ENABLED) + #endif // not RENDER_DEPTH } diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index a9b46baf53..4166cb8361 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -213,12 +213,12 @@ RasterizerStorageGLES3::Texture *RasterizerCanvasGLES3::_bind_canvas_texture(con } else { + texture = texture->get_ptr(); + if (texture->redraw_if_visible) { //check before proxy, because this is usually used with proxies VisualServerRaster::redraw_request(); } - texture = texture->get_ptr(); - if (texture->render_target) texture->render_target->used_in_frame = true; @@ -254,11 +254,12 @@ RasterizerStorageGLES3::Texture *RasterizerCanvasGLES3::_bind_canvas_texture(con } else { + normal_map = normal_map->get_ptr(); + if (normal_map->redraw_if_visible) { //check before proxy, because this is usually used with proxies VisualServerRaster::redraw_request(); } - normal_map = normal_map->get_ptr(); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, normal_map->tex_id); state.current_normal = p_normal_map; @@ -976,7 +977,7 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur RasterizerStorageGLES3::Texture *texture = _bind_canvas_texture(particles_cmd->texture, particles_cmd->normal_map); if (texture) { - Size2 texpixel_size(1.0 / (texture->width / particles_cmd->h_frames), 1.0 / (texture->height / particles_cmd->v_frames)); + Size2 texpixel_size(1.0 / texture->width, 1.0 / texture->height); state.canvas_shader.set_uniform(CanvasShaderGLES3::COLOR_TEXPIXEL_SIZE, texpixel_size); } else { state.canvas_shader.set_uniform(CanvasShaderGLES3::COLOR_TEXPIXEL_SIZE, Vector2(1.0, 1.0)); @@ -993,9 +994,6 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur state.canvas_shader.set_uniform(CanvasShaderGLES3::MODELVIEW_MATRIX, state.final_transform * inv_xf); } - state.canvas_shader.set_uniform(CanvasShaderGLES3::H_FRAMES, particles_cmd->h_frames); - state.canvas_shader.set_uniform(CanvasShaderGLES3::V_FRAMES, particles_cmd->v_frames); - glBindVertexArray(data.particle_quad_array); //use particle quad array glBindBuffer(GL_ARRAY_BUFFER, particles->particle_buffers[0]); //bind particle buffer @@ -1072,8 +1070,8 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur glBindVertexArray(0); state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_INSTANCE_CUSTOM, false); - state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_INSTANCING, false); state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_PARTICLES, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_INSTANCING, false); state.using_texture_rect = true; _set_texture_rect_mode(false); @@ -1223,8 +1221,6 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons bool rebind_shader = true; - state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_DISTANCE_FIELD, false); - glBindBuffer(GL_UNIFORM_BUFFER, state.canvas_item_ubo); glBufferData(GL_UNIFORM_BUFFER, sizeof(CanvasItemUBO), &state.canvas_item_ubo_data, GL_DYNAMIC_DRAW); glBindBuffer(GL_UNIFORM_BUFFER, 0); @@ -1342,7 +1338,7 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons last_blend_mode = last_blend_mode != RasterizerStorageGLES3::Shader::CanvasItem::BLEND_MODE_DISABLED ? last_blend_mode : -1; } - if (shader_ptr != shader_cache) { + if (shader_ptr != shader_cache || rebind_shader) { if (shader_ptr->canvas_item.uses_time) { VisualServerRaster::redraw_request(); @@ -1388,12 +1384,12 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons continue; } + t = t->get_ptr(); + if (t->redraw_if_visible) { //check before proxy, because this is usually used with proxies VisualServerRaster::redraw_request(); } - t = t->get_ptr(); - if (storage->config.srgb_decode_supported && t->using_srgb) { //no srgb in 2D glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _SKIP_DECODE_EXT); @@ -1659,6 +1655,14 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons if (current_clip) { glDisable(GL_SCISSOR_TEST); } + //disable states that may have been used + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_DISTANCE_FIELD, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_SKELETON, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_INSTANCE_CUSTOM, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_PARTICLES, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_INSTANCING, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_LIGHTING, false); + state.canvas_shader.set_conditional(CanvasShaderGLES3::USE_SHADOWS, false); } void RasterizerCanvasGLES3::canvas_debug_viewport_shadows(Light *p_lights_with_shadow) { @@ -2027,6 +2031,7 @@ void RasterizerCanvasGLES3::initialize() { { uint32_t poly_size = GLOBAL_DEF_RST("rendering/limits/buffers/canvas_polygon_buffer_size_kb", 128); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/canvas_polygon_buffer_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/canvas_polygon_buffer_size_kb", PROPERTY_HINT_RANGE, "0,256,1,or_greater")); poly_size *= 1024; //kb poly_size = MAX(poly_size, (2 + 2 + 4) * 4 * sizeof(float)); glGenBuffers(1, &data.polygon_buffer); @@ -2074,6 +2079,7 @@ void RasterizerCanvasGLES3::initialize() { glGenVertexArrays(1, &data.polygon_buffer_pointer_array); uint32_t index_size = GLOBAL_DEF_RST("rendering/limits/buffers/canvas_polygon_index_buffer_size_kb", 128); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/canvas_polygon_index_buffer_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/canvas_polygon_index_buffer_size_kb", PROPERTY_HINT_RANGE, "0,256,1,or_greater")); index_size *= 1024; //kb glGenBuffers(1, &data.polygon_index_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, data.polygon_index_buffer); diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index a97cd32faa..8242d214d3 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -73,12 +73,12 @@ RasterizerScene *RasterizerGLES3::get_scene() { #define _EXT_DEBUG_SEVERITY_LOW_ARB 0x9148 #define _EXT_DEBUG_OUTPUT 0x92E0 -#if (defined WINDOWS_ENABLED) && !(defined UWP_ENABLED) -#define GLAPIENTRY APIENTRY -#else -#define GLAPIENTRY +#if defined(MINGW_ENABLED) || defined(_MSC_VER) +#define strcpy strcpy_s #endif +#ifdef GLAD_ENABLED +// Restricting to GLAD as only used in initialize() with GLAD_GL_ARB_debug_output static void GLAPIENTRY _gl_debug_print(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const GLvoid *userParam) { if (type == _EXT_DEBUG_TYPE_OTHER_ARB) @@ -123,6 +123,7 @@ static void GLAPIENTRY _gl_debug_print(GLenum source, GLenum type, GLuint id, GL ERR_PRINTS(output); } +#endif // GLAD_ENABLED typedef void (*DEBUGPROCARB)(GLenum source, GLenum type, @@ -425,10 +426,10 @@ void RasterizerGLES3::make_current() { void RasterizerGLES3::register_config() { - GLOBAL_DEF("rendering/quality/filters/use_nearest_mipmap_filter", false); GLOBAL_DEF("rendering/quality/filters/anisotropic_filter_level", 4); ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/anisotropic_filter_level", PropertyInfo(Variant::INT, "rendering/quality/filters/anisotropic_filter_level", PROPERTY_HINT_RANGE, "1,16,1")); GLOBAL_DEF("rendering/limits/time/time_rollover_secs", 3600); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/time/time_rollover_secs", PropertyInfo(Variant::REAL, "rendering/limits/time/time_rollover_secs", PROPERTY_HINT_RANGE, "0,10000,1,or_greater")); } RasterizerGLES3::RasterizerGLES3() { diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 14c436fd00..ffe9e1c831 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -653,7 +653,7 @@ bool RasterizerSceneGLES3::reflection_probe_instance_begin_render(RID p_instance int best_free = -1; int best_used = -1; - uint64_t best_used_frame; + uint64_t best_used_frame = 0; for (int i = 0; i < reflection_atlas->reflections.size(); i++) { if (reflection_atlas->reflections[i].owner == RID()) { @@ -846,7 +846,7 @@ void RasterizerSceneGLES3::environment_set_dof_blur_near(RID p_env, bool p_enabl env->dof_blur_near_amount = p_amount; env->dof_blur_near_quality = p_quality; } -void RasterizerSceneGLES3::environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale) { +void RasterizerSceneGLES3::environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale) { Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); @@ -859,6 +859,7 @@ void RasterizerSceneGLES3::environment_set_glow(RID p_env, bool p_enable, int p_ env->glow_blend_mode = p_blend_mode; env->glow_hdr_bleed_threshold = p_hdr_bleed_threshold; env->glow_hdr_bleed_scale = p_hdr_bleed_scale; + env->glow_hdr_luminance_cap = p_hdr_luminance_cap; env->glow_bicubic_upscale = p_bicubic_upscale; } void RasterizerSceneGLES3::environment_set_fog(RID p_env, bool p_enable, float p_begin, float p_end, RID p_gradient_texture) { @@ -934,13 +935,14 @@ void RasterizerSceneGLES3::environment_set_fog(RID p_env, bool p_enable, const C env->fog_sun_amount = p_sun_amount; } -void RasterizerSceneGLES3::environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve) { +void RasterizerSceneGLES3::environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve) { Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); env->fog_depth_enabled = p_enable; env->fog_depth_begin = p_depth_begin; + env->fog_depth_end = p_depth_end; env->fog_depth_curve = p_depth_curve; env->fog_transmit_enabled = p_transmit; env->fog_transmit_curve = p_transmit_curve; @@ -1189,11 +1191,12 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m if (t) { + t = t->get_ptr(); //resolve for proxies + if (t->redraw_if_visible) { //must check before proxy because this is often used with proxies VisualServerRaster::redraw_request(); } - t = t->get_ptr(); //resolve for proxies #ifdef TOOLS_ENABLED if (t->detect_3d) { t->detect_3d(t->detect_3d_ud); @@ -1246,14 +1249,11 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m case ShaderLanguage::TYPE_SAMPLER3D: { target = GL_TEXTURE_3D; + tex = storage->resources.white_tex_3d; - switch (texture_hints[i]) { - - // TODO - default: { - tex = storage->resources.white_tex_3d; - } break; - } + //switch (texture_hints[i]) { + // TODO + //} } break; @@ -1431,7 +1431,16 @@ void RasterizerSceneGLES3::_setup_geometry(RenderList::Element *e, const Transfo if (particles->draw_order == VS::PARTICLES_DRAW_ORDER_VIEW_DEPTH && particles->particle_valid_histories[1]) { glBindBuffer(GL_ARRAY_BUFFER, particles->particle_buffer_histories[1]); //modify the buffer, this was used 2 frames ago so it should be good enough for flushing - RasterizerGLES3Particle *particle_array = (RasterizerGLES3Particle *)glMapBufferRange(GL_ARRAY_BUFFER, 0, particles->amount * 24 * sizeof(float), GL_MAP_READ_BIT | GL_MAP_WRITE_BIT); + RasterizerGLES3Particle *particle_array; +#ifndef __EMSCRIPTEN__ + particle_array = static_cast<RasterizerGLES3Particle *>(glMapBufferRange(GL_ARRAY_BUFFER, 0, particles->amount * 24 * sizeof(float), GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); +#else + PoolVector<RasterizerGLES3Particle> particle_vector; + particle_vector.resize(particles->amount); + PoolVector<RasterizerGLES3Particle>::Write w = particle_vector.write(); + particle_array = w.ptr(); + glGetBufferSubData(GL_ARRAY_BUFFER, 0, particles->amount * sizeof(RasterizerGLES3Particle), particle_array); +#endif SortArray<RasterizerGLES3Particle, RasterizerGLES3ParticleSort> sorter; @@ -1443,7 +1452,17 @@ void RasterizerSceneGLES3::_setup_geometry(RenderList::Element *e, const Transfo sorter.sort(particle_array, particles->amount); +#ifndef __EMSCRIPTEN__ glUnmapBuffer(GL_ARRAY_BUFFER); +#else + w = PoolVector<RasterizerGLES3Particle>::Write(); + particle_array = NULL; + { + PoolVector<RasterizerGLES3Particle>::Read r = particle_vector.read(); + glBufferSubData(GL_ARRAY_BUFFER, 0, particles->amount * sizeof(RasterizerGLES3Particle), r.ptr()); + } + particle_vector = PoolVector<RasterizerGLES3Particle>(); +#endif #ifdef DEBUG_ENABLED if (state.debug_draw == VS::VIEWPORT_DEBUG_DRAW_WIREFRAME && s->instancing_array_wireframe_id) { glBindVertexArray(s->instancing_array_wireframe_id); // use the wireframe instancing array ID @@ -2205,7 +2224,6 @@ void RasterizerSceneGLES3::_render_list(RenderList::Element **p_elements, int p_ _set_cull(e->sort_key & RenderList::SORT_KEY_MIRROR_FLAG, e->sort_key & RenderList::SORT_KEY_CULL_DISABLED_FLAG, p_reverse_cull); - state.scene_shader.set_uniform(SceneShaderGLES3::NORMAL_MULT, e->instance->mirror ? -1.0 : 1.0); state.scene_shader.set_uniform(SceneShaderGLES3::WORLD_TRANSFORM, e->instance->transform); _render_geometry(e); @@ -2519,7 +2537,7 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C storage->shaders.copy.set_conditional(CopyShaderGLES3::USE_PANORAMA, false); } -void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform) { +void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform, bool p_no_fog) { //store camera into ubo store_camera(p_cam_projection, state.ubo_data.projection_matrix); @@ -2570,7 +2588,8 @@ void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatr state.ubo_data.fog_color_enabled[0] = linear_fog.r; state.ubo_data.fog_color_enabled[1] = linear_fog.g; state.ubo_data.fog_color_enabled[2] = linear_fog.b; - state.ubo_data.fog_color_enabled[3] = env->fog_enabled ? 1.0 : 0.0; + state.ubo_data.fog_color_enabled[3] = (!p_no_fog && env->fog_enabled) ? 1.0 : 0.0; + state.ubo_data.fog_density = linear_fog.a; Color linear_sun = env->fog_sun_color.to_linear(); state.ubo_data.fog_sun_color_amount[0] = linear_sun.r; @@ -2579,6 +2598,7 @@ void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatr state.ubo_data.fog_sun_color_amount[3] = env->fog_sun_amount; state.ubo_data.fog_depth_enabled = env->fog_depth_enabled; state.ubo_data.fog_depth_begin = env->fog_depth_begin; + state.ubo_data.fog_depth_end = env->fog_depth_end; state.ubo_data.fog_depth_curve = env->fog_depth_curve; state.ubo_data.fog_transmit_enabled = env->fog_transmit_enabled; state.ubo_data.fog_transmit_curve = env->fog_transmit_curve; @@ -3020,20 +3040,17 @@ void RasterizerSceneGLES3::_setup_reflections(RID *p_reflection_probe_cull_resul reflection_ubo.ambient[3] = rpi->probe_ptr->interior_ambient_probe_contrib; } else { Color ambient_linear; - // FIXME: contrib was retrieved but never used, is it meant to be set as ambient[3]? (GH-20361) - //float contrib = 0; if (p_env) { ambient_linear = p_env->ambient_color.to_linear(); ambient_linear.r *= p_env->ambient_energy; ambient_linear.g *= p_env->ambient_energy; ambient_linear.b *= p_env->ambient_energy; - //contrib = p_env->ambient_sky_contribution; } reflection_ubo.ambient[0] = ambient_linear.r; reflection_ubo.ambient[1] = ambient_linear.g; reflection_ubo.ambient[2] = ambient_linear.b; - reflection_ubo.ambient[3] = 0; + reflection_ubo.ambient[3] = 0; //not used in exterior mode, since it just blends with regular ambient light } int cell_size = reflection_atlas->size / reflection_atlas->subdiv; @@ -3580,7 +3597,7 @@ void RasterizerSceneGLES3::_post_process(Environment *env, const CameraMatrix &p glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); } - if (!env || storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_TRANSPARENT]) { + if (!env || storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_TRANSPARENT] || storage->frame.current_rt->width < 4 || storage->frame.current_rt->height < 4) { //no post process on small render targets //no environment or transparent render, simply return and convert to SRGB glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->fbo); glActiveTexture(GL_TEXTURE0); @@ -3882,6 +3899,7 @@ void RasterizerSceneGLES3::_post_process(Environment *env, const CameraMatrix &p state.effect_blur_shader.set_uniform(EffectBlurShaderGLES3::PIXEL_SIZE, Vector2(1.0 / vp_w, 1.0 / vp_h)); state.effect_blur_shader.set_uniform(EffectBlurShaderGLES3::LOD, float(i)); state.effect_blur_shader.set_uniform(EffectBlurShaderGLES3::GLOW_STRENGTH, env->glow_strength); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES3::LUMINANCE_CAP, env->glow_hdr_luminance_cap); glActiveTexture(GL_TEXTURE0); if (i == 0) { @@ -4083,7 +4101,7 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const state.ubo_data.screen_pixel_size[1] = 1.0 / storage->frame.current_rt->height; } - _setup_environment(env, p_cam_projection, p_cam_transform); + _setup_environment(env, p_cam_projection, p_cam_transform, p_reflection_probe.is_valid()); bool fb_cleared = false; @@ -4278,8 +4296,10 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const glClearBufferfv(GL_COLOR, 0, clear_color.components); // specular } + VS::EnvironmentBG bg_mode = (!env || (probe && env->bg_mode == VS::ENV_BG_CANVAS)) ? VS::ENV_BG_CLEAR_COLOR : env->bg_mode; //if no environment, or canvas while rendering a probe (invalid use case), use color. + if (env) { - switch (env->bg_mode) { + switch (bg_mode) { case VS::ENV_BG_COLOR_SKY: case VS::ENV_BG_SKY: @@ -4322,6 +4342,10 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const } } + if (probe && probe->probe_ptr->interior) { + env_radiance_tex = 0; //for rendering probe interiors, radiance must not be used. + } + state.texscreen_copied = false; glBlendEquation(GL_FUNC_ADD); @@ -4855,10 +4879,7 @@ void RasterizerSceneGLES3::initialize() { glBindBuffer(GL_UNIFORM_BUFFER, 0); render_list.max_elements = GLOBAL_DEF_RST("rendering/limits/rendering/max_renderable_elements", (int)RenderList::DEFAULT_MAX_ELEMENTS); - if (render_list.max_elements > 1000000) - render_list.max_elements = 1000000; - if (render_list.max_elements < 1024) - render_list.max_elements = 1024; + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/rendering/max_renderable_elements", PropertyInfo(Variant::INT, "rendering/limits/rendering/max_renderable_elements", PROPERTY_HINT_RANGE, "1024,1000000,1")); { //quad buffers @@ -5057,6 +5078,7 @@ void RasterizerSceneGLES3::initialize() { { uint32_t immediate_buffer_size = GLOBAL_DEF("rendering/limits/buffers/immediate_buffer_size_kb", 2048); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/immediate_buffer_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/immediate_buffer_size_kb", PROPERTY_HINT_RANGE, "0,8192,1,or_greater")); glGenBuffers(1, &state.immediate_buffer); glBindBuffer(GL_ARRAY_BUFFER, state.immediate_buffer); diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index b4c4a0558f..0e6027c4ad 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -145,6 +145,8 @@ public: uint32_t fog_depth_enabled; float fog_depth_begin; + float fog_depth_end; + float fog_density; float fog_depth_curve; uint32_t fog_transmit_enabled; float fog_transmit_curve; @@ -402,6 +404,7 @@ public: VS::EnvironmentGlowBlendMode glow_blend_mode; float glow_hdr_bleed_threshold; float glow_hdr_bleed_scale; + float glow_hdr_luminance_cap; bool glow_bicubic_upscale; VS::EnvironmentToneMapper tone_mapper; @@ -438,6 +441,7 @@ public: bool fog_depth_enabled; float fog_depth_begin; + float fog_depth_end; float fog_depth_curve; bool fog_transmit_enabled; float fog_transmit_curve; @@ -491,6 +495,7 @@ public: glow_blend_mode = VS::GLOW_BLEND_MODE_SOFTLIGHT; glow_hdr_bleed_threshold = 1.0; glow_hdr_bleed_scale = 2.0; + glow_hdr_luminance_cap = 12.0; glow_bicubic_upscale = false; dof_blur_far_enabled = false; @@ -518,6 +523,7 @@ public: fog_depth_enabled = true; fog_depth_begin = 10; + fog_depth_end = 0; fog_depth_curve = 1; fog_transmit_enabled = true; @@ -544,7 +550,7 @@ public: virtual void environment_set_dof_blur_near(RID p_env, bool p_enable, float p_distance, float p_transition, float p_amount, VS::EnvironmentDOFBlurQuality p_quality); virtual void environment_set_dof_blur_far(RID p_env, bool p_enable, float p_distance, float p_transition, float p_amount, VS::EnvironmentDOFBlurQuality p_quality); - virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale); + virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale); virtual void environment_set_fog(RID p_env, bool p_enable, float p_begin, float p_end, RID p_gradient_texture); virtual void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_in, float p_fade_out, float p_depth_tolerance, bool p_roughness); @@ -555,7 +561,7 @@ public: virtual void environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, RID p_ramp); virtual void environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount); - virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve); + virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve); virtual void environment_set_fog_height(RID p_env, bool p_enable, float p_min_height, float p_max_height, float p_height_curve); virtual bool is_environment(RID p_env); @@ -831,7 +837,7 @@ public: void _draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy); - void _setup_environment(Environment *env, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform); + void _setup_environment(Environment *env, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform, bool p_no_fog = false); void _setup_directional_light(int p_index, const Transform &p_camera_inverse_transform, bool p_use_shadows); void _setup_lights(RID *p_light_cull_result, int p_light_cull_count, const Transform &p_camera_inverse_transform, const CameraMatrix &p_camera_projection, RID p_shadow_atlas); void _setup_reflections(RID *p_reflection_probe_cull_result, int p_reflection_probe_cull_count, const Transform &p_camera_inverse_transform, const CameraMatrix &p_camera_projection, RID p_reflection_atlas, Environment *p_env); diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 58c0a104c1..2b038fcc0e 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -101,6 +101,28 @@ #define _EXT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E #define _EXT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#ifdef __EMSCRIPTEN__ +#include <emscripten/emscripten.h> + +void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data) { + + /* clang-format off */ + EM_ASM({ + GLctx.getBufferSubData($0, $1, HEAPU8, $2, $3); + }, target, offset, data, size); + /* clang-format on */ +} + +void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data) { + + /* clang-format off */ + EM_ASM({ + GLctx.bufferSubData($0, $1, HEAPU8, $2, $3); + }, target, offset, data, size); + /* clang-format on */ +} +#endif + void glTexStorage2DCustom(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type) { #ifdef GLES_OVER_GL @@ -730,7 +752,7 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Ref<Image> &p } }; - GLenum blit_target; + GLenum blit_target = GL_TEXTURE_2D; switch (texture->type) { case VS::TEXTURE_TYPE_2D: { @@ -852,8 +874,6 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Ref<Image> &p int size, ofs; img->get_mipmap_offset_and_size(i, ofs, size); - //print_line("mipmap: "+itos(i)+" size: "+itos(size)+" w: "+itos(mm_w)+", h: "+itos(mm_h)); - if (texture->type == VS::TEXTURE_TYPE_2D || texture->type == VS::TEXTURE_TYPE_CUBEMAP) { if (texture->compressed) { @@ -948,7 +968,7 @@ void RasterizerStorageGLES3::texture_set_data_partial(RID p_texture, const Ref<I Image::Format real_format; Ref<Image> img = _get_gl_image_and_format(p_sub_img, p_sub_img->get_format(), texture->flags, real_format, format, internal_format, type, compressed, srgb); - GLenum blit_target; + GLenum blit_target = GL_TEXTURE_2D; switch (texture->type) { case VS::TEXTURE_TYPE_2D: { @@ -1040,8 +1060,6 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - //print_line("GET FORMAT: " + Image::get_format_name(texture->format) + " mipmaps: " + itos(texture->mipmaps)); - for (int i = 0; i < texture->mipmaps; i++) { int ofs = 0; @@ -1094,8 +1112,76 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) return Ref<Image>(img); #else - ERR_EXPLAIN("Sorry, It's not possible to obtain images back in OpenGL ES"); - ERR_FAIL_V(Ref<Image>()); + Image::Format real_format; + GLenum gl_format; + GLenum gl_internal_format; + GLenum gl_type; + bool compressed; + bool srgb; + _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb); + + PoolVector<uint8_t> data; + + int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, Image::FORMAT_RGBA8, false); + + data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers + PoolVector<uint8_t>::Write wb = data.write(); + + GLuint temp_framebuffer; + glGenFramebuffers(1, &temp_framebuffer); + + GLuint temp_color_texture; + glGenTextures(1, &temp_color_texture); + + glBindFramebuffer(GL_FRAMEBUFFER, temp_framebuffer); + + glBindTexture(GL_TEXTURE_2D, temp_color_texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->alloc_width, texture->alloc_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, temp_color_texture, 0); + + glDepthMask(GL_FALSE); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glDisable(GL_BLEND); + glDepthFunc(GL_LEQUAL); + glColorMask(1, 1, 1, 1); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texture->tex_id); + + glViewport(0, 0, texture->alloc_width, texture->alloc_height); + + shaders.copy.bind(); + + shaders.copy.set_conditional(CopyShaderGLES3::LINEAR_TO_SRGB, !srgb); + + glClearColor(0.0, 0.0, 0.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); + glBindVertexArray(resources.quadie_array); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + glBindVertexArray(0); + + glReadPixels(0, 0, texture->alloc_width, texture->alloc_height, GL_RGBA, GL_UNSIGNED_BYTE, &wb[0]); + + shaders.copy.set_conditional(CopyShaderGLES3::LINEAR_TO_SRGB, false); + + glDeleteTextures(1, &temp_color_texture); + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glDeleteFramebuffers(1, &temp_framebuffer); + + wb = PoolVector<uint8_t>::Write(); + + data.resize(data_size); + + Image *img = memnew(Image(texture->alloc_width, texture->alloc_height, false, Image::FORMAT_RGBA8, data)); + if (!texture->compressed) { + img->convert(real_format); + } + + return Ref<Image>(img); #endif } @@ -1811,6 +1897,10 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const { p_shader->uniforms.clear(); + if (p_shader->code == String()) { + return; //just invalid, but no error + } + ShaderCompilerGLES3::GeneratedCode gen_code; ShaderCompilerGLES3::IdentifierActions *actions = NULL; @@ -2157,8 +2247,9 @@ Variant RasterizerStorageGLES3::material_get_param_default(RID p_material, const if (material->shader) { if (material->shader->uniforms.has(p_param)) { - Vector<ShaderLanguage::ConstantNode::Value> default_value = material->shader->uniforms[p_param].default_value; - return ShaderLanguage::constant_value_to_variant(default_value, material->shader->uniforms[p_param].type); + ShaderLanguage::ShaderNode::Uniform uniform = material->shader->uniforms[p_param]; + Vector<ShaderLanguage::ConstantNode::Value> default_value = uniform.default_value; + return ShaderLanguage::constant_value_to_variant(default_value, uniform.type, uniform.hint); } } return Variant(); @@ -2738,7 +2829,7 @@ void RasterizerStorageGLES3::_update_material(Material *material) { if (material->shader && material->shader->mode == VS::SHADER_SPATIAL) { if (material->shader->spatial.blend_mode == Shader::Spatial::BLEND_MODE_MIX && - (!material->shader->spatial.uses_alpha || (material->shader->spatial.uses_alpha && material->shader->spatial.depth_draw_mode == Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS))) { + (!material->shader->spatial.uses_alpha || material->shader->spatial.depth_draw_mode == Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS)) { can_cast_shadow = true; } @@ -2759,7 +2850,7 @@ void RasterizerStorageGLES3::_update_material(Material *material) { } for (Map<RasterizerScene::InstanceBase *, int>::Element *E = material->instance_owners.front(); E; E = E->next()) { - E->key()->base_material_changed(); + E->key()->base_changed(false, true); } } } @@ -2795,9 +2886,6 @@ void RasterizerStorageGLES3::_update_material(Material *material) { if (E->get().order < 0) continue; // texture, does not go here - //if (material->shader->mode == VS::SHADER_PARTICLES) { - // print_line("uniform " + String(E->key()) + " order " + itos(E->get().order) + " offset " + itos(material->shader->ubo_offsets[E->get().order])); - //} //regular uniform uint8_t *data = &local_ubo[material->shader->ubo_offsets[E->get().order]]; @@ -3385,7 +3473,7 @@ void RasterizerStorageGLES3::mesh_add_surface(RID p_mesh, uint32_t p_format, VS: } mesh->surfaces.push_back(surface); - mesh->instance_change_notify(); + mesh->instance_change_notify(true, false); info.vertex_mem += surface->total_data_size; } @@ -3458,7 +3546,7 @@ void RasterizerStorageGLES3::mesh_surface_set_material(RID p_mesh, int p_surface _material_add_geometry(mesh->surfaces[p_surface]->material, mesh->surfaces[p_surface]); } - mesh->instance_material_change_notify(); + mesh->instance_change_notify(false, true); } RID RasterizerStorageGLES3::mesh_surface_get_material(RID p_mesh, int p_surface) const { @@ -3494,21 +3582,26 @@ PoolVector<uint8_t> RasterizerStorageGLES3::mesh_surface_get_array(RID p_mesh, i Surface *surface = mesh->surfaces[p_surface]; - glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); - void *data = glMapBufferRange(GL_ARRAY_BUFFER, 0, surface->array_byte_size, GL_MAP_READ_BIT); - - ERR_FAIL_COND_V(!data, PoolVector<uint8_t>()); - PoolVector<uint8_t> ret; ret.resize(surface->array_byte_size); + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); +#if defined(GLES_OVER_GL) || defined(__EMSCRIPTEN__) + { + PoolVector<uint8_t>::Write w = ret.write(); + glGetBufferSubData(GL_ARRAY_BUFFER, 0, surface->array_byte_size, w.ptr()); + } +#else + void *data = glMapBufferRange(GL_ARRAY_BUFFER, 0, surface->array_byte_size, GL_MAP_READ_BIT); + ERR_FAIL_NULL_V(data, PoolVector<uint8_t>()); { - PoolVector<uint8_t>::Write w = ret.write(); copymem(w.ptr(), data, surface->array_byte_size); } glUnmapBuffer(GL_ARRAY_BUFFER); +#endif + glBindBuffer(GL_ARRAY_BUFFER, 0); return ret; } @@ -3521,22 +3614,26 @@ PoolVector<uint8_t> RasterizerStorageGLES3::mesh_surface_get_index_array(RID p_m ERR_FAIL_COND_V(surface->index_array_len == 0, PoolVector<uint8_t>()); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, surface->index_id); - void *data = glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, 0, surface->index_array_byte_size, GL_MAP_READ_BIT); - - ERR_FAIL_COND_V(!data, PoolVector<uint8_t>()); - PoolVector<uint8_t> ret; ret.resize(surface->index_array_byte_size); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, surface->index_id); +#if defined(GLES_OVER_GL) || defined(__EMSCRIPTEN__) + { + PoolVector<uint8_t>::Write w = ret.write(); + glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, surface->index_array_byte_size, w.ptr()); + } +#else + void *data = glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, 0, surface->index_array_byte_size, GL_MAP_READ_BIT); + ERR_FAIL_NULL_V(data, PoolVector<uint8_t>()); { - PoolVector<uint8_t>::Write w = ret.write(); copymem(w.ptr(), data, surface->index_array_byte_size); } - glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); +#endif + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); return ret; } @@ -3577,23 +3674,26 @@ Vector<PoolVector<uint8_t> > RasterizerStorageGLES3::mesh_surface_get_blend_shap for (int i = 0; i < mesh->surfaces[p_surface]->blend_shapes.size(); i++) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->surfaces[p_surface]->blend_shapes[i].vertex_id); - void *data = glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, 0, mesh->surfaces[p_surface]->array_byte_size, GL_MAP_READ_BIT); - - ERR_FAIL_COND_V(!data, Vector<PoolVector<uint8_t> >()); - PoolVector<uint8_t> ret; ret.resize(mesh->surfaces[p_surface]->array_byte_size); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->surfaces[p_surface]->blend_shapes[i].vertex_id); +#if defined(GLES_OVER_GL) || defined(__EMSCRIPTEN__) + { + PoolVector<uint8_t>::Write w = ret.write(); + glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, mesh->surfaces[p_surface]->array_byte_size, w.ptr()); + } +#else + void *data = glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, 0, mesh->surfaces[p_surface]->array_byte_size, GL_MAP_READ_BIT); + ERR_FAIL_COND_V(!data, Vector<PoolVector<uint8_t> >()); { - PoolVector<uint8_t>::Write w = ret.write(); copymem(w.ptr(), data, mesh->surfaces[p_surface]->array_byte_size); } + glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); +#endif bsarr.push_back(ret); - - glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); } return bsarr; @@ -3642,13 +3742,11 @@ void RasterizerStorageGLES3::mesh_remove_surface(RID p_mesh, int p_surface) { info.vertex_mem -= surface->total_data_size; - mesh->instance_material_change_notify(); - memdelete(surface); mesh->surfaces.remove(p_surface); - mesh->instance_change_notify(); + mesh->instance_change_notify(true, true); } int RasterizerStorageGLES3::mesh_get_surface_count(RID p_mesh) const { @@ -3664,7 +3762,7 @@ void RasterizerStorageGLES3::mesh_set_custom_aabb(RID p_mesh, const AABB &p_aabb ERR_FAIL_COND(!mesh); mesh->custom_aabb = p_aabb; - mesh->instance_change_notify(); + mesh->instance_change_notify(true, false); } AABB RasterizerStorageGLES3::mesh_get_custom_aabb(RID p_mesh) const { @@ -3680,12 +3778,14 @@ AABB RasterizerStorageGLES3::mesh_get_aabb(RID p_mesh, RID p_skeleton) const { Mesh *mesh = mesh_owner.get(p_mesh); ERR_FAIL_COND_V(!mesh, AABB()); - if (mesh->custom_aabb != AABB()) + if (mesh->custom_aabb != AABB()) { return mesh->custom_aabb; + } Skeleton *sk = NULL; - if (p_skeleton.is_valid()) + if (p_skeleton.is_valid()) { sk = skeleton_owner.get(p_skeleton); + } AABB aabb; @@ -3724,6 +3824,7 @@ AABB RasterizerStorageGLES3::mesh_get_aabb(RID p_mesh, RID p_skeleton) const { mtx.origin.y = texture[base_ofs + 3]; AABB baabb = mtx.xform(skbones[j]); + if (first) { laabb = baabb; first = false; @@ -4066,35 +4167,37 @@ void RasterizerStorageGLES3::multimesh_allocate(RID p_multimesh, int p_instances multimesh->data.resize(format_floats * p_instances); + float *dataptr = multimesh->data.ptrw(); + for (int i = 0; i < p_instances * format_floats; i += format_floats) { int color_from = 0; int custom_data_from = 0; if (multimesh->transform_format == VS::MULTIMESH_TRANSFORM_2D) { - multimesh->data.write[i + 0] = 1.0; - multimesh->data.write[i + 1] = 0.0; - multimesh->data.write[i + 2] = 0.0; - multimesh->data.write[i + 3] = 0.0; - multimesh->data.write[i + 4] = 0.0; - multimesh->data.write[i + 5] = 1.0; - multimesh->data.write[i + 6] = 0.0; - multimesh->data.write[i + 7] = 0.0; + dataptr[i + 0] = 1.0; + dataptr[i + 1] = 0.0; + dataptr[i + 2] = 0.0; + dataptr[i + 3] = 0.0; + dataptr[i + 4] = 0.0; + dataptr[i + 5] = 1.0; + dataptr[i + 6] = 0.0; + dataptr[i + 7] = 0.0; color_from = 8; custom_data_from = 8; } else { - multimesh->data.write[i + 0] = 1.0; - multimesh->data.write[i + 1] = 0.0; - multimesh->data.write[i + 2] = 0.0; - multimesh->data.write[i + 3] = 0.0; - multimesh->data.write[i + 4] = 0.0; - multimesh->data.write[i + 5] = 1.0; - multimesh->data.write[i + 6] = 0.0; - multimesh->data.write[i + 7] = 0.0; - multimesh->data.write[i + 8] = 0.0; - multimesh->data.write[i + 9] = 0.0; - multimesh->data.write[i + 10] = 1.0; - multimesh->data.write[i + 11] = 0.0; + dataptr[i + 0] = 1.0; + dataptr[i + 1] = 0.0; + dataptr[i + 2] = 0.0; + dataptr[i + 3] = 0.0; + dataptr[i + 4] = 0.0; + dataptr[i + 5] = 1.0; + dataptr[i + 6] = 0.0; + dataptr[i + 7] = 0.0; + dataptr[i + 8] = 0.0; + dataptr[i + 9] = 0.0; + dataptr[i + 10] = 1.0; + dataptr[i + 11] = 0.0; color_from = 12; custom_data_from = 12; } @@ -4109,14 +4212,14 @@ void RasterizerStorageGLES3::multimesh_allocate(RID p_multimesh, int p_instances } cu; cu.colu = 0xFFFFFFFF; - multimesh->data.write[i + color_from + 0] = cu.colf; + dataptr[i + color_from + 0] = cu.colf; custom_data_from = color_from + 1; } else if (multimesh->color_format == VS::MULTIMESH_COLOR_FLOAT) { - multimesh->data.write[i + color_from + 0] = 1.0; - multimesh->data.write[i + color_from + 1] = 1.0; - multimesh->data.write[i + color_from + 2] = 1.0; - multimesh->data.write[i + color_from + 3] = 1.0; + dataptr[i + color_from + 0] = 1.0; + dataptr[i + color_from + 1] = 1.0; + dataptr[i + color_from + 2] = 1.0; + dataptr[i + color_from + 3] = 1.0; custom_data_from = color_from + 4; } @@ -4130,13 +4233,13 @@ void RasterizerStorageGLES3::multimesh_allocate(RID p_multimesh, int p_instances } cu; cu.colu = 0; - multimesh->data.write[i + custom_data_from + 0] = cu.colf; + dataptr[i + custom_data_from + 0] = cu.colf; } else if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_FLOAT) { - multimesh->data.write[i + custom_data_from + 0] = 0.0; - multimesh->data.write[i + custom_data_from + 1] = 0.0; - multimesh->data.write[i + custom_data_from + 2] = 0.0; - multimesh->data.write[i + custom_data_from + 3] = 0.0; + dataptr[i + custom_data_from + 0] = 0.0; + dataptr[i + custom_data_from + 1] = 0.0; + dataptr[i + custom_data_from + 2] = 0.0; + dataptr[i + custom_data_from + 3] = 0.0; } } @@ -4561,7 +4664,7 @@ void RasterizerStorageGLES3::update_dirty_multimeshes() { multimesh->dirty_aabb = false; multimesh->dirty_data = false; - multimesh->instance_change_notify(); + multimesh->instance_change_notify(true, false); multimesh_update_list.remove(multimesh_update_list.first()); } @@ -4672,7 +4775,7 @@ void RasterizerStorageGLES3::immediate_end(RID p_immediate) { im->building = false; - im->instance_change_notify(); + im->instance_change_notify(true, false); } void RasterizerStorageGLES3::immediate_clear(RID p_immediate) { @@ -4681,7 +4784,7 @@ void RasterizerStorageGLES3::immediate_clear(RID p_immediate) { ERR_FAIL_COND(im->building); im->chunks.clear(); - im->instance_change_notify(); + im->instance_change_notify(true, false); } AABB RasterizerStorageGLES3::immediate_get_aabb(RID p_immediate) const { @@ -4696,7 +4799,7 @@ void RasterizerStorageGLES3::immediate_set_material(RID p_immediate, RID p_mater Immediate *im = immediate_owner.get(p_immediate); ERR_FAIL_COND(!im); im->material = p_material; - im->instance_material_change_notify(); + im->instance_change_notify(false, true); } RID RasterizerStorageGLES3::immediate_get_material(RID p_immediate) const { @@ -4902,7 +5005,7 @@ void RasterizerStorageGLES3::update_dirty_skeletons() { } for (Set<RasterizerScene::InstanceBase *>::Element *E = skeleton->instances.front(); E; E = E->next()) { - E->get()->base_changed(); + E->get()->base_changed(true, false); } skeleton_update_list.remove(skeleton_update_list.first()); @@ -4968,7 +5071,7 @@ void RasterizerStorageGLES3::light_set_param(RID p_light, VS::LightParam p_param case VS::LIGHT_PARAM_SHADOW_BIAS: { light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } break; default: {} } @@ -4982,7 +5085,7 @@ void RasterizerStorageGLES3::light_set_shadow(RID p_light, bool p_enabled) { light->shadow = p_enabled; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES3::light_set_shadow_color(RID p_light, const Color &p_color) { @@ -5015,7 +5118,7 @@ void RasterizerStorageGLES3::light_set_cull_mask(RID p_light, uint32_t p_mask) { light->cull_mask = p_mask; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES3::light_set_reverse_cull_face_mode(RID p_light, bool p_enabled) { @@ -5026,7 +5129,7 @@ void RasterizerStorageGLES3::light_set_reverse_cull_face_mode(RID p_light, bool light->reverse_cull = p_enabled; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES3::light_omni_set_shadow_mode(RID p_light, VS::LightOmniShadowMode p_mode) { @@ -5037,7 +5140,7 @@ void RasterizerStorageGLES3::light_omni_set_shadow_mode(RID p_light, VS::LightOm light->omni_shadow_mode = p_mode; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } VS::LightOmniShadowMode RasterizerStorageGLES3::light_omni_get_shadow_mode(RID p_light) { @@ -5055,7 +5158,7 @@ void RasterizerStorageGLES3::light_omni_set_shadow_detail(RID p_light, VS::Light light->omni_shadow_detail = p_detail; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES3::light_directional_set_shadow_mode(RID p_light, VS::LightDirectionalShadowMode p_mode) { @@ -5065,7 +5168,7 @@ void RasterizerStorageGLES3::light_directional_set_shadow_mode(RID p_light, VS:: light->directional_shadow_mode = p_mode; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } void RasterizerStorageGLES3::light_directional_set_blend_splits(RID p_light, bool p_enable) { @@ -5075,7 +5178,7 @@ void RasterizerStorageGLES3::light_directional_set_blend_splits(RID p_light, boo light->directional_blend_splits = p_enable; light->version++; - light->instance_change_notify(); + light->instance_change_notify(true, false); } bool RasterizerStorageGLES3::light_directional_get_blend_splits(RID p_light) const { @@ -5206,7 +5309,7 @@ void RasterizerStorageGLES3::reflection_probe_set_update_mode(RID p_probe, VS::R ERR_FAIL_COND(!reflection_probe); reflection_probe->update_mode = p_mode; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES3::reflection_probe_set_intensity(RID p_probe, float p_intensity) { @@ -5247,7 +5350,7 @@ void RasterizerStorageGLES3::reflection_probe_set_max_distance(RID p_probe, floa ERR_FAIL_COND(!reflection_probe); reflection_probe->max_distance = p_distance; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES3::reflection_probe_set_extents(RID p_probe, const Vector3 &p_extents) { @@ -5255,7 +5358,7 @@ void RasterizerStorageGLES3::reflection_probe_set_extents(RID p_probe, const Vec ERR_FAIL_COND(!reflection_probe); reflection_probe->extents = p_extents; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES3::reflection_probe_set_origin_offset(RID p_probe, const Vector3 &p_offset) { @@ -5263,7 +5366,7 @@ void RasterizerStorageGLES3::reflection_probe_set_origin_offset(RID p_probe, con ERR_FAIL_COND(!reflection_probe); reflection_probe->origin_offset = p_offset; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES3::reflection_probe_set_as_interior(RID p_probe, bool p_enable) { @@ -5287,7 +5390,7 @@ void RasterizerStorageGLES3::reflection_probe_set_enable_shadows(RID p_probe, bo ERR_FAIL_COND(!reflection_probe); reflection_probe->enable_shadows = p_enable; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES3::reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers) { @@ -5295,7 +5398,7 @@ void RasterizerStorageGLES3::reflection_probe_set_cull_mask(RID p_probe, uint32_ ERR_FAIL_COND(!reflection_probe); reflection_probe->cull_mask = p_layers; - reflection_probe->instance_change_notify(); + reflection_probe->instance_change_notify(true, false); } void RasterizerStorageGLES3::reflection_probe_set_resolution(RID p_probe, int p_resolution) { @@ -5383,7 +5486,7 @@ void RasterizerStorageGLES3::gi_probe_set_bounds(RID p_probe, const AABB &p_boun gip->bounds = p_bounds; gip->version++; - gip->instance_change_notify(); + gip->instance_change_notify(true, false); } AABB RasterizerStorageGLES3::gi_probe_get_bounds(RID p_probe) const { @@ -5400,7 +5503,7 @@ void RasterizerStorageGLES3::gi_probe_set_cell_size(RID p_probe, float p_size) { gip->cell_size = p_size; gip->version++; - gip->instance_change_notify(); + gip->instance_change_notify(true, false); } float RasterizerStorageGLES3::gi_probe_get_cell_size(RID p_probe) const { @@ -5433,7 +5536,7 @@ void RasterizerStorageGLES3::gi_probe_set_dynamic_data(RID p_probe, const PoolVe gip->dynamic_data = p_data; gip->version++; - gip->instance_change_notify(); + gip->instance_change_notify(true, false); } PoolVector<int> RasterizerStorageGLES3::gi_probe_get_dynamic_data(RID p_probe) const { @@ -5665,7 +5768,7 @@ void RasterizerStorageGLES3::lightmap_capture_set_bounds(RID p_capture, const AA LightmapCapture *capture = lightmap_capture_data_owner.getornull(p_capture); ERR_FAIL_COND(!capture); capture->bounds = p_bounds; - capture->instance_change_notify(); + capture->instance_change_notify(true, false); } AABB RasterizerStorageGLES3::lightmap_capture_get_bounds(RID p_capture) const { @@ -5686,7 +5789,7 @@ void RasterizerStorageGLES3::lightmap_capture_set_octree(RID p_capture, const Po PoolVector<uint8_t>::Read r = p_octree.read(); copymem(w.ptr(), r.ptr(), p_octree.size()); } - capture->instance_change_notify(); + capture->instance_change_notify(true, false); } PoolVector<uint8_t> RasterizerStorageGLES3::lightmap_capture_get_octree(RID p_capture) const { @@ -5909,7 +6012,7 @@ void RasterizerStorageGLES3::particles_set_custom_aabb(RID p_particles, const AA ERR_FAIL_COND(!particles); particles->custom_aabb = p_aabb; _particles_update_histories(particles); - particles->instance_change_notify(); + particles->instance_change_notify(true, false); } void RasterizerStorageGLES3::particles_set_speed_scale(RID p_particles, float p_scale) { @@ -5999,9 +6102,21 @@ AABB RasterizerStorageGLES3::particles_get_current_aabb(RID p_particles) { const Particles *particles = particles_owner.getornull(p_particles); ERR_FAIL_COND_V(!particles, AABB()); + const float *data; glBindBuffer(GL_ARRAY_BUFFER, particles->particle_buffers[0]); - float *data = (float *)glMapBufferRange(GL_ARRAY_BUFFER, 0, particles->amount * 16 * 6, GL_MAP_READ_BIT); +#if defined(GLES_OVER_GL) || defined(__EMSCRIPTEN__) + PoolVector<uint8_t> vector; + vector.resize(particles->amount * 16 * 6); + { + PoolVector<uint8_t>::Write w = vector.write(); + glGetBufferSubData(GL_ARRAY_BUFFER, 0, particles->amount * 16 * 6, w.ptr()); + } + PoolVector<uint8_t>::Read r = vector.read(); + data = reinterpret_cast<const float *>(r.ptr()); +#else + data = (float *)glMapBufferRange(GL_ARRAY_BUFFER, 0, particles->amount * 16 * 6, GL_MAP_READ_BIT); +#endif AABB aabb; Transform inv = particles->emission_transform.affine_inverse(); @@ -6018,7 +6133,13 @@ AABB RasterizerStorageGLES3::particles_get_current_aabb(RID p_particles) { aabb.expand_to(pos); } +#if defined(GLES_OVER_GL) || defined(__EMSCRIPTEN__) + r = PoolVector<uint8_t>::Read(); + vector = PoolVector<uint8_t>(); +#else glUnmapBuffer(GL_ARRAY_BUFFER); +#endif + glBindBuffer(GL_ARRAY_BUFFER, 0); float longest_axis = 0; @@ -6317,12 +6438,19 @@ void RasterizerStorageGLES3::update_particles() { particles->particle_valid_histories[0] = true; } - particles->instance_change_notify(); //make sure shadows are updated + particles->instance_change_notify(true, false); //make sure shadows are updated } glDisable(GL_RASTERIZER_DISCARD); } +bool RasterizerStorageGLES3::particles_is_inactive(RID p_particles) const { + + const Particles *particles = particles_owner.getornull(p_particles); + ERR_FAIL_COND_V(!particles, false); + return !particles->emitting && particles->inactive; +} + //////// void RasterizerStorageGLES3::instance_add_skeleton(RID p_skeleton, RasterizerScene::InstanceBase *p_instance) { @@ -6841,7 +6969,7 @@ void RasterizerStorageGLES3::_render_target_allocate(RenderTarget *rt) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level); glDisable(GL_SCISSOR_TEST); glColorMask(1, 1, 1, 1); - if (rt->buffers.active == false) { + if (!rt->buffers.active) { glDepthMask(GL_TRUE); } @@ -7545,7 +7673,7 @@ void RasterizerStorageGLES3::initialize() { config.etc2_supported = true; config.hdr_supported = false; config.s3tc_supported = config.extensions.has("GL_EXT_texture_compression_dxt1") || config.extensions.has("GL_EXT_texture_compression_s3tc") || config.extensions.has("WEBGL_compressed_texture_s3tc"); - config.rgtc_supported = config.extensions.has("GL_EXT_texture_compression_rgtc") || config.extensions.has("GL_ARB_texture_compression_rgtc"); + config.rgtc_supported = config.extensions.has("GL_EXT_texture_compression_rgtc") || config.extensions.has("GL_ARB_texture_compression_rgtc") || config.extensions.has("EXT_texture_compression_rgtc"); #endif config.pvrtc_supported = config.extensions.has("GL_IMG_texture_compression_pvrtc"); @@ -7684,6 +7812,8 @@ void RasterizerStorageGLES3::initialize() { { //transform feedback buffers uint32_t xf_feedback_size = GLOBAL_DEF_RST("rendering/limits/buffers/blend_shape_max_buffer_size_kb", 4096); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/buffers/blend_shape_max_buffer_size_kb", PropertyInfo(Variant::INT, "rendering/limits/buffers/blend_shape_max_buffer_size_kb", PROPERTY_HINT_RANGE, "0,8192,1,or_greater")); + for (int i = 0; i < 2; i++) { glGenBuffers(1, &resources.transform_feedback_buffers[i]); diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h index 9a4798ac2a..398ffdeb82 100644 --- a/drivers/gles3/rasterizer_storage_gles3.h +++ b/drivers/gles3/rasterizer_storage_gles3.h @@ -43,6 +43,12 @@ #include "shaders/cubemap_filter.glsl.gen.h" #include "shaders/particles.glsl.gen.h" +// WebGL 2.0 has no MapBufferRange/UnmapBuffer, but offers a non-ES style BufferSubData API instead. +#ifdef __EMSCRIPTEN__ +void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); +void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); +#endif + class RasterizerCanvasGLES3; class RasterizerSceneGLES3; @@ -175,22 +181,12 @@ public: SelfList<RasterizerScene::InstanceBase>::List instance_list; - _FORCE_INLINE_ void instance_change_notify() { + _FORCE_INLINE_ void instance_change_notify(bool p_aabb, bool p_materials) { SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first(); while (instances) { - instances->self()->base_changed(); - instances = instances->next(); - } - } - - _FORCE_INLINE_ void instance_material_change_notify() { - - SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first(); - while (instances) { - - instances->self()->base_material_changed(); + instances->self()->base_changed(p_aabb, p_materials); instances = instances->next(); } } @@ -443,6 +439,7 @@ public: }; int light_mode; + bool uses_screen_texture; bool uses_screen_uv; bool uses_time; @@ -658,7 +655,7 @@ public: bool active; virtual void material_changed_notify() { - mesh->instance_material_change_notify(); + mesh->instance_change_notify(false, true); mesh->update_multimeshes(); } @@ -706,7 +703,7 @@ public: SelfList<MultiMesh> *mm = multimeshes.first(); while (mm) { - mm->self()->instance_material_change_notify(); + mm->self()->instance_change_notify(false, true); mm = mm->next(); } } @@ -1264,6 +1261,8 @@ public: virtual int particles_get_draw_passes(RID p_particles) const; virtual RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const; + virtual bool particles_is_inactive(RID p_particles) const; + /* INSTANCE */ virtual void instance_add_skeleton(RID p_skeleton, RasterizerScene::InstanceBase *p_instance); diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp index dbc8507951..adb145711d 100644 --- a/drivers/gles3/shader_compiler_gles3.cpp +++ b/drivers/gles3/shader_compiler_gles3.cpp @@ -133,8 +133,7 @@ static String _interpstr(SL::DataInterpolation p_interp) { switch (p_interp) { case SL::INTERPOLATION_FLAT: return "flat "; - case SL::INTERPOLATION_NO_PERSPECTIVE: return "noperspective "; - case SL::INTERPOLATION_SMOOTH: return "smooth "; + case SL::INTERPOLATION_SMOOTH: return ""; } return ""; } @@ -167,15 +166,17 @@ static String _opstr(SL::Operator p_op) { static String _mkid(const String &p_id) { - return "m_" + p_id; + String id = "m_" + p_id; + return id.replace("__", "_dus_"); //doubleunderscore is reserverd in glsl } static String f2sp0(float p_float) { - if (int(p_float) == p_float) - return itos(p_float) + ".0"; - else - return rtoss(p_float); + String num = rtoss(p_float); + if (num.find(".") == -1 && num.find("e") == -1) { + num += ".0"; + } + return num; } static String get_constant_text(SL::DataType p_type, const Vector<SL::ConstantNode::Value> &p_values) { @@ -228,7 +229,7 @@ static String get_constant_text(SL::DataType p_type, const Vector<SL::ConstantNo text += ")"; return text; } break; - case SL::TYPE_FLOAT: return f2sp0(p_values[0].real) + "f"; + case SL::TYPE_FLOAT: return f2sp0(p_values[0].real); case SL::TYPE_VEC2: case SL::TYPE_VEC3: case SL::TYPE_VEC4: { @@ -476,6 +477,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener //code for functions for (int i = 0; i < pnode->functions.size(); i++) { SL::FunctionNode *fnode = pnode->functions[i].function; + current_func_name = fnode->name; function_code[fnode->name] = _dump_node_code(fnode->body, p_level + 1, r_gen_code, p_actions, p_default_actions, p_assigning); } @@ -872,6 +874,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_SPATIAL].renames["SCREEN_UV"] = "screen_uv"; actions[VS::SHADER_SPATIAL].renames["SCREEN_TEXTURE"] = "screen_texture"; actions[VS::SHADER_SPATIAL].renames["DEPTH_TEXTURE"] = "depth_buffer"; + actions[VS::SHADER_SPATIAL].renames["DEPTH"] = "gl_FragDepth"; actions[VS::SHADER_SPATIAL].renames["ALPHA_SCISSOR"] = "alpha_scissor"; actions[VS::SHADER_SPATIAL].renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB"; @@ -945,7 +948,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_PARTICLES].renames["COLOR"] = "out_color"; actions[VS::SHADER_PARTICLES].renames["VELOCITY"] = "out_velocity_active.xyz"; actions[VS::SHADER_PARTICLES].renames["MASS"] = "mass"; - actions[VS::SHADER_PARTICLES].renames["ACTIVE"] = "active"; + actions[VS::SHADER_PARTICLES].renames["ACTIVE"] = "shader_active"; actions[VS::SHADER_PARTICLES].renames["RESTART"] = "restart"; actions[VS::SHADER_PARTICLES].renames["CUSTOM"] = "out_custom"; actions[VS::SHADER_PARTICLES].renames["TRANSFORM"] = "xform"; diff --git a/drivers/gles3/shader_gles3.cpp b/drivers/gles3/shader_gles3.cpp index 799179e8d4..404a9107ab 100644 --- a/drivers/gles3/shader_gles3.cpp +++ b/drivers/gles3/shader_gles3.cpp @@ -219,20 +219,15 @@ ShaderGLES3::Version *ShaderGLES3::get_current_version() { strings.push_back("#version 300 es\n"); #endif - int define_line_ofs = 1; - for (int i = 0; i < custom_defines.size(); i++) { strings.push_back(custom_defines[i].get_data()); - define_line_ofs++; } for (int j = 0; j < conditional_count; j++) { bool enable = ((1 << j) & conditional_version.version); strings.push_back(enable ? conditional_defines[j] : ""); - if (enable) - define_line_ofs++; if (enable) { DEBUG_PRINT(conditional_defines[j]); @@ -253,7 +248,6 @@ ShaderGLES3::Version *ShaderGLES3::get_current_version() { ERR_FAIL_COND_V(!custom_code_map.has(conditional_version.code_version), NULL); cc = &custom_code_map[conditional_version.code_version]; v.code_version = cc->version; - define_line_ofs += 2; } /* CREATE PROGRAM */ diff --git a/drivers/gles3/shader_gles3.h b/drivers/gles3/shader_gles3.h index 9db4942163..0d360e8453 100644 --- a/drivers/gles3/shader_gles3.h +++ b/drivers/gles3/shader_gles3.h @@ -128,11 +128,13 @@ private: Vector<GLint> texture_uniform_locations; uint32_t code_version; bool ok; - Version() { - code_version = 0; - ok = false; - uniform_location = NULL; - } + Version() : + id(0), + vert_id(0), + frag_id(0), + uniform_location(NULL), + code_version(0), + ok(false) {} }; Version *version; diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 5203f53fa2..51a4edd233 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -92,11 +92,6 @@ const bool at_light_pass = true; const bool at_light_pass = false; #endif -#ifdef USE_PARTICLES -uniform int h_frames; -uniform int v_frames; -#endif - #if defined(USE_MATERIAL) /* clang-format off */ @@ -146,15 +141,6 @@ void main() { #ifdef USE_PARTICLES //scale by texture size outvec.xy /= color_texpixel_size; - - //compute h and v frames and adjust UV interp for animation - int total_frames = h_frames * v_frames; - int frame = min(int(float(total_frames) * instance_custom.z), total_frames - 1); - float frame_w = 1.0 / float(h_frames); - float frame_h = 1.0 / float(v_frames); - uv_interp.x = uv_interp.x * frame_w + frame_w * float(frame % h_frames); - uv_interp.y = uv_interp.y * frame_h + frame_h * float(frame / h_frames); - #endif #define extra_matrix extra_matrix_instance @@ -182,7 +168,6 @@ VERTEX_SHADER_CODE color_interp = color; #ifdef USE_PIXEL_SNAP - outvec.xy = floor(outvec + 0.5).xy; #endif @@ -492,6 +477,7 @@ void main() { #if defined(NORMALMAP_USED) vec3 normal_map = vec3(0.0, 0.0, 1.0); + normal_used = true; #endif /* clang-format off */ diff --git a/drivers/gles3/shaders/effect_blur.glsl b/drivers/gles3/shaders/effect_blur.glsl index b67d06bc10..fc15ca31b1 100644 --- a/drivers/gles3/shaders/effect_blur.glsl +++ b/drivers/gles3/shaders/effect_blur.glsl @@ -94,6 +94,7 @@ uniform sampler2D source_dof_original; //texunit:2 uniform float exposure; uniform float white; +uniform highp float luminance_cap; #ifdef GLOW_USE_AUTO_EXPOSURE @@ -271,7 +272,7 @@ void main() { float luminance = max(frag_color.r, max(frag_color.g, frag_color.b)); float feedback = max(smoothstep(glow_hdr_threshold, glow_hdr_threshold + glow_hdr_scale, luminance), glow_bloom); - frag_color *= feedback; + frag_color = min(frag_color * feedback, vec4(luminance_cap)); #endif diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index 598bd3465e..407e7ec591 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -42,8 +42,6 @@ layout(location = 4) in vec2 uv_attrib; layout(location = 5) in vec2 uv2_attrib; #endif -uniform float normal_mult; - #ifdef USE_SKELETON layout(location = 6) in uvec4 bone_indices; // attrib:6 layout(location = 7) in vec4 bone_weights; // attrib:7 @@ -98,6 +96,8 @@ layout(std140) uniform SceneData { // ubo:0 bool fog_depth_enabled; highp float fog_depth_begin; + highp float fog_depth_end; + mediump float fog_density; highp float fog_depth_curve; bool fog_transmit_enabled; highp float fog_transmit_curve; @@ -278,11 +278,10 @@ void main() { } #endif - vec3 normal = normal_attrib * normal_mult; + vec3 normal = normal_attrib; #if defined(ENABLE_TANGENT_INTERP) || defined(ENABLE_NORMALMAP) || defined(LIGHT_USE_ANISOTROPY) vec3 tangent = tangent_attrib.xyz; - tangent *= normal_mult; float binormalf = tangent_attrib.a; #endif @@ -675,6 +674,8 @@ layout(std140) uniform SceneData { bool fog_depth_enabled; highp float fog_depth_begin; + highp float fog_depth_end; + mediump float fog_density; highp float fog_depth_curve; bool fog_transmit_enabled; highp float fog_transmit_curve; @@ -949,6 +950,18 @@ LIGHT_SHADER_CODE float NdotV = dot(N, V); float cNdotV = max(NdotV, 0.0); +#if defined(DIFFUSE_BURLEY) || defined(SPECULAR_BLINN) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_USE_CLEARCOAT) + vec3 H = normalize(V + L); +#endif + +#if defined(SPECULAR_BLINN) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_USE_CLEARCOAT) + float cNdotH = max(dot(N, H), 0.0); +#endif + +#if defined(DIFFUSE_BURLEY) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_USE_CLEARCOAT) + float cLdotH = max(dot(L, H), 0.0); +#endif + if (metallic < 1.0) { #if defined(DIFFUSE_OREN_NAYAR) vec3 diffuse_brdf_NL; @@ -983,13 +996,9 @@ LIGHT_SHADER_CODE #elif defined(DIFFUSE_BURLEY) { - - vec3 H = normalize(V + L); - float cLdotH = max(0.0, dot(L, H)); - - float FD90 = 0.5 + 2.0 * cLdotH * cLdotH * roughness; - float FdV = 1.0 + (FD90 - 1.0) * SchlickFresnel(cNdotV); - float FdL = 1.0 + (FD90 - 1.0) * SchlickFresnel(cNdotL); + float FD90_minus_1 = 2.0 * cLdotH * cLdotH * roughness - 0.5; + float FdV = 1.0 + FD90_minus_1 * SchlickFresnel(cNdotV); + float FdL = 1.0 + FD90_minus_1 * SchlickFresnel(cNdotL); diffuse_brdf_NL = (1.0 / M_PI) * FdV * FdL * cNdotL; /* float energyBias = mix(roughness, 0.0, 0.5); @@ -1026,13 +1035,9 @@ LIGHT_SHADER_CODE #if defined(SPECULAR_BLINN) //normalized blinn - vec3 H = normalize(V + L); - float cNdotH = max(dot(N, H), 0.0); - float cVdotH = max(dot(V, H), 0.0); - float cLdotH = max(dot(L, H), 0.0); float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25; float blinn = pow(cNdotH, shininess); - blinn *= (shininess + 8.0) / (8.0 * 3.141592654); + blinn *= (shininess + 8.0) * (1.0 / (8.0 * M_PI)); float intensity = (blinn) / max(4.0 * cNdotV * cNdotL, 0.75); specular_light += light_color * intensity * specular_blob_intensity * attenuation; @@ -1043,7 +1048,7 @@ LIGHT_SHADER_CODE float cRdotV = max(0.0, dot(R, V)); float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25; float phong = pow(cRdotV, shininess); - phong *= (shininess + 8.0) / (8.0 * 3.141592654); + phong *= (shininess + 8.0) * (1.0 / (8.0 * M_PI)); float intensity = (phong) / max(4.0 * cNdotV * cNdotL, 0.75); specular_light += light_color * intensity * specular_blob_intensity * attenuation; @@ -1063,11 +1068,6 @@ LIGHT_SHADER_CODE #elif defined(SPECULAR_SCHLICK_GGX) // shlick+ggx as default - vec3 H = normalize(V + L); - - float cNdotH = max(dot(N, H), 0.0); - float cLdotH = max(dot(L, H), 0.0); - #if defined(LIGHT_USE_ANISOTROPY) float alpha = roughness * roughness; @@ -1095,23 +1095,17 @@ LIGHT_SHADER_CODE #endif #if defined(LIGHT_USE_CLEARCOAT) - if (clearcoat_gloss > 0.0) { -#if !defined(SPECULAR_SCHLICK_GGX) && !defined(SPECULAR_BLINN) - vec3 H = normalize(V + L); -#endif + #if !defined(SPECULAR_SCHLICK_GGX) - float cNdotH = max(dot(N, H), 0.0); - float cLdotH = max(dot(L, H), 0.0); - float cLdotH5 = SchlickFresnel(cLdotH); + float cLdotH5 = SchlickFresnel(cLdotH); #endif - float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss)); - float Fr = mix(.04, 1.0, cLdotH5); - float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25); + float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss)); + float Fr = mix(.04, 1.0, cLdotH5); + float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25); - float specular_brdf_NL = 0.25 * clearcoat * Gr * Fr * Dr * cNdotL; + float clearcoat_specular_brdf_NL = 0.25 * clearcoat * Gr * Fr * Dr * cNdotL; - specular_light += specular_brdf_NL * light_color * specular_blob_intensity * attenuation; - } + specular_light += clearcoat_specular_brdf_NL * light_color * specular_blob_intensity * attenuation; #endif } @@ -1340,7 +1334,7 @@ void reflection_process(int idx, vec3 vertex, vec3 normal, vec3 binormal, vec3 t reflection_accum += reflection; } -#ifndef USE_LIGHTMAP +#if !defined(USE_LIGHTMAP) && !defined(USE_LIGHTMAP_CAPTURE) if (reflections[idx].ambient.a > 0.0) { //compute ambient using skybox vec3 local_amb_vec = (reflections[idx].local_matrix * vec4(normal, 0.0)).xyz; @@ -1510,7 +1504,7 @@ void gi_probe_compute(mediump sampler3D probe, mat4 probe_xform, vec3 bounds, ve //irradiance - vec3 irr_light = voxel_cone_trace(probe, cell_size, probe_pos, environment, blend_ambient, ref_vec, max(min_ref_tan, tan(roughness * 0.5 * M_PI)), max_distance, p_bias); + vec3 irr_light = voxel_cone_trace(probe, cell_size, probe_pos, environment, blend_ambient, ref_vec, max(min_ref_tan, tan(roughness * 0.5 * M_PI * 0.99)), max_distance, p_bias); irr_light *= multiplier; //irr_light=vec3(0.0); @@ -1591,24 +1585,24 @@ void main() { float alpha = 1.0; -#if defined(DO_SIDE_CHECK) - float side = gl_FrontFacing ? 1.0 : -1.0; -#else - float side = 1.0; -#endif - #if defined(ALPHA_SCISSOR_USED) float alpha_scissor = 0.5; #endif #if defined(ENABLE_TANGENT_INTERP) || defined(ENABLE_NORMALMAP) || defined(LIGHT_USE_ANISOTROPY) - vec3 binormal = normalize(binormal_interp) * side; - vec3 tangent = normalize(tangent_interp) * side; + vec3 binormal = normalize(binormal_interp); + vec3 tangent = normalize(tangent_interp); #else vec3 binormal = vec3(0.0); vec3 tangent = vec3(0.0); #endif - vec3 normal = normalize(normal_interp) * side; + vec3 normal = normalize(normal_interp); + +#if defined(DO_SIDE_CHECK) + if (!gl_FrontFacing) { + normal = -normal; + } +#endif #if defined(ENABLE_UV_INTERP) vec2 uv = uv_interp; @@ -1664,7 +1658,7 @@ FRAGMENT_SHADER_CODE normalmap.xy = normalmap.xy * 2.0 - 1.0; normalmap.z = sqrt(max(0.0, 1.0 - dot(normalmap.xy, normalmap.xy))); //always ignore Z, as it can be RG packed, Z may be pos/neg, etc. - normal = normalize(mix(normal_interp, tangent * normalmap.x + binormal * normalmap.y + normal * normalmap.z, normaldepth)) * side; + normal = normalize(mix(normal, tangent * normalmap.x + binormal * normalmap.y + normal * normalmap.z, normaldepth)); #endif @@ -1957,7 +1951,7 @@ FRAGMENT_SHADER_CODE } else { specular_light += env_reflection_light; } -#ifndef USE_LIGHTMAP +#if !defined(USE_LIGHTMAP) && !defined(USE_LIGHTMAP_CAPTURE) if (ambient_accum.a > 0.0) { ambient_light = ambient_accum.rgb / ambient_accum.a; } @@ -2033,10 +2027,11 @@ FRAGMENT_SHADER_CODE //apply fog if (fog_depth_enabled) { + float fog_far = fog_depth_end > 0 ? fog_depth_end : z_far; - float fog_z = smoothstep(fog_depth_begin, z_far, length(vertex)); + float fog_z = smoothstep(fog_depth_begin, fog_far, length(vertex)); - fog_amount = pow(fog_z, fog_depth_curve); + fog_amount = pow(fog_z, fog_depth_curve) * fog_density; if (fog_transmit_enabled) { vec3 total_light = emission + ambient_light + specular_light + diffuse_light; float transmit = pow(fog_z, fog_transmit_curve); @@ -2053,7 +2048,7 @@ FRAGMENT_SHADER_CODE emission = emission * rev_amount + fog_color * fog_amount; ambient_light *= rev_amount; - specular_light *rev_amount; + specular_light *= rev_amount; diffuse_light *= rev_amount; } diff --git a/drivers/png/image_loader_png.cpp b/drivers/png/image_loader_png.cpp index 04acb9387e..a4ea889d3b 100644 --- a/drivers/png/image_loader_png.cpp +++ b/drivers/png/image_loader_png.cpp @@ -227,10 +227,7 @@ static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t p_len PNGReadStatus *rstatus; rstatus = (PNGReadStatus *)png_get_io_ptr(png_ptr); - png_size_t to_read = p_length; - if (rstatus->size >= 0) { - to_read = MIN(p_length, rstatus->size - rstatus->offset); - } + png_size_t to_read = MIN(p_length, rstatus->size - rstatus->offset); memcpy(data, &rstatus->image[rstatus->offset], to_read); rstatus->offset += to_read; diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp index 9c02549e39..720824d451 100644 --- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp +++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp @@ -346,9 +346,9 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) { for (int j = 0; j < ad->pa_map.channels - 1; j++) { ad->samples_out.write[out_idx++] = ad->samples_in[in_idx++] >> 16; } - uint32_t l = ad->samples_in[in_idx++]; - uint32_t r = ad->samples_in[in_idx++]; - ad->samples_out.write[out_idx++] = ((l >> 1) + (r >> 1)) >> 16; + uint32_t l = ad->samples_in[in_idx++] >> 16; + uint32_t r = ad->samples_in[in_idx++] >> 16; + ad->samples_out.write[out_idx++] = (l + r) / 2; } } } @@ -374,7 +374,7 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) { const void *ptr = ad->samples_out.ptr(); ret = pa_stream_write(ad->pa_str, (char *)ptr + write_ofs, bytes_to_write, NULL, 0LL, PA_SEEK_RELATIVE); if (ret != 0) { - ERR_PRINT("pa_stream_write error"); + ERR_PRINTS("PulseAudio: pa_stream_write error: " + String(pa_strerror(ret))); } else { avail_bytes -= bytes_to_write; write_ofs += bytes_to_write; @@ -401,6 +401,9 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) { break; } } + + avail_bytes = 0; + write_ofs = 0; } if (ad->pa_rec_str && pa_stream_get_state(ad->pa_rec_str) == PA_STREAM_READY) { @@ -613,20 +616,18 @@ Error AudioDriverPulseAudio::capture_init_device() { break; } - print_verbose("PulseAudio: detected " + itos(pa_rec_map.channels) + " input channels"); - pa_sample_spec spec; spec.format = PA_SAMPLE_S16LE; spec.channels = pa_rec_map.channels; spec.rate = mix_rate; - int latency = 30; - input_buffer_frames = closest_power_of_2(latency * mix_rate / 1000); - int buffer_size = input_buffer_frames * spec.channels; + int input_latency = 30; + int input_buffer_frames = closest_power_of_2(input_latency * mix_rate / 1000); + int input_buffer_size = input_buffer_frames * spec.channels; pa_buffer_attr attr; - attr.fragsize = buffer_size * sizeof(int16_t); + attr.fragsize = input_buffer_size * sizeof(int16_t); pa_rec_str = pa_stream_new(pa_ctx, "Record", &spec, &pa_rec_map); if (pa_rec_str == NULL) { @@ -642,9 +643,10 @@ Error AudioDriverPulseAudio::capture_init_device() { ERR_FAIL_V(ERR_CANT_OPEN); } - input_buffer.resize(input_buffer_frames * 8); - input_position = 0; - input_size = 0; + input_buffer_init(input_buffer_frames); + + print_verbose("PulseAudio: detected " + itos(pa_rec_map.channels) + " input channels"); + print_verbose("PulseAudio: input buffer frames: " + itos(input_buffer_frames) + " calculated latency: " + itos(input_buffer_frames * 1000 / mix_rate) + "ms"); return OK; } @@ -760,7 +762,6 @@ AudioDriverPulseAudio::AudioDriverPulseAudio() { mix_rate = 0; buffer_frames = 0; - input_buffer_frames = 0; pa_buffer_size = 0; channels = 0; pa_ready = 0; diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.h b/drivers/pulseaudio/audio_driver_pulseaudio.h index f8358a452b..d8bab841ff 100644 --- a/drivers/pulseaudio/audio_driver_pulseaudio.h +++ b/drivers/pulseaudio/audio_driver_pulseaudio.h @@ -64,7 +64,6 @@ class AudioDriverPulseAudio : public AudioDriver { unsigned int mix_rate; unsigned int buffer_frames; - unsigned int input_buffer_frames; unsigned int pa_buffer_size; int channels; int pa_ready; diff --git a/drivers/rtaudio/audio_driver_rtaudio.cpp b/drivers/rtaudio/audio_driver_rtaudio.cpp index 10ba0663f2..bc6ceb1e7e 100644 --- a/drivers/rtaudio/audio_driver_rtaudio.cpp +++ b/drivers/rtaudio/audio_driver_rtaudio.cpp @@ -114,11 +114,12 @@ Error AudioDriverRtAudio::init() { unsigned int buffer_frames = closest_power_of_2(latency * mix_rate / 1000); print_verbose("Audio buffer frames: " + itos(buffer_frames) + " calculated latency: " + itos(buffer_frames * 1000 / mix_rate) + "ms"); - short int tries = 2; + short int tries = 4; - while (tries >= 0) { + while (tries > 0) { switch (speaker_mode) { case SPEAKER_MODE_STEREO: parameters.nChannels = 2; break; + case SPEAKER_SURROUND_31: parameters.nChannels = 4; break; case SPEAKER_SURROUND_51: parameters.nChannels = 6; break; case SPEAKER_SURROUND_71: parameters.nChannels = 8; break; }; @@ -128,12 +129,14 @@ Error AudioDriverRtAudio::init() { active = true; break; - } catch (RtAudioError &e) { + } catch (RtAudioError) { // try with less channels ERR_PRINT("Unable to open audio, retrying with fewer channels..."); switch (speaker_mode) { - case SPEAKER_SURROUND_51: speaker_mode = SPEAKER_MODE_STEREO; break; + case SPEAKER_MODE_STEREO: break; // Required to silence unhandled enum value warning. + case SPEAKER_SURROUND_31: speaker_mode = SPEAKER_MODE_STEREO; break; + case SPEAKER_SURROUND_51: speaker_mode = SPEAKER_SURROUND_31; break; case SPEAKER_SURROUND_71: speaker_mode = SPEAKER_SURROUND_51; break; } diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp index a5a9258c4a..bea249d4b6 100644 --- a/drivers/unix/dir_access_unix.cpp +++ b/drivers/unix/dir_access_unix.cpp @@ -309,7 +309,7 @@ Error DirAccessUnix::change_dir(String p_dir) { // prev_dir is the directory we are changing out of String prev_dir; char real_current_dir_name[2048]; - getcwd(real_current_dir_name, 2048); + ERR_FAIL_COND_V(getcwd(real_current_dir_name, 2048) == NULL, ERR_BUG); if (prev_dir.parse_utf8(real_current_dir_name)) prev_dir = real_current_dir_name; //no utf8, maybe latin? @@ -328,9 +328,20 @@ Error DirAccessUnix::change_dir(String p_dir) { return ERR_INVALID_PARAMETER; } + String base = _get_root_path(); + if (base != String() && !try_dir.begins_with(base)) { + ERR_FAIL_COND_V(getcwd(real_current_dir_name, 2048) == NULL, ERR_BUG); + String new_dir; + new_dir.parse_utf8(real_current_dir_name); + + if (!new_dir.begins_with(base)) { + try_dir = current_dir; //revert + } + } + // the directory exists, so set current_dir to try_dir current_dir = try_dir; - chdir(prev_dir.utf8().get_data()); + ERR_FAIL_COND_V(chdir(prev_dir.utf8().get_data()) != 0, ERR_BUG); return OK; } @@ -391,7 +402,7 @@ size_t DirAccessUnix::get_space_left() { return vfs.f_bfree * vfs.f_bsize; #else -#warning THIS IS BROKEN + // FIXME: Implement this. return 0; #endif }; @@ -405,7 +416,7 @@ DirAccessUnix::DirAccessUnix() { // set current directory to an absolute path of the current directory char real_current_dir_name[2048]; - getcwd(real_current_dir_name, 2048); + ERR_FAIL_COND(getcwd(real_current_dir_name, 2048) == NULL); if (current_dir.parse_utf8(real_current_dir_name)) current_dir = real_current_dir_name; diff --git a/drivers/unix/net_socket_posix.cpp b/drivers/unix/net_socket_posix.cpp index 3f03175403..833b17f122 100644 --- a/drivers/unix/net_socket_posix.cpp +++ b/drivers/unix/net_socket_posix.cpp @@ -42,12 +42,8 @@ #include <sys/types.h> #include <unistd.h> #ifndef NO_FCNTL -#ifdef __HAIKU__ #include <fcntl.h> #else -#include <sys/fcntl.h> -#endif -#else #include <sys/ioctl.h> #endif #include <netinet/in.h> @@ -59,7 +55,7 @@ #include <netinet/tcp.h> -#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED) +#if defined(__APPLE__) #define MSG_NOSIGNAL SO_NOSIGPIPE #endif @@ -114,7 +110,7 @@ size_t NetSocketPosix::_set_addr_storage(struct sockaddr_storage *p_addr, const } else { // IPv4 socket // IPv4 socket with IPv6 address - ERR_FAIL_COND_V(!p_ip.is_ipv4(), 0); + ERR_FAIL_COND_V(!p_ip.is_wildcard() && !p_ip.is_ipv4(), 0); struct sockaddr_in *addr4 = (struct sockaddr_in *)p_addr; addr4->sin_family = AF_INET; @@ -126,7 +122,6 @@ size_t NetSocketPosix::_set_addr_storage(struct sockaddr_storage *p_addr, const addr4->sin_addr.s_addr = INADDR_ANY; } - copymem(&addr4->sin_addr.s_addr, p_ip.get_ipv4(), 4); return sizeof(sockaddr_in); } } diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 6c70934bc6..279274734f 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -288,6 +288,11 @@ uint64_t OS_Unix::get_ticks_usec() const { Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode, bool read_stderr) { +#ifdef __EMSCRIPTEN__ + // Don't compile this code at all to avoid undefined references. + // Actual virtual call goes to OS_JavaScript. + ERR_FAIL_V(ERR_BUG); +#else if (p_blocking && r_pipe) { String argss; @@ -354,6 +359,7 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bo } return OK; +#endif } Error OS_Unix::kill(const ProcessID &p_pid) { @@ -487,9 +493,11 @@ String OS_Unix::get_executable_path() const { //fix for running from a symlink char buf[256]; memset(buf, 0, 256); - readlink("/proc/self/exe", buf, sizeof(buf)); + ssize_t len = readlink("/proc/self/exe", buf, sizeof(buf)); String b; - b.parse_utf8(buf); + if (len > 0) { + b.parse_utf8(buf, len); + } if (b == "") { WARN_PRINT("Couldn't get executable path from /proc/self/exe, using argv[0]"); return OS::get_executable_path(); diff --git a/drivers/unix/thread_posix.cpp b/drivers/unix/thread_posix.cpp index fcefe0a3b3..54bbbf2dad 100644 --- a/drivers/unix/thread_posix.cpp +++ b/drivers/unix/thread_posix.cpp @@ -103,8 +103,6 @@ void ThreadPosix::wait_to_finish_func_posix(Thread *p_thread) { Error ThreadPosix::set_name_func_posix(const String &p_name) { - pthread_t running_thread = pthread_self(); - #ifdef PTHREAD_NO_RENAME return ERR_UNAVAILABLE; @@ -117,6 +115,7 @@ Error ThreadPosix::set_name_func_posix(const String &p_name) { #else + pthread_t running_thread = pthread_self(); #ifdef PTHREAD_BSD_SET_NAME pthread_set_name_np(running_thread, p_name.utf8().get_data()); int err = 0; // Open/FreeBSD ignore errors in this function diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp index 3d4979175b..8665f701b1 100644 --- a/drivers/wasapi/audio_driver_wasapi.cpp +++ b/drivers/wasapi/audio_driver_wasapi.cpp @@ -336,10 +336,7 @@ Error AudioDriverWASAPI::init_capture_device(bool reinit) { HRESULT hr = audio_input.audio_client->GetBufferSize(&max_frames); ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN); - // Set the buffer size - input_buffer.resize(max_frames * CAPTURE_BUFFER_CHANNELS); - input_position = 0; - input_size = 0; + input_buffer_init(max_frames); return OK; } @@ -796,19 +793,18 @@ Error AudioDriverWASAPI::capture_start() { return err; } - if (audio_input.active == false) { - audio_input.audio_client->Start(); - audio_input.active = true; - - return OK; + if (audio_input.active) { + return FAILED; } - return FAILED; + audio_input.audio_client->Start(); + audio_input.active = true; + return OK; } Error AudioDriverWASAPI::capture_stop() { - if (audio_input.active == true) { + if (audio_input.active) { audio_input.audio_client->Stop(); audio_input.active = false; diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp index b4492a2022..2582478259 100644 --- a/drivers/windows/file_access_windows.cpp +++ b/drivers/windows/file_access_windows.cpp @@ -114,7 +114,7 @@ Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) { path = path + ".tmp"; } - f = _wfopen(path.c_str(), mode_string); + _wfopen_s(&f, path.c_str(), mode_string); if (f == NULL) { last_error = ERR_FILE_CANT_OPEN; @@ -278,7 +278,7 @@ bool FileAccessWindows::file_exists(const String &p_name) { FILE *g; //printf("opening file %s\n", p_fname.c_str()); String filename = fix_path(p_name); - g = _wfopen(filename.c_str(), L"rb"); + _wfopen_s(&g, filename.c_str(), L"rb"); if (g == NULL) { return false; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 77be561477..f65825e395 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -1253,14 +1253,14 @@ void AnimationTrackEdit::_notification(int p_what) { float offset = animation->track_get_key_time(track, i) - timeline->get_value(); if (editor->is_key_selected(track, i) && editor->is_moving_selection()) { - offset += editor->get_moving_selection_offset(); + offset = editor->snap_time(offset + editor->get_moving_selection_offset()); } offset = offset * scale + limit; if (i < animation->track_get_key_count(track) - 1) { float offset_n = animation->track_get_key_time(track, i + 1) - timeline->get_value(); if (editor->is_key_selected(track, i + 1) && editor->is_moving_selection()) { - offset_n += editor->get_moving_selection_offset(); + offset_n = editor->snap_time(offset_n + editor->get_moving_selection_offset()); } offset_n = offset_n * scale + limit; @@ -1685,15 +1685,10 @@ void AnimationTrackEdit::_zoom_changed() { } void AnimationTrackEdit::_path_entered(const String &p_text) { - - *block_animation_update_ptr = true; undo_redo->create_action("Change Track Path"); undo_redo->add_do_method(animation.ptr(), "track_set_path", track, p_text); undo_redo->add_undo_method(animation.ptr(), "track_set_path", track, animation->track_get_path(track)); undo_redo->commit_action(); - *block_animation_update_ptr = false; - update(); - path->hide(); } String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const { @@ -3192,7 +3187,8 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo case Animation::TYPE_ANIMATION: { value = p_id.value; } break; - default: {} + default: { + } } undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_id.track_idx, time, value); @@ -3881,9 +3877,7 @@ void AnimationTrackEditor::_move_selection_begin() { void AnimationTrackEditor::_move_selection(float p_offset) { moving_selection_offset = p_offset; - if (snap->is_pressed() && step->get_value() != 0) { - moving_selection_offset = Math::stepify(moving_selection_offset, step->get_value()); - } + for (int i = 0; i < track_edits.size(); i++) { track_edits[i]->update(); } @@ -4003,7 +3997,7 @@ void AnimationTrackEditor::_move_selection_commit() { // 2- remove overlapped keys for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - float newtime = E->get().pos + motion; + float newtime = snap_time(E->get().pos + motion); int idx = animation->track_find_key(E->key().track, newtime, true); if (idx == -1) continue; @@ -4027,7 +4021,7 @@ void AnimationTrackEditor::_move_selection_commit() { // 3-move the keys (re insert them) for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - float newpos = E->get().pos + motion; + float newpos = snap_time(E->get().pos + motion); /* if (newpos<0) continue; //no add at the beginning @@ -4038,7 +4032,7 @@ void AnimationTrackEditor::_move_selection_commit() { // 4-(undo) remove inserted keys for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { - float newpos = E->get().pos + motion; + float newpos = snap_time(E->get().pos + motion); /* if (newpos<0) continue; //no remove what no inserted @@ -4074,7 +4068,7 @@ void AnimationTrackEditor::_move_selection_commit() { for (Map<SelectedKey, KeyInfo>::Element *E = selection.back(); E; E = E->prev()) { float oldpos = E->get().pos; - float newpos = oldpos + motion; + float newpos = snap_time(oldpos + motion); //if (newpos>=0) undo_redo->add_do_method(this, "_select_at_anim", animation, E->key().track, newpos); undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, oldpos); @@ -4086,6 +4080,8 @@ void AnimationTrackEditor::_move_selection_commit() { for (int i = 0; i < track_edits.size(); i++) { track_edits[i]->update(); } + + _update_key_edit(); } void AnimationTrackEditor::_move_selection_cancel() { @@ -4349,7 +4345,8 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { case Animation::TYPE_METHOD: text += " (Methods)"; break; case Animation::TYPE_BEZIER: text += " (Bezier)"; break; case Animation::TYPE_AUDIO: text += " (Audio)"; break; - default: {}; + default: { + }; } TreeItem *it = track_copy_select->create_item(troot); diff --git a/editor/array_property_edit.cpp b/editor/array_property_edit.cpp index a32a71262f..245c9273ff 100644 --- a/editor/array_property_edit.cpp +++ b/editor/array_property_edit.cpp @@ -30,6 +30,7 @@ #include "array_property_edit.h" +#include "core/io/marshalls.h" #include "editor_node.h" #define ITEMS_PER_PAGE 100 @@ -202,6 +203,11 @@ bool ArrayPropertyEdit::_get(const StringName &p_name, Variant &r_ret) const { int idx = pn.get_slicec('/', 1).to_int(); bool valid; r_ret = arr.get(idx, &valid); + + if (r_ret.get_type() == Variant::OBJECT && Object::cast_to<EncodedObjectAsID>(r_ret)) { + r_ret = Object::cast_to<EncodedObjectAsID>(r_ret)->get_object_id(); + } + return valid; } } @@ -232,6 +238,11 @@ void ArrayPropertyEdit::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::INT, "indices/" + itos(i + offset) + "_type", PROPERTY_HINT_ENUM, vtypes)); } + if (v.get_type() == Variant::OBJECT && Object::cast_to<EncodedObjectAsID>(v)) { + p_list->push_back(PropertyInfo(Variant::INT, "indices/" + itos(i + offset), PROPERTY_HINT_OBJECT_ID, "Object")); + continue; + } + if (is_typed || v.get_type() != Variant::NIL) { PropertyInfo pi(v.get_type(), "indices/" + itos(i + offset)); if (subtype != Variant::NIL) { diff --git a/editor/audio_stream_preview.cpp b/editor/audio_stream_preview.cpp index c5759ac076..5a94d41aba 100644 --- a/editor/audio_stream_preview.cpp +++ b/editor/audio_stream_preview.cpp @@ -50,7 +50,7 @@ float AudioStreamPreview::get_max(float p_time, float p_time_next) const { time_to = time_from + 1; } - uint8_t vmax; + uint8_t vmax = 0; for (int i = time_from; i < time_to; i++) { @@ -77,7 +77,7 @@ float AudioStreamPreview::get_min(float p_time, float p_time_next) const { time_to = time_from + 1; } - uint8_t vmin; + uint8_t vmin = 0; for (int i = time_from; i < time_to; i++) { diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 79c22f667a..a0a8e9459d 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -673,7 +673,7 @@ void CodeTextEditor::_reset_zoom() { if (font.is_valid()) { EditorSettings::get_singleton()->set("interface/editor/code_font_size", 14); font->set_size(14); - zoom_nb->set_text("100%"); + font_size_nb->set_text("14 (100%)"); } } @@ -748,7 +748,7 @@ bool CodeTextEditor::_add_font_size(int p_delta) { if (font.is_valid()) { int new_size = CLAMP(font->get_size() + p_delta, 8 * EDSCALE, 96 * EDSCALE); - zoom_nb->set_text(itos(100 * new_size / (14 * EDSCALE)) + "%"); + font_size_nb->set_text(itos(new_size) + " (" + itos(100 * new_size / (14 * EDSCALE)) + "%)"); if (new_size != font->get_size()) { EditorSettings::get_singleton()->set("interface/editor/code_font_size", new_size / EDSCALE); @@ -1039,6 +1039,8 @@ void CodeTextEditor::delete_lines() { int to_line = text_editor->get_selection_to_line(); int from_line = text_editor->get_selection_from_line(); int count = Math::abs(to_line - from_line) + 1; + + text_editor->cursor_set_line(to_line, false); while (count) { text_editor->set_line(text_editor->cursor_get_line(), ""); text_editor->backspace_at_cursor(); @@ -1058,7 +1060,7 @@ void CodeTextEditor::delete_lines() { text_editor->end_complex_operation(); } -void CodeTextEditor::code_lines_down() { +void CodeTextEditor::clone_lines_down() { int from_line = text_editor->cursor_get_line(); int to_line = text_editor->cursor_get_line(); int column = text_editor->cursor_get_column(); @@ -1070,22 +1072,21 @@ void CodeTextEditor::code_lines_down() { } int next_line = to_line + 1; - if (to_line >= text_editor->get_line_count() - 1) { - text_editor->set_line(to_line, text_editor->get_line(to_line) + "\n"); - } - + bool caret_at_start = text_editor->cursor_get_line() == from_line; text_editor->begin_complex_operation(); for (int i = from_line; i <= to_line; i++) { - text_editor->unfold_line(i); - if (i >= text_editor->get_line_count() - 1) { - text_editor->set_line(i, text_editor->get_line(i) + "\n"); - } - String line_clone = text_editor->get_line(i); - text_editor->insert_at(line_clone, next_line); + text_editor->set_line(next_line - 1, text_editor->get_line(next_line - 1) + "\n"); + text_editor->set_line(next_line, text_editor->get_line(i)); next_line++; } + if (caret_at_start) { + text_editor->cursor_set_line(to_line + 1); + } else { + text_editor->cursor_set_line(next_line - 1); + } + text_editor->cursor_set_column(column); if (text_editor->is_selection_active()) { text_editor->select(to_line + 1, text_editor->get_selection_from_column(), next_line - 1, text_editor->get_selection_to_column()); @@ -1129,6 +1130,19 @@ void CodeTextEditor::set_edit_state(const Variant &p_state) { void CodeTextEditor::set_error(const String &p_error) { error->set_text(p_error); + error->set_tooltip(p_error); + error->set_visible(p_error != ""); +} + +void CodeTextEditor::set_error_pos(int p_line, int p_column) { + error_line = p_line; + error_column = p_column; +} + +void CodeTextEditor::_error_pressed() { + text_editor->cursor_set_line(error_line); + text_editor->cursor_set_column(error_column); + text_editor->center_viewport_to_cursor(); } void CodeTextEditor::_update_font() { @@ -1148,6 +1162,9 @@ void CodeTextEditor::_on_settings_change() { _update_font(); + font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); + font_size_nb->set_text(itos(font_size) + " (" + itos(100 * font_size / (14 * EDSCALE)) + "%)"); + // AUTO BRACE COMPLETION text_editor->set_auto_brace_completion( EDITOR_DEF("text_editor/completion/auto_brace_complete", true)); @@ -1190,6 +1207,7 @@ void CodeTextEditor::_bind_methods() { ClassDB::bind_method("_code_complete_timer_timeout", &CodeTextEditor::_code_complete_timer_timeout); ClassDB::bind_method("_complete_request", &CodeTextEditor::_complete_request); ClassDB::bind_method("_font_resize_timeout", &CodeTextEditor::_font_resize_timeout); + ClassDB::bind_method("_error_pressed", &CodeTextEditor::_error_pressed); ADD_SIGNAL(MethodInfo("validate_script")); ADD_SIGNAL(MethodInfo("load_theme_settings")); @@ -1238,13 +1256,22 @@ CodeTextEditor::CodeTextEditor() { code_complete_timer->set_wait_time(EDITOR_DEF("text_editor/completion/code_complete_delay", .3f)); - error = memnew(Label); - status_bar->add_child(error); - error->set_autowrap(true); - error->set_valign(Label::VALIGN_CENTER); + error_line = 0; + error_column = 0; + + Control *error_box = memnew(Control); + status_bar->add_child(error_box); + error_box->set_v_size_flags(SIZE_EXPAND_FILL); + error_box->set_h_size_flags(SIZE_EXPAND_FILL); + error_box->set_clip_contents(true); + + error = memnew(LinkButton); + error_box->add_child(error); + error->set_anchors_and_margins_preset(Control::PRESET_CENTER_LEFT); + error->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); error->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("error_color", "Editor")); error->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); - error->set_h_size_flags(SIZE_EXPAND_FILL); //required for it to display, given now it's clipping contents, do not touch + error->connect("pressed", this, "_error_pressed"); find_replace_bar->connect("error", error, "set_text"); status_bar->add_child(memnew(Label)); //to keep the height if the other labels are not visible @@ -1272,23 +1299,23 @@ CodeTextEditor::CodeTextEditor() { warning_count_label->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); warning_count_label->set_text("0"); - Label *zoom_txt = memnew(Label); - status_bar->add_child(zoom_txt); - zoom_txt->set_align(Label::ALIGN_RIGHT); - zoom_txt->set_valign(Label::VALIGN_CENTER); - zoom_txt->set_v_size_flags(SIZE_FILL); - zoom_txt->set_text(TTR("Zoom:")); - zoom_txt->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); - - zoom_nb = memnew(Label); - status_bar->add_child(zoom_nb); - zoom_nb->set_valign(Label::VALIGN_CENTER); - zoom_nb->set_v_size_flags(SIZE_FILL); - zoom_nb->set_autowrap(true); // workaround to prevent resizing the label on each change, do not touch - zoom_nb->set_clip_text(true); // workaround to prevent resizing the label on each change, do not touch - zoom_nb->set_custom_minimum_size(Size2(60, 1) * EDSCALE); - zoom_nb->set_align(Label::ALIGN_RIGHT); - zoom_nb->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); + Label *font_size_txt = memnew(Label); + status_bar->add_child(font_size_txt); + font_size_txt->set_align(Label::ALIGN_RIGHT); + font_size_txt->set_valign(Label::VALIGN_CENTER); + font_size_txt->set_v_size_flags(SIZE_FILL); + font_size_txt->set_text(TTR("Font Size:")); + font_size_txt->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); + + font_size_nb = memnew(Label); + status_bar->add_child(font_size_nb); + font_size_nb->set_valign(Label::VALIGN_CENTER); + font_size_nb->set_v_size_flags(SIZE_FILL); + font_size_nb->set_autowrap(true); // workaround to prevent resizing the label on each change, do not touch + font_size_nb->set_clip_text(true); // workaround to prevent resizing the label on each change, do not touch + font_size_nb->set_custom_minimum_size(Size2(100, 1) * EDSCALE); + font_size_nb->set_align(Label::ALIGN_RIGHT); + font_size_nb->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); Label *line_txt = memnew(Label); status_bar->add_child(line_txt); @@ -1344,7 +1371,7 @@ CodeTextEditor::CodeTextEditor() { font_resize_val = 0; font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); - zoom_nb->set_text(itos(100 * font_size / (14 * EDSCALE)) + "%"); + font_size_nb->set_text(itos(font_size) + " (" + itos(100 * font_size / (14 * EDSCALE)) + "%)"); font_resize_timer = memnew(Timer); add_child(font_resize_timer); font_resize_timer->set_one_shot(true); diff --git a/editor/code_editor.h b/editor/code_editor.h index ee47eff9a8..2d233c61c6 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -36,6 +36,7 @@ #include "scene/gui/check_button.h" #include "scene/gui/dialogs.h" #include "scene/gui/line_edit.h" +#include "scene/gui/link_button.h" #include "scene/gui/text_edit.h" #include "scene/gui/tool_button.h" #include "scene/main/timer.h" @@ -147,7 +148,7 @@ class CodeTextEditor : public VBoxContainer { Label *line_nb; Label *col_nb; - Label *zoom_nb; + Label *font_size_nb; Label *info; Timer *idle; Timer *code_complete_timer; @@ -157,7 +158,9 @@ class CodeTextEditor : public VBoxContainer { int font_resize_val; real_t font_size; - Label *error; + LinkButton *error; + int error_line; + int error_column; void _on_settings_change(); @@ -171,6 +174,7 @@ class CodeTextEditor : public VBoxContainer { void _zoom_out(); void _zoom_changed(); void _reset_zoom(); + void _error_pressed(); CodeTextEditorCodeCompleteFunc code_complete_func; void *code_complete_ud; @@ -203,7 +207,7 @@ public: void move_lines_up(); void move_lines_down(); void delete_lines(); - void code_lines_down(); + void clone_lines_down(); void goto_line(int p_line); void goto_line_selection(int p_line, int p_begin, int p_end); @@ -213,6 +217,7 @@ public: void update_editor_settings(); void set_error(const String &p_error); + void set_error_pos(int p_line, int p_column); void update_line_and_column() { _line_col_changed(); } TextEdit *get_text_edit() { return text_editor; } FindReplaceBar *get_find_replace_bar() { return find_replace_bar; } diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index eb11aea9cc..9f1082ecc4 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -89,8 +89,9 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode) { _save_and_update_favorite_list(); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/create_new_node_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/create_new_node_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "create_new_node", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); @@ -118,8 +119,10 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode) { if (enable_rl) { search_options->add_constant_override("draw_relationship_lines", 1); search_options->add_color_override("relationship_line_color", rl_color); + search_options->add_constant_override("draw_guides", 0); } else { search_options->add_constant_override("draw_relationship_lines", 0); + search_options->add_constant_override("draw_guides", 1); } is_replace_mode = p_replace_mode; @@ -413,7 +416,7 @@ void CreateDialog::_notification(int p_what) { } } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/create_new_node_bounds", get_rect()); + EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "create_new_node", get_rect()); } break; } } @@ -558,6 +561,7 @@ void CreateDialog::_history_selected() { return; search_box->set_text(item->get_text(0).get_slicec(' ', 0)); + favorites->deselect_all(); _update_search(); } @@ -568,6 +572,7 @@ void CreateDialog::_favorite_selected() { return; search_box->set_text(item->get_text(0).get_slicec(' ', 0)); + recent->deselect_all(); _update_search(); } diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index d64b02a605..aa9125915c 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -495,11 +495,19 @@ void DependencyRemoveDialog::ok_pressed() { Resource *res = ResourceCache::get(files_to_delete[i]); res->set_path(""); } + + // If the file we are deleting is the main scene, clear its definition. + if (files_to_delete[i] == ProjectSettings::get_singleton()->get("application/run/main_scene")) { + ProjectSettings::get_singleton()->set("application/run/main_scene", ""); + } + String path = OS::get_singleton()->get_resource_dir() + files_to_delete[i].replace_first("res://", "/"); print_verbose("Moving to trash: " + path); Error err = OS::get_singleton()->move_to_trash(path); if (err != OK) { EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + files_to_delete[i] + "\n"); + } else { + emit_signal("file_removed", files_to_delete[i]); } } @@ -515,6 +523,8 @@ void DependencyRemoveDialog::ok_pressed() { Error err = OS::get_singleton()->move_to_trash(path); if (err != OK) { EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + dirs_to_delete[i] + "\n"); + } else { + emit_signal("folder_removed", dirs_to_delete[i]); } } @@ -540,6 +550,11 @@ void DependencyRemoveDialog::ok_pressed() { } } +void DependencyRemoveDialog::_bind_methods() { + ADD_SIGNAL(MethodInfo("file_removed", PropertyInfo(Variant::STRING, "file"))); + ADD_SIGNAL(MethodInfo("folder_removed", PropertyInfo(Variant::STRING, "folder"))); +} + DependencyRemoveDialog::DependencyRemoveDialog() { VBoxContainer *vb = memnew(VBoxContainer); @@ -557,8 +572,9 @@ DependencyRemoveDialog::DependencyRemoveDialog() { ////////////// -void DependencyErrorDialog::show(const String &p_for_file, const Vector<String> &report) { +void DependencyErrorDialog::show(Mode p_mode, const String &p_for_file, const Vector<String> &report) { + mode = p_mode; for_file = p_for_file; set_title(TTR("Error loading:") + " " + p_for_file.get_file()); files->clear(); @@ -584,7 +600,14 @@ void DependencyErrorDialog::show(const String &p_for_file, const Vector<String> void DependencyErrorDialog::ok_pressed() { - EditorNode::get_singleton()->load_scene(for_file, true); + switch (mode) { + case MODE_SCENE: + EditorNode::get_singleton()->load_scene(for_file, true); + break; + case MODE_RESOURCE: + EditorNode::get_singleton()->load_resource(for_file, true); + break; + } } void DependencyErrorDialog::custom_action(const String &) { @@ -599,7 +622,7 @@ DependencyErrorDialog::DependencyErrorDialog() { files = memnew(Tree); files->set_hide_root(true); - vb->add_margin_child(TTR("Scene failed to load due to missing dependencies:"), files, true); + vb->add_margin_child(TTR("Load failed due to missing dependencies:"), files, true); files->set_v_size_flags(SIZE_EXPAND_FILL); files->set_custom_minimum_size(Size2(1, 200)); get_ok()->set_text(TTR("Open Anyway")); diff --git a/editor/dependency_editor.h b/editor/dependency_editor.h index 4f268de748..5f1074764b 100644 --- a/editor/dependency_editor.h +++ b/editor/dependency_editor.h @@ -126,6 +126,8 @@ class DependencyRemoveDialog : public ConfirmationDialog { void ok_pressed(); + static void _bind_methods(); + public: void show(const Vector<String> &p_folders, const Vector<String> &p_files); DependencyRemoveDialog(); @@ -134,7 +136,15 @@ public: class DependencyErrorDialog : public ConfirmationDialog { GDCLASS(DependencyErrorDialog, ConfirmationDialog); +public: + enum Mode { + MODE_SCENE, + MODE_RESOURCE, + }; + +private: String for_file; + Mode mode; Button *fdep; Label *text; Tree *files; @@ -142,7 +152,7 @@ class DependencyErrorDialog : public ConfirmationDialog { void custom_action(const String &); public: - void show(const String &p_for_file, const Vector<String> &report); + void show(Mode p_mode, const String &p_for_file, const Vector<String> &report); DependencyErrorDialog(); }; diff --git a/editor/doc/doc_dump.cpp b/editor/doc/doc_dump.cpp index 86fd9b436b..f1c337605e 100644 --- a/editor/doc/doc_dump.cpp +++ b/editor/doc/doc_dump.cpp @@ -223,7 +223,7 @@ void DocDump::dump(const String &p_file) { hint = "Values: "; for (int j = 0; j < arginfo.hint_string.get_slice_count(","); j++) { if (j > 0) hint += ", "; - hint += arginfo.hint_string.get_slice(",", j) + "=" + itos(1 << j); + hint += arginfo.hint_string.get_slice(",", j) + "=" + itos((uint64_t)1 << j); } break; case PROPERTY_HINT_FILE: hint = "A file:"; break; diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index cdf0e4b829..14abaa835c 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -47,7 +47,9 @@ void EditorAbout::_notification(int p_what) { Control *base = EditorNode::get_singleton()->get_gui_base(); Ref<Font> font = base->get_font("source", "EditorFonts"); _tpl_text->add_font_override("normal_font", font); + _tpl_text->add_constant_override("line_separation", 6 * EDSCALE); _license_text->add_font_override("normal_font", font); + _license_text->add_constant_override("line_separation", 6 * EDSCALE); _logo->set_texture(base->get_icon("Logo", "EditorIcons")); } break; } @@ -207,7 +209,6 @@ EditorAbout::EditorAbout() { TreeItem *tpl_ti_lc = _tpl_tree->create_item(root); tpl_ti_lc->set_text(0, TTR("Licenses")); tpl_ti_lc->set_selectable(0, false); - int read_idx = 0; String long_text = ""; for (int component_index = 0; component_index < COPYRIGHT_INFO_COUNT; component_index++) { @@ -232,7 +233,6 @@ EditorAbout::EditorAbout() { String license = "\n License: " + String(part.license) + "\n"; text += license; long_text += license + "\n"; - read_idx++; } ti->set_metadata(0, text); } diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 1374c8c9aa..64742ff74c 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -185,6 +185,7 @@ void EditorAutoloadSettings::_autoload_edited() { if (path.begins_with("*")) path = path.substr(1, path.length()); + // Singleton autoloads are represented with a leading "*" in their path. if (checked) path = "*" + path; @@ -651,6 +652,7 @@ void EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_ UndoRedo *undo_redo = EditorNode::get_singleton()->get_undo_redo(); undo_redo->create_action(TTR("Add AutoLoad")); + // Singleton autoloads are represented with a leading "*" in their path. undo_redo->add_do_property(ProjectSettings::get_singleton(), name, "*" + path); if (ProjectSettings::get_singleton()->has_setting(name)) { diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 9420452da1..5942348999 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -857,11 +857,16 @@ bool EditorData::script_class_is_parent(const String &p_class, const String &p_i if (!ScriptServer::is_global_class(p_class)) return false; String base = script_class_get_base(p_class); + Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class), "Script"); + Ref<Script> base_script = script->get_base_script(); + while (p_inherits != base) { if (ClassDB::class_exists(base)) { return ClassDB::is_parent_class(base, p_inherits); } else if (ScriptServer::is_global_class(base)) { base = script_class_get_base(base); + } else if (base_script.is_valid()) { + return ClassDB::is_parent_class(base_script->get_instance_base_type(), p_inherits); } else { return false; } @@ -946,16 +951,18 @@ void EditorData::script_class_save_icon_paths() { void EditorData::script_class_load_icon_paths() { script_class_clear_icon_paths(); - Dictionary d = ProjectSettings::get_singleton()->get("_global_script_class_icons"); - List<Variant> keys; - d.get_key_list(&keys); + if (ProjectSettings::get_singleton()->has_setting("_global_script_class_icons")) { + Dictionary d = ProjectSettings::get_singleton()->get("_global_script_class_icons"); + List<Variant> keys; + d.get_key_list(&keys); - for (List<Variant>::Element *E = keys.front(); E; E = E->next()) { - String name = E->get().operator String(); - _script_class_icon_paths[name] = d[name]; + for (List<Variant>::Element *E = keys.front(); E; E = E->next()) { + String name = E->get().operator String(); + _script_class_icon_paths[name] = d[name]; - String path = ScriptServer::get_global_class_path(name); - script_class_set_name(path, name); + String path = ScriptServer::get_global_class_path(name); + script_class_set_name(path, name); + } } } diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 455c889224..9df0f30ca4 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -144,6 +144,17 @@ String EditorExportPreset::get_include_filter() const { return include_filter; } +void EditorExportPreset::set_export_path(const String &p_path) { + + export_path = p_path; + EditorExport::singleton->save_presets(); +} + +String EditorExportPreset::get_export_path() const { + + return export_path; +} + void EditorExportPreset::set_exclude_filter(const String &p_exclude) { exclude_filter = p_exclude; @@ -213,6 +224,7 @@ String EditorExportPreset::get_custom_features() const { EditorExportPreset::EditorExportPreset() { + export_path = ""; export_filter = EXPORT_ALL_RESOURCES; runnable = false; } @@ -534,6 +546,13 @@ void EditorExportPlugin::_export_begin_script(const PoolVector<String> &p_featur } } +void EditorExportPlugin::_export_end_script() { + + if (get_script_instance()) { + get_script_instance()->call("_export_end"); + } +} + void EditorExportPlugin::_export_file(const String &p_path, const String &p_type, const Set<String> &p_features) { } @@ -575,6 +594,20 @@ EditorExportPlatform::FeatureContainers EditorExportPlatform::get_feature_contai result.features.insert(E->get()); result.features_pv.push_back(E->get()); } + + if (p_preset->get_custom_features() != String()) { + + Vector<String> tmp_custom_list = p_preset->get_custom_features().split(","); + + for (int i = 0; i < tmp_custom_list.size(); i++) { + String f = tmp_custom_list[i].strip_edges(); + if (f != String()) { + result.features.insert(f); + result.features_pv.push_back(f); + } + } + } + return result; } @@ -594,6 +627,9 @@ EditorExportPlatform::ExportNotifier::ExportNotifier(EditorExportPlatform &p_pla EditorExportPlatform::ExportNotifier::~ExportNotifier() { Vector<Ref<EditorExportPlugin> > export_plugins = EditorExport::get_singleton()->get_export_plugins(); for (int i = 0; i < export_plugins.size(); i++) { + if (export_plugins[i]->get_script_instance()) { + export_plugins.write[i]->_export_end_script(); + } export_plugins.write[i]->_export_end(); } } @@ -1034,6 +1070,7 @@ void EditorExport::_save() { } config->set_value(section, "include_filter", preset->get_include_filter()); config->set_value(section, "exclude_filter", preset->get_exclude_filter()); + config->set_value(section, "export_path", preset->get_export_path()); config->set_value(section, "patch_list", preset->get_patches()); String option_section = "preset." + itos(i) + ".options"; @@ -1097,6 +1134,7 @@ Ref<EditorExportPreset> EditorExport::get_export_preset(int p_idx) { void EditorExport::remove_export_preset(int p_idx) { export_presets.remove(p_idx); + save_presets(); } void EditorExport::add_export_plugin(const Ref<EditorExportPlugin> &p_plugin) { @@ -1188,6 +1226,7 @@ void EditorExport::load_config() { preset->set_include_filter(config->get_value(section, "include_filter")); preset->set_exclude_filter(config->get_value(section, "exclude_filter")); + preset->set_export_path(config->get_value(section, "export_path", "")); Vector<String> patch_list = config->get_value(section, "patch_list"); @@ -1336,18 +1375,21 @@ bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset, return valid; } -String EditorExportPlatformPC::get_binary_extension(const Ref<EditorExportPreset> &p_preset) const { +List<String> EditorExportPlatformPC::get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const { + List<String> list; for (Map<String, String>::Element *E = extensions.front(); E; E = E->next()) { if (p_preset->get(E->key())) { - return extensions[E->key()]; + list.push_back(extensions[E->key()]); + return list; } } if (extensions.has("default")) { - return extensions["default"]; + list.push_back(extensions["default"]); + return list; } - return ""; + return list; } Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { diff --git a/editor/editor_export.h b/editor/editor_export.h index b4ee5b89e7..483af489a3 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -57,6 +57,7 @@ private: ExportFilter export_filter; String include_filter; String exclude_filter; + String export_path; String exporter; Set<String> selected_files; @@ -114,6 +115,9 @@ public: void set_custom_features(const String &p_custom_features); String get_custom_features() const; + void set_export_path(const String &p_path); + String get_export_path() const; + const List<PropertyInfo> &get_properties() const { return properties; } EditorExportPreset(); @@ -241,7 +245,7 @@ public: virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const = 0; - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const = 0; + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const = 0; virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) = 0; virtual Error export_pack(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual Error export_zip(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); @@ -287,6 +291,7 @@ class EditorExportPlugin : public Reference { void _export_file_script(const String &p_path, const String &p_type, const PoolVector<String> &p_features); void _export_begin_script(const PoolVector<String> &p_features, bool p_debug, const String &p_path, int p_flags); + void _export_end_script(); protected: void add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap); @@ -388,7 +393,7 @@ public: virtual Ref<Texture> get_logo() const; virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const; + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const; virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); void set_extension(const String &p_extension, const String &p_feature_key = "default"); diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 38bdba31ea..81d9442656 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -501,7 +501,7 @@ void EditorFileDialog::_items_clear_selection() { case MODE_OPEN_FILE: case MODE_OPEN_FILES: get_ok()->set_text(TTR("Open")); - get_ok()->set_disabled(item_list->is_anything_selected() == false); + get_ok()->set_disabled(!item_list->is_anything_selected()); break; case MODE_OPEN_DIR: @@ -580,7 +580,7 @@ void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p if (single_item_selected) { item_menu->add_separator(); Dictionary item_meta = item_list->get_item_metadata(p_item); - String item_text = item_meta["dir"] ? TTR("Open In File Manager") : TTR("Show In File Manager"); + String item_text = item_meta["dir"] ? TTR("Open in File Manager") : TTR("Show in File Manager"); item_menu->add_icon_item(get_icon("Filesystem", "EditorIcons"), item_text, ITEM_MENU_SHOW_IN_EXPLORER); } @@ -605,7 +605,7 @@ void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) { } item_menu->add_icon_item(get_icon("Reload", "EditorIcons"), TTR("Refresh"), ITEM_MENU_REFRESH, KEY_F5); item_menu->add_separator(); - item_menu->add_icon_item(get_icon("Filesystem", "EditorIcons"), TTR("Open In File Manager"), ITEM_MENU_SHOW_IN_EXPLORER); + item_menu->add_icon_item(get_icon("Filesystem", "EditorIcons"), TTR("Open in File Manager"), ITEM_MENU_SHOW_IN_EXPLORER); item_menu->set_position(item_list->get_global_position() + p_pos); item_menu->popup(); @@ -830,11 +830,12 @@ void EditorFileDialog::update_file_list() { d["name"] = files.front()->get(); d["dir"] = false; String fullpath = cdir.plus_file(files.front()->get()); + d["path"] = fullpath; + item_list->set_item_metadata(item_list->get_item_count() - 1, d); + if (display_mode == DISPLAY_THUMBNAILS) { EditorResourcePreview::get_singleton()->queue_resource_preview(fullpath, this, "_thumbnail_result", fullpath); } - d["path"] = fullpath; - item_list->set_item_metadata(item_list->get_item_count() - 1, d); if (file->get_text() == files.front()->get()) item_list->set_current(item_list->get_item_count() - 1); @@ -1135,14 +1136,10 @@ void EditorFileDialog::_update_drives() { } void EditorFileDialog::_favorite_selected(int p_idx) { - - Vector<String> favorited = EditorSettings::get_singleton()->get_favorites(); - ERR_FAIL_INDEX(p_idx, favorited.size()); - - dir_access->change_dir(favorited[p_idx]); + dir_access->change_dir(favorites->get_item_metadata(p_idx)); file->set_text(""); - invalidate(); update_dir(); + invalidate(); _push_history(); } @@ -1192,7 +1189,7 @@ void EditorFileDialog::_update_favorites() { bool res = access == ACCESS_RESOURCES; String current = get_current_dir(); - Ref<Texture> star = get_icon("Favorites", "EditorIcons"); + Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons"); favorites->clear(); favorite->set_pressed(false); @@ -1203,16 +1200,23 @@ void EditorFileDialog::_update_favorites() { if (cres != res) continue; String name = favorited[i]; - - bool setthis = name == current; + bool setthis = false; if (res && name == "res://") { + if (name == current) + setthis = true; name = "/"; + } else if (name.ends_with("/")) { + if (name == current) + setthis = true; + name = name.substr(0, name.length() - 1); + name = name.get_file(); + + favorites->add_item(name, folder_icon); } else { - name = name.get_file() + "/"; + continue; // We don't handle favorite files here } - favorites->add_item(name, star); favorites->set_item_metadata(favorites->get_item_count() - 1, favorited[i]); if (setthis) { diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index ee20d95f25..94eb1a3399 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -466,6 +466,7 @@ bool EditorFileSystem::_update_scan_actions() { bool fs_changed = false; Vector<String> reimports; + Vector<String> reloads; for (List<ItemAction>::Element *E = scan_actions.front(); E; E = E->next()) { @@ -545,12 +546,25 @@ bool EditorFileSystem::_update_scan_actions() { fs_changed = true; } break; + case ItemAction::ACTION_FILE_RELOAD: { + + int idx = ia.dir->find_file_index(ia.file); + ERR_CONTINUE(idx == -1); + String full_path = ia.dir->get_file_path(idx); + + reloads.push_back(full_path); + + } break; } } if (reimports.size()) { reimport_files(reimports); } + + if (reloads.size()) { + emit_signal("resources_reload", reloads); + } scan_actions.clear(); return fs_changed; @@ -905,11 +919,11 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const continue; } + String path = cd.plus_file(p_dir->files[i]->file); + if (import_extensions.has(p_dir->files[i]->file.get_extension().to_lower())) { //check here if file must be imported or not - String path = cd.plus_file(p_dir->files[i]->file); - uint64_t mt = FileAccess::get_modified_time(path); bool reimport = false; @@ -936,6 +950,20 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const ia.file = p_dir->files[i]->file; scan_actions.push_back(ia); } + } else if (ResourceCache::has(path)) { //test for potential reload + + uint64_t mt = FileAccess::get_modified_time(path); + + if (mt != p_dir->files[i]->modified_time) { + + p_dir->files[i]->modified_time = mt; //save new time, but test for reload + + ItemAction ia; + ia.action = ItemAction::ACTION_FILE_RELOAD; + ia.dir = p_dir; + ia.file = p_dir->files[i]->file; + scan_actions.push_back(ia); + } } } @@ -1305,11 +1333,6 @@ void EditorFileSystem::_save_late_updated_files() { } } -void EditorFileSystem::_resource_saved(const String &p_path) { - - EditorFileSystem::get_singleton()->update_file(p_path); -} - Vector<String> EditorFileSystem::_get_dependencies(const String &p_path) { List<String> deps; @@ -1705,6 +1728,17 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { emit_signal("resources_reimported", p_files); } +Error EditorFileSystem::_resource_import(const String &p_path) { + + Vector<String> files; + files.push_back(p_path); + + singleton->update_file(p_path); + singleton->reimport_files(files); + + return OK; +} + void EditorFileSystem::_bind_methods() { ClassDB::bind_method(D_METHOD("get_filesystem"), &EditorFileSystem::get_filesystem); @@ -1720,6 +1754,7 @@ void EditorFileSystem::_bind_methods() { ADD_SIGNAL(MethodInfo("filesystem_changed")); ADD_SIGNAL(MethodInfo("sources_changed", PropertyInfo(Variant::BOOL, "exist"))); ADD_SIGNAL(MethodInfo("resources_reimported", PropertyInfo(Variant::POOL_STRING_ARRAY, "resources"))); + ADD_SIGNAL(MethodInfo("resources_reload", PropertyInfo(Variant::POOL_STRING_ARRAY, "resources"))); } void EditorFileSystem::_update_extensions() { @@ -1744,6 +1779,7 @@ void EditorFileSystem::_update_extensions() { EditorFileSystem::EditorFileSystem() { + ResourceLoader::import = _resource_import; reimport_on_missing_imported_files = GLOBAL_DEF("editor/reimport_missing_imported_files", true); singleton = this; @@ -1760,7 +1796,6 @@ EditorFileSystem::EditorFileSystem() { abort_scan = false; scanning_changes = false; scanning_changes_done = false; - ResourceSaver::set_save_callback(_resource_saved); DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); if (da->change_dir("res://.import") != OK) { diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h index f2f72eddbd..51b3fd38f0 100644 --- a/editor/editor_file_system.h +++ b/editor/editor_file_system.h @@ -116,7 +116,8 @@ class EditorFileSystem : public Node { ACTION_DIR_REMOVE, ACTION_FILE_ADD, ACTION_FILE_REMOVE, - ACTION_FILE_TEST_REIMPORT + ACTION_FILE_TEST_REIMPORT, + ACTION_FILE_RELOAD }; Action action; @@ -204,8 +205,6 @@ class EditorFileSystem : public Node { bool _update_scan_actions(); - static void _resource_saved(const String &p_path); - void _update_extensions(); void _reimport_file(const String &p_file); @@ -230,6 +229,8 @@ class EditorFileSystem : public Node { String _get_global_script_class(const String &p_type, const String &p_path, String *r_extends, String *r_icon_path) const; + static Error _resource_import(const String &p_path); + protected: void _notification(int p_what); static void _bind_methods(); diff --git a/editor/editor_folding.cpp b/editor/editor_folding.cpp new file mode 100644 index 0000000000..a88cd740db --- /dev/null +++ b/editor/editor_folding.cpp @@ -0,0 +1,258 @@ +#include "editor_folding.h" + +#include "core/os/file_access.h" +#include "editor_inspector.h" +#include "editor_settings.h" + +PoolVector<String> EditorFolding::_get_unfolds(const Object *p_object) { + + PoolVector<String> sections; + sections.resize(p_object->editor_get_section_folding().size()); + if (sections.size()) { + PoolVector<String>::Write w = sections.write(); + int idx = 0; + for (const Set<String>::Element *E = p_object->editor_get_section_folding().front(); E; E = E->next()) { + w[idx++] = E->get(); + } + } + + return sections; +} + +void EditorFolding::save_resource_folding(const RES &p_resource, const String &p_path) { + Ref<ConfigFile> config; + config.instance(); + PoolVector<String> unfolds = _get_unfolds(p_resource.ptr()); + config->set_value("folding", "sections_unfolded", unfolds); + + String path = EditorSettings::get_singleton()->get_project_settings_dir(); + String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg"; + file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file); + config->save(file); +} + +void EditorFolding::_set_unfolds(Object *p_object, const PoolVector<String> &p_unfolds) { + + int uc = p_unfolds.size(); + PoolVector<String>::Read r = p_unfolds.read(); + p_object->editor_clear_section_folding(); + for (int i = 0; i < uc; i++) { + p_object->editor_set_section_unfold(r[i], true); + } +} + +void EditorFolding::load_resource_folding(RES p_resource, const String &p_path) { + + Ref<ConfigFile> config; + config.instance(); + + String path = EditorSettings::get_singleton()->get_project_settings_dir(); + String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg"; + file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file); + + if (config->load(file) != OK) { + return; + } + + PoolVector<String> unfolds; + + if (config->has_section_key("folding", "sections_unfolded")) { + unfolds = config->get_value("folding", "sections_unfolded"); + } + _set_unfolds(p_resource.ptr(), unfolds); +} + +void EditorFolding::_fill_folds(const Node *p_root, const Node *p_node, Array &p_folds, Array &resource_folds, Set<RES> &resources) { + if (p_root != p_node) { + if (!p_node->get_owner()) { + return; //not owned, bye + } + if (p_node->get_owner() != p_root && !p_root->is_editable_instance(p_node)) { + return; + } + } + + PoolVector<String> unfolds = _get_unfolds(p_node); + + if (unfolds.size()) { + p_folds.push_back(p_root->get_path_to(p_node)); + p_folds.push_back(unfolds); + } + + List<PropertyInfo> plist; + p_node->get_property_list(&plist); + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { + if (E->get().type == Variant::OBJECT) { + RES res = p_node->get(E->get().name); + if (res.is_valid() && !resources.has(res) && res->get_path() != String() && !res->get_path().is_resource_file()) { + + PoolVector<String> res_unfolds = _get_unfolds(res.ptr()); + resource_folds.push_back(res->get_path()); + resource_folds.push_back(res_unfolds); + resources.insert(res); + } + } + } + + for (int i = 0; i < p_node->get_child_count(); i++) { + _fill_folds(p_root, p_node->get_child(i), p_folds, resource_folds, resources); + } +} +void EditorFolding::save_scene_folding(const Node *p_scene, const String &p_path) { + + Ref<ConfigFile> config; + config.instance(); + + Array unfolds, res_unfolds; + Set<RES> resources; + _fill_folds(p_scene, p_scene, unfolds, res_unfolds, resources); + + config->set_value("folding", "node_unfolds", unfolds); + config->set_value("folding", "resource_unfolds", res_unfolds); + + String path = EditorSettings::get_singleton()->get_project_settings_dir(); + String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg"; + file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file); + config->save(file); +} +void EditorFolding::load_scene_folding(Node *p_scene, const String &p_path) { + + Ref<ConfigFile> config; + config.instance(); + + String path = EditorSettings::get_singleton()->get_project_settings_dir(); + String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg"; + file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file); + + if (config->load(file) != OK) { + return; + } + + Array unfolds; + if (config->has_section_key("folding", "node_unfolds")) { + unfolds = config->get_value("folding", "node_unfolds"); + } + Array res_unfolds; + if (config->has_section_key("folding", "resource_unfolds")) { + res_unfolds = config->get_value("folding", "resource_unfolds"); + } + + ERR_FAIL_COND(unfolds.size() & 1); + ERR_FAIL_COND(res_unfolds.size() & 1); + + for (int i = 0; i < unfolds.size(); i += 2) { + NodePath path = unfolds[i]; + PoolVector<String> un = unfolds[i + 1]; + Node *node = p_scene->get_node(path); + if (!node) { + continue; + } + _set_unfolds(node, un); + } + + for (int i = 0; i < res_unfolds.size(); i += 2) { + String path = res_unfolds[i]; + RES res; + if (ResourceCache::has(path)) { + res = RES(ResourceCache::get(path)); + } + if (res.is_null()) { + continue; + } + + PoolVector<String> unfolds = res_unfolds[i + 1]; + _set_unfolds(res.ptr(), unfolds); + } +} + +bool EditorFolding::has_folding_data(const String &p_path) { + + String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg"; + file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file); + return FileAccess::exists(file); +} + +void EditorFolding::_do_object_unfolds(Object *p_object, Set<RES> &resources) { + + List<PropertyInfo> plist; + p_object->get_property_list(&plist); + String group_base; + String group; + + Set<String> unfold_group; + + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { + + if (E->get().usage & PROPERTY_USAGE_CATEGORY) { + group = ""; + group_base = ""; + } + if (E->get().usage & PROPERTY_USAGE_GROUP) { + group = E->get().name; + group_base = E->get().hint_string; + if (group_base.ends_with("_")) { + group_base = group_base.substr(0, group_base.length() - 1); + } + } + + //can unfold + if (E->get().usage & PROPERTY_USAGE_EDITOR) { + + if (group != "") { //group + if (group_base == String() || E->get().name.begins_with(group_base)) { + bool can_revert = EditorPropertyRevert::can_property_revert(p_object, E->get().name); + if (can_revert) { + unfold_group.insert(group); + } + } + } else { //path + int last = E->get().name.find_last("/"); + if (last != -1) { + bool can_revert = EditorPropertyRevert::can_property_revert(p_object, E->get().name); + if (can_revert) { + unfold_group.insert(E->get().name.substr(0, last)); + } + } + } + } + + if (E->get().type == Variant::OBJECT) { + RES res = p_object->get(E->get().name); + if (res.is_valid() && !resources.has(res) && res->get_path() != String() && !res->get_path().is_resource_file()) { + + resources.insert(res); + _do_object_unfolds(res.ptr(), resources); + } + } + } + + for (Set<String>::Element *E = unfold_group.front(); E; E = E->next()) { + p_object->editor_set_section_unfold(E->get(), true); + } +} + +void EditorFolding::_do_node_unfolds(Node *p_root, Node *p_node, Set<RES> &resources) { + if (p_root != p_node) { + if (!p_node->get_owner()) { + return; //not owned, bye + } + if (p_node->get_owner() != p_root && !p_root->is_editable_instance(p_node)) { + return; + } + } + + _do_object_unfolds(p_node, resources); + + for (int i = 0; i < p_node->get_child_count(); i++) { + _do_node_unfolds(p_root, p_node->get_child(i), resources); + } +} + +void EditorFolding::unfold_scene(Node *p_scene) { + + Set<RES> resources; + _do_node_unfolds(p_scene, p_scene, resources); +} + +EditorFolding::EditorFolding() { +} diff --git a/editor/editor_folding.h b/editor/editor_folding.h new file mode 100644 index 0000000000..dc03e2d284 --- /dev/null +++ b/editor/editor_folding.h @@ -0,0 +1,30 @@ +#ifndef EDITOR_FOLDING_H +#define EDITOR_FOLDING_H + +#include "scene/main/node.h" + +class EditorFolding { + + PoolVector<String> _get_unfolds(const Object *p_object); + void _set_unfolds(Object *p_object, const PoolVector<String> &p_unfolds); + + void _fill_folds(const Node *p_root, const Node *p_node, Array &p_folds, Array &resource_folds, Set<RES> &resources); + + void _do_object_unfolds(Object *p_object, Set<RES> &resources); + void _do_node_unfolds(Node *p_root, Node *p_node, Set<RES> &resources); + +public: + void save_resource_folding(const RES &p_resource, const String &p_path); + void load_resource_folding(RES p_resource, const String &p_path); + + void save_scene_folding(const Node *p_scene, const String &p_path); + void load_scene_folding(Node *p_scene, const String &p_path); + + void unfold_scene(Node *p_scene); + + bool has_folding_data(const String &p_path); + + EditorFolding(); +}; + +#endif // EDITOR_FOLDING_H diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp index 8b1818b595..a54ad7894a 100644 --- a/editor/editor_fonts.cpp +++ b/editor/editor_fonts.cpp @@ -93,12 +93,14 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Custom font */ + bool font_antialiased = (bool)EditorSettings::get_singleton()->get("interface/editor/main_font_antialiased"); DynamicFontData::Hinting font_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/main_font_hinting"); String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font"); Ref<DynamicFontData> CustomFont; if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) { CustomFont.instance(); + CustomFont->set_antialiased(font_antialiased); CustomFont->set_hinting(font_hinting); CustomFont->set_font_path(custom_font_path); CustomFont->set_force_autohinter(true); //just looks better..i think? @@ -112,6 +114,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { Ref<DynamicFontData> CustomFontBold; if (custom_font_path_bold.length() > 0 && dir->file_exists(custom_font_path_bold)) { CustomFontBold.instance(); + CustomFontBold->set_antialiased(font_antialiased); CustomFontBold->set_hinting(font_hinting); CustomFontBold->set_font_path(custom_font_path_bold); CustomFontBold->set_force_autohinter(true); //just looks better..i think? @@ -122,10 +125,12 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Custom source code font */ String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font"); + bool font_source_antialiased = (bool)EditorSettings::get_singleton()->get("interface/editor/code_font_antialiased"); DynamicFontData::Hinting font_source_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/code_font_hinting"); Ref<DynamicFontData> CustomFontSource; if (custom_font_path_source.length() > 0 && dir->file_exists(custom_font_path_source)) { CustomFontSource.instance(); + CustomFontSource->set_antialiased(font_source_antialiased); CustomFontSource->set_hinting(font_source_hinting); CustomFontSource->set_font_path(custom_font_path_source); } else { @@ -138,48 +143,56 @@ void editor_register_fonts(Ref<Theme> p_theme) { Ref<DynamicFontData> DefaultFont; DefaultFont.instance(); + DefaultFont->set_antialiased(font_antialiased); DefaultFont->set_hinting(font_hinting); DefaultFont->set_font_ptr(_font_NotoSansUI_Regular, _font_NotoSansUI_Regular_size); DefaultFont->set_force_autohinter(true); //just looks better..i think? Ref<DynamicFontData> DefaultFontBold; DefaultFontBold.instance(); - DefaultFont->set_hinting(font_hinting); + DefaultFontBold->set_antialiased(font_antialiased); + DefaultFontBold->set_hinting(font_hinting); DefaultFontBold->set_font_ptr(_font_NotoSansUI_Bold, _font_NotoSansUI_Bold_size); DefaultFontBold->set_force_autohinter(true); // just looks better..i think? Ref<DynamicFontData> FontFallback; FontFallback.instance(); + FontFallback->set_antialiased(font_antialiased); FontFallback->set_hinting(font_hinting); FontFallback->set_font_ptr(_font_DroidSansFallback, _font_DroidSansFallback_size); FontFallback->set_force_autohinter(true); //just looks better..i think? Ref<DynamicFontData> FontJapanese; FontJapanese.instance(); + FontJapanese->set_antialiased(font_antialiased); FontJapanese->set_hinting(font_hinting); FontJapanese->set_font_ptr(_font_DroidSansJapanese, _font_DroidSansJapanese_size); FontJapanese->set_force_autohinter(true); //just looks better..i think? Ref<DynamicFontData> FontArabic; FontArabic.instance(); + FontArabic->set_antialiased(font_antialiased); FontArabic->set_hinting(font_hinting); FontArabic->set_font_ptr(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size); FontArabic->set_force_autohinter(true); //just looks better..i think? Ref<DynamicFontData> FontHebrew; FontHebrew.instance(); + FontHebrew->set_antialiased(font_antialiased); FontHebrew->set_hinting(font_hinting); FontHebrew->set_font_ptr(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size); FontHebrew->set_force_autohinter(true); //just looks better..i think? Ref<DynamicFontData> FontThai; FontThai.instance(); + FontThai->set_antialiased(font_antialiased); FontThai->set_hinting(font_hinting); FontThai->set_font_ptr(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size); FontThai->set_force_autohinter(true); //just looks better..i think? Ref<DynamicFontData> FontHindi; FontHindi.instance(); + FontHindi->set_antialiased(font_antialiased); FontHindi->set_hinting(font_hinting); FontHindi->set_font_ptr(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size); FontHindi->set_force_autohinter(true); //just looks better..i think? @@ -188,6 +201,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { Ref<DynamicFontData> dfmono; dfmono.instance(); + dfmono->set_antialiased(font_source_antialiased); dfmono->set_hinting(font_source_hinting); dfmono->set_font_ptr(_font_Hack_Regular, _font_Hack_Regular_size); //dfd->set_force_autohinter(true); //just looks better..i think? diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 80dd5aa114..f502f918df 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -36,482 +36,10 @@ #include "editor_node.h" #include "editor_settings.h" -#define CONTRIBUTE_URL "http://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html" +#define CONTRIBUTE_URL "https://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html" #define CONTRIBUTE2_URL "https://github.com/godotengine/godot-docs" #define REQUEST_URL "https://github.com/godotengine/godot-docs/issues/new" -void EditorHelpSearch::popup_dialog() { - - popup_centered(Size2(700, 600) * EDSCALE); - if (search_box->get_text() != "") { - search_box->select_all(); - _update_search(); - } - search_box->grab_focus(); -} - -void EditorHelpSearch::popup_dialog(const String &p_term) { - - popup_centered(Size2(700, 600) * EDSCALE); - if (p_term != "") { - search_box->set_text(p_term); - search_box->select_all(); - _update_search(); - } else { - search_box->clear(); - } - search_box->grab_focus(); -} - -void EditorHelpSearch::_text_changed(const String &p_newtext) { - - _update_search(); -} - -void EditorHelpSearch::_sbox_input(const Ref<InputEvent> &p_ie) { - - Ref<InputEventKey> k = p_ie; - - if (k.is_valid() && (k->get_scancode() == KEY_UP || - k->get_scancode() == KEY_DOWN || - k->get_scancode() == KEY_PAGEUP || - k->get_scancode() == KEY_PAGEDOWN)) { - - search_options->call("_gui_input", k); - search_box->accept_event(); - } -} - -void EditorHelpSearch::IncrementalSearch::phase1(Map<String, DocData::ClassDoc>::Element *E) { - - if (E->key().findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_name:" + E->key()); - item->set_text(0, E->key() + " (Class)"); - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(E->key(), "Node"); - item->set_icon(0, icon); - } -} - -void EditorHelpSearch::IncrementalSearch::phase2(Map<String, DocData::ClassDoc>::Element *E) { - - DocData::ClassDoc &c = E->get(); - - Ref<Texture> cicon = EditorNode::get_singleton()->get_class_icon(E->key(), "Node"); - - for (int i = 0; i < c.methods.size(); i++) { - if ((term.begins_with(".") && c.methods[i].name.begins_with(term.right(1))) || (term.ends_with("(") && c.methods[i].name.ends_with(term.left(term.length() - 1).strip_edges())) || (term.begins_with(".") && term.ends_with("(") && c.methods[i].name == term.substr(1, term.length() - 2).strip_edges()) || c.methods[i].name.findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_method:" + E->key() + ":" + c.methods[i].name); - item->set_text(0, E->key() + "." + c.methods[i].name + " (Method)"); - item->set_icon(0, cicon); - } - } - - for (int i = 0; i < c.signals.size(); i++) { - - if (c.signals[i].name.findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_signal:" + E->key() + ":" + c.signals[i].name); - item->set_text(0, E->key() + "." + c.signals[i].name + " (Signal)"); - item->set_icon(0, cicon); - } - } - - for (int i = 0; i < c.constants.size(); i++) { - - if (c.constants[i].name.findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_constant:" + E->key() + ":" + c.constants[i].name); - item->set_text(0, E->key() + "." + c.constants[i].name + " (Constant)"); - item->set_icon(0, cicon); - } - } - - for (int i = 0; i < c.properties.size(); i++) { - - if (c.properties[i].name.findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_property:" + E->key() + ":" + c.properties[i].name); - item->set_text(0, E->key() + "." + c.properties[i].name + " (Property)"); - item->set_icon(0, cicon); - } - } - - for (int i = 0; i < c.theme_properties.size(); i++) { - - if (c.theme_properties[i].name.findn(term) != -1) { - - TreeItem *item = search_options->create_item(root); - item->set_metadata(0, "class_theme_item:" + E->key() + ":" + c.theme_properties[i].name); - item->set_text(0, E->key() + "." + c.theme_properties[i].name + " (Theme Item)"); - item->set_icon(0, cicon); - } - } -} - -bool EditorHelpSearch::IncrementalSearch::slice() { - - if (phase > 2) - return true; - - if (iterator) { - - switch (phase) { - - case 1: { - phase1(iterator); - } break; - case 2: { - phase2(iterator); - } break; - default: { - WARN_PRINT("illegal phase in IncrementalSearch"); - return true; - } - } - - iterator = iterator->next(); - } else { - - phase += 1; - iterator = doc->class_list.front(); - } - - return false; -} - -EditorHelpSearch::IncrementalSearch::IncrementalSearch(EditorHelpSearch *p_search, Tree *p_search_options, const String &p_term) : - search(p_search), - search_options(p_search_options) { - - def_icon = search->get_icon("Node", "EditorIcons"); - doc = EditorHelp::get_doc_data(); - - term = p_term; - - root = search_options->create_item(); - phase = 0; - iterator = 0; -} - -bool EditorHelpSearch::IncrementalSearch::empty() const { - - return root->get_children() == NULL; -} - -bool EditorHelpSearch::IncrementalSearch::work(uint64_t slot) { - - const uint64_t until = OS::get_singleton()->get_ticks_usec() + slot; - - while (!slice()) { - - if (OS::get_singleton()->get_ticks_usec() > until) - return false; - } - - return true; -} - -void EditorHelpSearch::_update_search() { - search_options->clear(); - - String term = search_box->get_text(); - if (term.length() < 2) - return; - - search = Ref<IncrementalSearch>(memnew(IncrementalSearch(this, search_options, term))); - set_process(true); -} - -void EditorHelpSearch::_confirmed() { - - TreeItem *ti = search_options->get_selected(); - if (!ti) - return; - - String mdata = ti->get_metadata(0); - EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); - emit_signal("go_to_help", mdata); - // go to that - hide(); -} - -void EditorHelpSearch::_notification(int p_what) { - - if (p_what == NOTIFICATION_ENTER_TREE) { - - //_update_icons - search_box->set_right_icon(get_icon("Search", "EditorIcons")); - search_box->set_clear_button_enabled(true); - - connect("confirmed", this, "_confirmed"); - _update_search(); - } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { - - if (is_visible_in_tree()) { - - search_box->call_deferred("grab_focus"); // still not visible - search_box->select_all(); - } - } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { - - //_update_icons - search_box->set_right_icon(get_icon("Search", "EditorIcons")); - search_box->set_clear_button_enabled(true); - } else if (p_what == NOTIFICATION_PROCESS) { - - if (search.is_valid()) { - - if (search->work()) { - - get_ok()->set_disabled(search->empty()); - search = Ref<IncrementalSearch>(); - set_process(false); - } - } else { - - set_process(false); - } - } -} - -void EditorHelpSearch::_bind_methods() { - - ClassDB::bind_method(D_METHOD("_text_changed"), &EditorHelpSearch::_text_changed); - ClassDB::bind_method(D_METHOD("_confirmed"), &EditorHelpSearch::_confirmed); - ClassDB::bind_method(D_METHOD("_sbox_input"), &EditorHelpSearch::_sbox_input); - ClassDB::bind_method(D_METHOD("_update_search"), &EditorHelpSearch::_update_search); - - ADD_SIGNAL(MethodInfo("go_to_help")); -} - -EditorHelpSearch::EditorHelpSearch() { - - VBoxContainer *vbc = memnew(VBoxContainer); - add_child(vbc); - - search_box = memnew(LineEdit); - vbc->add_child(search_box); - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); - search_options = memnew(Tree); - search_options->set_hide_root(true); - vbc->add_margin_child(TTR("Matches:"), search_options, true); - get_ok()->set_text(TTR("Open")); - get_ok()->set_disabled(true); - register_text_enter(search_box); - set_hide_on_ok(false); - search_options->connect("item_activated", this, "_confirmed"); - set_title(TTR("Search Help")); -} - -///////////////////////////////// - -void EditorHelpIndex::add_type(const String &p_type, HashMap<String, TreeItem *> &p_types, TreeItem *p_root) { - - if (p_types.has(p_type)) - return; - - String inherits = EditorHelp::get_doc_data()->class_list[p_type].inherits; - - TreeItem *parent = p_root; - - if (inherits.length()) { - - if (!p_types.has(inherits)) { - - add_type(inherits, p_types, p_root); - } - - if (p_types.has(inherits)) - parent = p_types[inherits]; - } - - TreeItem *item = class_list->create_item(parent); - item->set_metadata(0, p_type); - item->set_tooltip(0, EditorHelp::get_doc_data()->class_list[p_type].brief_description); - item->set_text(0, p_type); - - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(p_type); - item->set_icon(0, icon); - - p_types[p_type] = item; -} - -void EditorHelpIndex::_tree_item_selected() { - - TreeItem *s = class_list->get_selected(); - if (!s) - return; - - EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); - emit_signal("open_class", s->get_text(0)); - hide(); -} - -void EditorHelpIndex::select_class(const String &p_class) { - - if (!tree_item_map.has(p_class)) - return; - tree_item_map[p_class]->select(0); - class_list->ensure_cursor_is_visible(); -} - -void EditorHelpIndex::popup_dialog() { - - popup_centered(Size2(500, 600) * EDSCALE); - - search_box->set_text(""); - _update_class_list(); -} - -void EditorHelpIndex::_notification(int p_what) { - - if (p_what == NOTIFICATION_ENTER_TREE) { - - //_update_icons - search_box->set_right_icon(get_icon("Search", "EditorIcons")); - search_box->set_clear_button_enabled(true); - _update_class_list(); - - connect("confirmed", this, "_tree_item_selected"); - - } else if (p_what == NOTIFICATION_POST_POPUP) { - - search_box->call_deferred("grab_focus"); - } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { - - //_update_icons - search_box->set_right_icon(get_icon("Search", "EditorIcons")); - search_box->set_clear_button_enabled(true); - - bool enable_rl = EditorSettings::get_singleton()->get("docks/scene_tree/draw_relationship_lines"); - Color rl_color = EditorSettings::get_singleton()->get("docks/scene_tree/relationship_line_color"); - - if (enable_rl) { - class_list->add_constant_override("draw_relationship_lines", 1); - class_list->add_color_override("relationship_line_color", rl_color); - } else { - class_list->add_constant_override("draw_relationship_lines", 0); - } - } -} - -void EditorHelpIndex::_text_changed(const String &p_text) { - - _update_class_list(); -} - -void EditorHelpIndex::_update_class_list() { - - class_list->clear(); - tree_item_map.clear(); - TreeItem *root = class_list->create_item(); - - String filter = search_box->get_text().strip_edges(); - String to_select = ""; - - for (Map<String, DocData::ClassDoc>::Element *E = EditorHelp::get_doc_data()->class_list.front(); E; E = E->next()) { - - if (filter == "") { - add_type(E->key(), tree_item_map, root); - } else { - - bool found = false; - String type = E->key(); - - while (type != "") { - if (filter.is_subsequence_ofi(type)) { - - if (to_select.empty() || type.length() < to_select.length()) { - to_select = type; - } - - found = true; - } - - type = EditorHelp::get_doc_data()->class_list[type].inherits; - } - - if (found) { - add_type(E->key(), tree_item_map, root); - } - } - } - - if (tree_item_map.has(filter)) { - select_class(filter); - } else if (to_select != "") { - select_class(to_select); - } -} - -void EditorHelpIndex::_sbox_input(const Ref<InputEvent> &p_ie) { - - Ref<InputEventKey> k = p_ie; - - if (k.is_valid() && (k->get_scancode() == KEY_UP || - k->get_scancode() == KEY_DOWN || - k->get_scancode() == KEY_PAGEUP || - k->get_scancode() == KEY_PAGEDOWN)) { - - class_list->call("_gui_input", k); - search_box->accept_event(); - } -} - -void EditorHelpIndex::_bind_methods() { - - ClassDB::bind_method("_tree_item_selected", &EditorHelpIndex::_tree_item_selected); - ClassDB::bind_method("_text_changed", &EditorHelpIndex::_text_changed); - ClassDB::bind_method("_sbox_input", &EditorHelpIndex::_sbox_input); - ClassDB::bind_method("select_class", &EditorHelpIndex::select_class); - ADD_SIGNAL(MethodInfo("open_class")); -} - -EditorHelpIndex::EditorHelpIndex() { - - VBoxContainer *vbc = memnew(VBoxContainer); - add_child(vbc); - - search_box = memnew(LineEdit); - vbc->add_child(search_box); - search_box->set_h_size_flags(SIZE_EXPAND_FILL); - - register_text_enter(search_box); - - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); - - class_list = memnew(Tree); - vbc->add_margin_child(TTR("Class List:") + " ", class_list, true); - class_list->set_hide_root(true); - class_list->set_v_size_flags(SIZE_EXPAND_FILL); - - class_list->connect("item_activated", this, "_tree_item_selected"); - - bool enable_rl = EditorSettings::get_singleton()->get("docks/scene_tree/draw_relationship_lines"); - Color rl_color = EditorSettings::get_singleton()->get("docks/scene_tree/relationship_line_color"); - - if (enable_rl) { - class_list->add_constant_override("draw_relationship_lines", 1); - class_list->add_color_override("relationship_line_color", rl_color); - } else { - class_list->add_constant_override("draw_relationship_lines", 0); - } - - get_ok()->set_text(TTR("Open")); - set_title(TTR("Search Classes")); -} - -///////////////////////////////// - DocData *EditorHelp::doc = NULL; void EditorHelp::_init_colors() { @@ -1919,8 +1447,6 @@ EditorHelp::EditorHelp() { EditorHelp::~EditorHelp() { } -///////////// - void EditorHelpBit::_go_to_help(String p_what) { EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); diff --git a/editor/editor_help.h b/editor/editor_help.h index 25db68b42d..205778ec11 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -31,6 +31,8 @@ #ifndef EDITOR_HELP_H #define EDITOR_HELP_H +#include "editor/code_editor.h" +#include "editor/doc/doc_data.h" #include "editor/editor_plugin.h" #include "scene/gui/menu_button.h" #include "scene/gui/panel_container.h" @@ -38,95 +40,9 @@ #include "scene/gui/split_container.h" #include "scene/gui/tab_container.h" #include "scene/gui/text_edit.h" -#include "scene/gui/tree.h" - -#include "editor/code_editor.h" -#include "editor/doc/doc_data.h" #include "scene/main/timer.h" -class EditorNode; - -class EditorHelpSearch : public ConfirmationDialog { - - GDCLASS(EditorHelpSearch, ConfirmationDialog) - - LineEdit *search_box; - Tree *search_options; - String base_type; - - class IncrementalSearch : public Reference { - String term; - TreeItem *root; - - EditorHelpSearch *search; - Tree *search_options; - - DocData *doc; - Ref<Texture> def_icon; - - int phase; - Map<String, DocData::ClassDoc>::Element *iterator; - - void phase1(Map<String, DocData::ClassDoc>::Element *E); - void phase2(Map<String, DocData::ClassDoc>::Element *E); - bool slice(); - - public: - IncrementalSearch(EditorHelpSearch *p_search, Tree *p_search_options, const String &p_term); - - bool empty() const; - bool work(uint64_t slot = 1000000 / 10); - }; - - Ref<IncrementalSearch> search; - - void _update_search(); - - void _sbox_input(const Ref<InputEvent> &p_ie); - - void _confirmed(); - void _text_changed(const String &p_newtext); - -protected: - void _notification(int p_what); - static void _bind_methods(); - -public: - void popup_dialog(); - void popup_dialog(const String &p_term); - - EditorHelpSearch(); -}; - -class EditorHelpIndex : public ConfirmationDialog { - GDCLASS(EditorHelpIndex, ConfirmationDialog); - - LineEdit *search_box; - Tree *class_list; - HashMap<String, TreeItem *> tree_item_map; - - void _tree_item_selected(); - void _text_changed(const String &p_text); - void _sbox_input(const Ref<InputEvent> &p_ie); - - void _update_class_list(); - - void add_type(const String &p_type, HashMap<String, TreeItem *> &p_types, TreeItem *p_root); - -protected: - void _notification(int p_what); - static void _bind_methods(); - -public: - void select_class(const String &p_class); - - void popup_dialog(); - - EditorHelpIndex(); -}; - class FindBar : public HBoxContainer { - GDCLASS(FindBar, HBoxContainer); LineEdit *search_text; @@ -172,6 +88,7 @@ public: }; class EditorHelp : public VBoxContainer { + GDCLASS(EditorHelp, VBoxContainer); enum Page { diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp new file mode 100644 index 0000000000..4e4c5143f2 --- /dev/null +++ b/editor/editor_help_search.cpp @@ -0,0 +1,596 @@ +/*************************************************************************/ +/* editor_help_search.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "editor_help_search.h" + +#include "core/os/keyboard.h" +#include "editor_node.h" + +void EditorHelpSearch::_update_icons() { + + search_box->set_right_icon(get_icon("Search", "EditorIcons")); + search_box->set_clear_button_enabled(true); + search_box->add_icon_override("right_icon", get_icon("Search", "EditorIcons")); + case_sensitive_button->set_icon(get_icon("MatchCase", "EditorIcons")); + hierarchy_button->set_icon(get_icon("ClassList", "EditorIcons")); + + if (is_visible_in_tree()) + _update_results(); +} + +void EditorHelpSearch::_load_settings() { + + bool enable_rl = EditorSettings::get_singleton()->get("docks/scene_tree/draw_relationship_lines"); + Color rl_color = EditorSettings::get_singleton()->get("docks/scene_tree/relationship_line_color"); + + if (enable_rl) { + results_tree->add_constant_override("draw_relationship_lines", 1); + results_tree->add_color_override("relationship_line_color", rl_color); + results_tree->add_constant_override("draw_guides", 0); + } else { + results_tree->add_constant_override("draw_relationship_lines", 0); + results_tree->add_constant_override("draw_guides", 1); + } +} + +void EditorHelpSearch::_update_results() { + + String term = search_box->get_text(); + + int search_flags = filter_combo->get_selected_id(); + if (case_sensitive_button->is_pressed()) + search_flags |= SEARCH_CASE_SENSITIVE; + if (hierarchy_button->is_pressed()) + search_flags |= SEARCH_SHOW_HIERARCHY; + + search = Ref<Runner>(memnew(Runner(this, results_tree, term, search_flags))); + set_process(true); +} + +void EditorHelpSearch::_search_box_gui_input(const Ref<InputEvent> &p_event) { + + // Redirect up and down navigational key events to the results list. + Ref<InputEventKey> key = p_event; + if (key.is_valid()) { + switch (key->get_scancode()) { + case KEY_UP: + case KEY_DOWN: + case KEY_PAGEUP: + case KEY_PAGEDOWN: { + results_tree->call("_gui_input", key); + search_box->accept_event(); + } break; + } + } +} + +void EditorHelpSearch::_search_box_text_changed(const String &p_text) { + + _update_results(); +} + +void EditorHelpSearch::_filter_combo_item_selected(int p_option) { + + _update_results(); +} + +void EditorHelpSearch::_confirmed() { + + TreeItem *item = results_tree->get_selected(); + if (!item) + return; + + // Activate the script editor and emit the signal with the documentation link to display. + EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); + + emit_signal("go_to_help", item->get_metadata(0)); + + hide(); +} + +void EditorHelpSearch::_notification(int p_what) { + + switch (p_what) { + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + + _load_settings(); + _update_icons(); + } break; + case NOTIFICATION_ENTER_TREE: { + + connect("confirmed", this, "_confirmed"); + _update_icons(); + } break; + case NOTIFICATION_POPUP_HIDE: { + + results_tree->clear(); + get_ok()->set_disabled(true); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "search_help", get_rect()); + } break; + case NOTIFICATION_PROCESS: { + + // Update background search. + if (search.is_valid()) { + if (search->work()) { + // Search done. + + // Only point to the perfect match if it's a new search, and not just reopening a old one. + if (!old_search) + results_tree->ensure_cursor_is_visible(); + else + old_search = false; + + get_ok()->set_disabled(!results_tree->get_selected()); + + search = Ref<Runner>(); + set_process(false); + } + } else { + set_process(false); + } + } break; + } +} + +void EditorHelpSearch::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_update_results"), &EditorHelpSearch::_update_results); + ClassDB::bind_method(D_METHOD("_search_box_gui_input"), &EditorHelpSearch::_search_box_gui_input); + ClassDB::bind_method(D_METHOD("_search_box_text_changed"), &EditorHelpSearch::_search_box_text_changed); + ClassDB::bind_method(D_METHOD("_filter_combo_item_selected"), &EditorHelpSearch::_filter_combo_item_selected); + ClassDB::bind_method(D_METHOD("_confirmed"), &EditorHelpSearch::_confirmed); + ADD_SIGNAL(MethodInfo("go_to_help")); +} + +void EditorHelpSearch::popup_dialog() { + + popup_dialog(search_box->get_text()); +} + +void EditorHelpSearch::popup_dialog(const String &p_term) { + + // Restore valid window bounds or pop up at default size. + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "search_help", Rect2()); + if (saved_size != Rect2()) + popup(saved_size); + else + popup_centered_ratio(0.5F); + + if (p_term == "") { + search_box->clear(); + } else { + old_search = true; + search_box->set_text(p_term); + search_box->select_all(); + } + search_box->grab_focus(); + _update_results(); +} + +EditorHelpSearch::EditorHelpSearch() { + + old_search = false; + + set_hide_on_ok(false); + set_resizable(true); + set_title(TTR("Search Help")); + + get_ok()->set_disabled(true); + get_ok()->set_text(TTR("Open")); + + // Split search and results area. + VBoxContainer *vbox = memnew(VBoxContainer); + add_child(vbox); + + // Create the search box and filter controls (at the top). + HBoxContainer *hbox = memnew(HBoxContainer); + vbox->add_child(hbox); + + search_box = memnew(LineEdit); + search_box->set_custom_minimum_size(Size2(200, 0)); + search_box->set_h_size_flags(SIZE_EXPAND_FILL); + search_box->connect("gui_input", this, "_search_box_gui_input"); + search_box->connect("text_changed", this, "_search_box_text_changed"); + register_text_enter(search_box); + hbox->add_child(search_box); + + case_sensitive_button = memnew(ToolButton); + case_sensitive_button->set_tooltip("Case Sensitive"); + case_sensitive_button->connect("pressed", this, "_update_results"); + case_sensitive_button->set_toggle_mode(true); + case_sensitive_button->set_focus_mode(FOCUS_NONE); + hbox->add_child(case_sensitive_button); + + hierarchy_button = memnew(ToolButton); + hierarchy_button->set_tooltip("Show Hierarchy"); + hierarchy_button->connect("pressed", this, "_update_results"); + hierarchy_button->set_toggle_mode(true); + hierarchy_button->set_pressed(true); + hierarchy_button->set_focus_mode(FOCUS_NONE); + hbox->add_child(hierarchy_button); + + filter_combo = memnew(OptionButton); + filter_combo->set_custom_minimum_size(Size2(200, 0)); + filter_combo->set_stretch_ratio(0); // Fixed width. + filter_combo->add_item(TTR("Display All"), SEARCH_ALL); + filter_combo->add_separator(); + filter_combo->add_item(TTR("Classes Only"), SEARCH_CLASSES); + filter_combo->add_item(TTR("Methods Only"), SEARCH_METHODS); + filter_combo->add_item(TTR("Signals Only"), SEARCH_SIGNALS); + filter_combo->add_item(TTR("Constants Only"), SEARCH_CONSTANTS); + filter_combo->add_item(TTR("Properties Only"), SEARCH_PROPERTIES); + filter_combo->add_item(TTR("Theme Properties Only"), SEARCH_THEME_ITEMS); + filter_combo->connect("item_selected", this, "_filter_combo_item_selected"); + hbox->add_child(filter_combo); + + // Create the results tree. + results_tree = memnew(Tree); + results_tree->set_v_size_flags(SIZE_EXPAND_FILL); + results_tree->set_columns(2); + results_tree->set_column_title(0, TTR("Name")); + results_tree->set_column_title(1, TTR("Member Type")); + results_tree->set_column_expand(1, false); + results_tree->set_column_min_width(1, 150); + results_tree->set_custom_minimum_size(Size2(0, 100)); + results_tree->set_hide_root(true); + results_tree->set_select_mode(Tree::SELECT_ROW); + results_tree->connect("item_activated", this, "_confirmed"); + results_tree->connect("item_selected", get_ok(), "set_disabled", varray(false)); + vbox->add_child(results_tree, true); + + _load_settings(); +} + +bool EditorHelpSearch::Runner::_slice() { + + bool phase_done = false; + switch (phase) { + case PHASE_MATCH_CLASSES_INIT: + phase_done = _phase_match_classes_init(); + break; + case PHASE_MATCH_CLASSES: + phase_done = _phase_match_classes(); + break; + case PHASE_CLASS_ITEMS_INIT: + phase_done = _phase_class_items_init(); + break; + case PHASE_CLASS_ITEMS: + phase_done = _phase_class_items(); + break; + case PHASE_MEMBER_ITEMS_INIT: + phase_done = _phase_member_items_init(); + break; + case PHASE_MEMBER_ITEMS: + phase_done = _phase_member_items(); + break; + case PHASE_SELECT_MATCH: + phase_done = _phase_select_match(); + break; + case PHASE_MAX: + return true; + default: + WARN_PRINTS("Invalid or unhandled phase in EditorHelpSearch::Runner, aborting search."); + return true; + }; + + if (phase_done) + phase++; + return false; +} + +bool EditorHelpSearch::Runner::_phase_match_classes_init() { + + iterator_doc = EditorHelp::get_doc_data()->class_list.front(); + matches.clear(); + matched_item = NULL; + + return true; +} + +bool EditorHelpSearch::Runner::_phase_match_classes() { + + DocData::ClassDoc &class_doc = iterator_doc->value(); + + matches[class_doc.name] = ClassMatch(); + ClassMatch &match = matches[class_doc.name]; + + match.doc = &class_doc; + + // Match class name. + if (search_flags & SEARCH_CLASSES) + match.name = term == "" || _match_string(term, class_doc.name); + + // Match members if the term is long enough. + if (term.length() > 1) { + if (search_flags & SEARCH_METHODS) + for (int i = 0; i < class_doc.methods.size(); i++) { + String method_name = search_flags & SEARCH_CASE_SENSITIVE ? class_doc.methods[i].name : class_doc.methods[i].name.to_lower(); + if (method_name.find(term) > -1 || + (term.begins_with(".") && method_name.begins_with(term.right(1))) || + (term.ends_with("(") && method_name.ends_with(term.left(term.length() - 1).strip_edges())) || + (term.begins_with(".") && term.ends_with("(") && method_name == term.substr(1, term.length() - 2).strip_edges())) + match.methods.push_back(const_cast<DocData::MethodDoc *>(&class_doc.methods[i])); + } + if (search_flags & SEARCH_SIGNALS) + for (int i = 0; i < class_doc.signals.size(); i++) + if (_match_string(term, class_doc.signals[i].name)) + match.signals.push_back(const_cast<DocData::MethodDoc *>(&class_doc.signals[i])); + if (search_flags & SEARCH_CONSTANTS) + for (int i = 0; i < class_doc.constants.size(); i++) + if (_match_string(term, class_doc.constants[i].name)) + match.constants.push_back(const_cast<DocData::ConstantDoc *>(&class_doc.constants[i])); + if (search_flags & SEARCH_PROPERTIES) + for (int i = 0; i < class_doc.properties.size(); i++) + if (_match_string(term, class_doc.properties[i].name)) + match.properties.push_back(const_cast<DocData::PropertyDoc *>(&class_doc.properties[i])); + if (search_flags & SEARCH_THEME_ITEMS) + for (int i = 0; i < class_doc.theme_properties.size(); i++) + if (_match_string(term, class_doc.theme_properties[i].name)) + match.theme_properties.push_back(const_cast<DocData::PropertyDoc *>(&class_doc.theme_properties[i])); + } + + iterator_doc = iterator_doc->next(); + return !iterator_doc; +} + +bool EditorHelpSearch::Runner::_phase_class_items_init() { + + iterator_match = matches.front(); + + results_tree->clear(); + root_item = results_tree->create_item(); + class_items.clear(); + + return true; +} + +bool EditorHelpSearch::Runner::_phase_class_items() { + + ClassMatch &match = iterator_match->value(); + + if (search_flags & SEARCH_SHOW_HIERARCHY) { + if (match.required()) + _create_class_hierarchy(match); + } else { + if (match.name) + _create_class_item(root_item, match.doc, false); + } + + iterator_match = iterator_match->next(); + return !iterator_match; +} + +bool EditorHelpSearch::Runner::_phase_member_items_init() { + + iterator_match = matches.front(); + + return true; +} + +bool EditorHelpSearch::Runner::_phase_member_items() { + + ClassMatch &match = iterator_match->value(); + + TreeItem *parent = search_flags & SEARCH_SHOW_HIERARCHY ? class_items[match.doc->name] : root_item; + for (int i = 0; i < match.methods.size(); i++) + _create_method_item(parent, match.doc, match.methods[i]); + for (int i = 0; i < match.signals.size(); i++) + _create_signal_item(parent, match.doc, match.signals[i]); + for (int i = 0; i < match.constants.size(); i++) + _create_constant_item(parent, match.doc, match.constants[i]); + for (int i = 0; i < match.properties.size(); i++) + _create_property_item(parent, match.doc, match.properties[i]); + for (int i = 0; i < match.theme_properties.size(); i++) + _create_theme_property_item(parent, match.doc, match.theme_properties[i]); + + iterator_match = iterator_match->next(); + return !iterator_match; +} + +bool EditorHelpSearch::Runner::_phase_select_match() { + + if (matched_item) + matched_item->select(0); + return true; +} + +bool EditorHelpSearch::Runner::_match_string(const String &p_term, const String &p_string) const { + + if (search_flags & SEARCH_CASE_SENSITIVE) + return p_string.find(p_term) > -1; + else + return p_string.findn(p_term) > -1; +} + +void EditorHelpSearch::Runner::_match_item(TreeItem *p_item, const String &p_text) { + + if (!matched_item) { + if (search_flags & SEARCH_CASE_SENSITIVE) { + if (p_text.casecmp_to(term) == 0) + matched_item = p_item; + } else { + if (p_text.nocasecmp_to(term) == 0) + matched_item = p_item; + } + } +} + +TreeItem *EditorHelpSearch::Runner::_create_class_hierarchy(const ClassMatch &p_match) { + + if (class_items.has(p_match.doc->name)) + return class_items[p_match.doc->name]; + + // Ensure parent nodes are created first. + TreeItem *parent = root_item; + if (p_match.doc->inherits != "") { + if (class_items.has(p_match.doc->inherits)) { + parent = class_items[p_match.doc->inherits]; + } else { + ClassMatch &base_match = matches[p_match.doc->inherits]; + parent = _create_class_hierarchy(base_match); + } + } + + TreeItem *class_item = _create_class_item(parent, p_match.doc, !p_match.name); + class_items[p_match.doc->name] = class_item; + return class_item; +} + +TreeItem *EditorHelpSearch::Runner::_create_class_item(TreeItem *p_parent, const DocData::ClassDoc *p_doc, bool p_gray) { + + Ref<Texture> icon = empty_icon; + if (ui_service->has_icon(p_doc->name, "EditorIcons")) + icon = ui_service->get_icon(p_doc->name, "EditorIcons"); + else if (ClassDB::class_exists(p_doc->name) && ClassDB::is_parent_class(p_doc->name, "Object")) + icon = ui_service->get_icon("Object", "EditorIcons"); + String tooltip = p_doc->brief_description.strip_edges(); + + TreeItem *item = results_tree->create_item(p_parent); + item->set_icon(0, icon); + item->set_text(0, p_doc->name); + item->set_text(1, TTR("Class")); + item->set_tooltip(0, tooltip); + item->set_tooltip(1, tooltip); + item->set_metadata(0, "class_name:" + p_doc->name); + if (p_gray) { + item->set_custom_color(0, disabled_color); + item->set_custom_color(1, disabled_color); + } + + _match_item(item, p_doc->name); + + return item; +} + +TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc) { + + String tooltip = p_doc->return_type + " " + p_class_doc->name + "." + p_doc->name + "("; + for (int i = 0; i < p_doc->arguments.size(); i++) { + const DocData::ArgumentDoc &arg = p_doc->arguments[i]; + tooltip += arg.type + " " + arg.name; + if (arg.default_value != "") + tooltip += " = " + arg.default_value; + if (i < p_doc->arguments.size() - 1) + tooltip += ", "; + } + tooltip += ")"; + return _create_member_item(p_parent, p_class_doc->name, "MemberMethod", p_doc->name, "Method", "method", tooltip); +} + +TreeItem *EditorHelpSearch::Runner::_create_signal_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc) { + + String tooltip = p_doc->return_type + " " + p_class_doc->name + "." + p_doc->name + "("; + for (int i = 0; i < p_doc->arguments.size(); i++) { + const DocData::ArgumentDoc &arg = p_doc->arguments[i]; + tooltip += arg.type + " " + arg.name; + if (arg.default_value != "") + tooltip += " = " + arg.default_value; + if (i < p_doc->arguments.size() - 1) + tooltip += ", "; + } + tooltip += ")"; + return _create_member_item(p_parent, p_class_doc->name, "MemberSignal", p_doc->name, "Signal", "signal", tooltip); +} + +TreeItem *EditorHelpSearch::Runner::_create_constant_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::ConstantDoc *p_doc) { + + String tooltip = p_class_doc->name + "." + p_doc->name; + return _create_member_item(p_parent, p_class_doc->name, "MemberConstant", p_doc->name, "Constant", "constant", tooltip); +} + +TreeItem *EditorHelpSearch::Runner::_create_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc) { + + String tooltip = p_doc->type + " " + p_class_doc->name + "." + p_doc->name; + tooltip += "\n " + p_class_doc->name + "." + p_doc->setter + "(value) setter"; + tooltip += "\n " + p_class_doc->name + "." + p_doc->getter + "() getter"; + return _create_member_item(p_parent, p_class_doc->name, "MemberProperty", p_doc->name, "Property", "property", tooltip); +} + +TreeItem *EditorHelpSearch::Runner::_create_theme_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc) { + + String tooltip = p_doc->type + " " + p_class_doc->name + "." + p_doc->name; + return _create_member_item(p_parent, p_class_doc->name, "MemberTheme", p_doc->name, "Theme Property", "theme_item", tooltip); +} + +TreeItem *EditorHelpSearch::Runner::_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_type, const String &p_metatype, const String &p_tooltip) { + + Ref<Texture> icon; + String text; + if (search_flags & SEARCH_SHOW_HIERARCHY) { + icon = ui_service->get_icon(p_icon, "EditorIcons"); + text = p_name; + } else { + icon = ui_service->get_icon(p_icon, "EditorIcons"); + /*// In flat mode, show the class icon. + if (ui_service->has_icon(p_class_name, "EditorIcons")) + icon = ui_service->get_icon(p_class_name, "EditorIcons"); + else if (ClassDB::is_parent_class(p_class_name, "Object")) + icon = ui_service->get_icon("Object", "EditorIcons");*/ + text = p_class_name + "." + p_name; + } + + TreeItem *item = results_tree->create_item(p_parent); + item->set_icon(0, icon); + item->set_text(0, text); + item->set_text(1, TTR(p_type)); + item->set_tooltip(0, p_tooltip); + item->set_tooltip(1, p_tooltip); + item->set_metadata(0, "class_" + p_metatype + ":" + p_class_name + ":" + p_name); + + _match_item(item, p_name); + + return item; +} + +bool EditorHelpSearch::Runner::work(uint64_t slot) { + + // Return true when the search has been completed, otherwise false. + const uint64_t until = OS::get_singleton()->get_ticks_usec() + slot; + while (!_slice()) + if (OS::get_singleton()->get_ticks_usec() > until) + return false; + return true; +} + +EditorHelpSearch::Runner::Runner(Control *p_icon_service, Tree *p_results_tree, const String &p_term, int p_search_flags) { + + ui_service = p_icon_service; + results_tree = p_results_tree; + term = p_term.strip_edges(); + search_flags = p_search_flags; + + if ((search_flags & SEARCH_CASE_SENSITIVE) == 0) + term = term.to_lower(); + + empty_icon = ui_service->get_icon("ArrowRight", "EditorIcons"); + disabled_color = ui_service->get_color("disabled_font_color", "Editor"); + + phase = 0; +} diff --git a/editor/editor_help_search.h b/editor/editor_help_search.h new file mode 100644 index 0000000000..d71ad5f12d --- /dev/null +++ b/editor/editor_help_search.h @@ -0,0 +1,155 @@ +/*************************************************************************/ +/* editor_help_search.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef EDITOR_HELP_SEARCH_H +#define EDITOR_HELP_SEARCH_H + +#include "core/ordered_hash_map.h" +#include "editor/code_editor.h" +#include "editor/editor_help.h" +#include "editor/editor_plugin.h" +#include "scene/gui/option_button.h" +#include "scene/gui/tree.h" + +class EditorHelpSearch : public ConfirmationDialog { + GDCLASS(EditorHelpSearch, ConfirmationDialog); + + enum SearchFlags { + SEARCH_CLASSES = 1 << 0, + SEARCH_METHODS = 1 << 1, + SEARCH_SIGNALS = 1 << 2, + SEARCH_CONSTANTS = 1 << 3, + SEARCH_PROPERTIES = 1 << 4, + SEARCH_THEME_ITEMS = 1 << 5, + SEARCH_ALL = SEARCH_CLASSES | SEARCH_METHODS | SEARCH_SIGNALS | SEARCH_CONSTANTS | SEARCH_PROPERTIES | SEARCH_THEME_ITEMS, + SEARCH_CASE_SENSITIVE = 1 << 29, + SEARCH_SHOW_HIERARCHY = 1 << 30 + }; + + LineEdit *search_box; + ToolButton *case_sensitive_button; + ToolButton *hierarchy_button; + OptionButton *filter_combo; + Tree *results_tree; + bool old_search; + + class Runner; + Ref<Runner> search; + + void _update_icons(); + void _load_settings(); + void _update_results(); + + void _search_box_gui_input(const Ref<InputEvent> &p_event); + void _search_box_text_changed(const String &p_text); + void _filter_combo_item_selected(int p_option); + void _confirmed(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + void popup_dialog(); + void popup_dialog(const String &p_term); + + EditorHelpSearch(); +}; + +class EditorHelpSearch::Runner : public Reference { + + enum Phase { + PHASE_MATCH_CLASSES_INIT, + PHASE_MATCH_CLASSES, + PHASE_CLASS_ITEMS_INIT, + PHASE_CLASS_ITEMS, + PHASE_MEMBER_ITEMS_INIT, + PHASE_MEMBER_ITEMS, + PHASE_SELECT_MATCH, + PHASE_MAX + }; + int phase; + + struct ClassMatch { + DocData::ClassDoc *doc; + bool name; + Vector<DocData::MethodDoc *> methods; + Vector<DocData::MethodDoc *> signals; + Vector<DocData::ConstantDoc *> constants; + Vector<DocData::PropertyDoc *> properties; + Vector<DocData::PropertyDoc *> theme_properties; + + bool required() { + return name || methods.size() || signals.size() || constants.size() || properties.size() || theme_properties.size(); + } + }; + + Control *ui_service; + Tree *results_tree; + String term; + int search_flags; + + Ref<Texture> empty_icon; + Color disabled_color; + + Map<String, DocData::ClassDoc>::Element *iterator_doc; + Map<String, ClassMatch> matches; + Map<String, ClassMatch>::Element *iterator_match; + TreeItem *root_item; + Map<String, TreeItem *> class_items; + TreeItem *matched_item; + + bool _slice(); + bool _phase_match_classes_init(); + bool _phase_match_classes(); + bool _phase_class_items_init(); + bool _phase_class_items(); + bool _phase_member_items_init(); + bool _phase_member_items(); + bool _phase_select_match(); + + bool _match_string(const String &p_term, const String &p_string) const; + void _match_item(TreeItem *p_item, const String &p_text); + TreeItem *_create_class_hierarchy(const ClassMatch &p_match); + TreeItem *_create_class_item(TreeItem *p_parent, const DocData::ClassDoc *p_doc, bool p_gray); + TreeItem *_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc); + TreeItem *_create_signal_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc); + TreeItem *_create_constant_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::ConstantDoc *p_doc); + TreeItem *_create_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc); + TreeItem *_create_theme_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc); + TreeItem *_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_type, const String &p_metatype, const String &p_tooltip); + +public: + bool work(uint64_t slot = 100000); + + Runner(Control *p_icon_service, Tree *p_results_tree, const String &p_term, int p_search_flags); +}; + +#endif // EDITOR_HELP_SEARCH_H diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 2c4168f1a0..10c9974cdd 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -128,18 +128,22 @@ void EditorProperty::_notification(int p_what) { bottom_rect = Rect2(m, rect.size.height + get_constant("vseparation", "Tree"), size.width - m, bottom_editor->get_combined_minimum_size().height); } - } - if (keying) { - Ref<Texture> key; + if (keying) { + Ref<Texture> key; - if (use_keying_next()) { - key = get_icon("KeyNext", "EditorIcons"); - } else { - key = get_icon("Key", "EditorIcons"); - } + if (use_keying_next()) { + key = get_icon("KeyNext", "EditorIcons"); + } else { + key = get_icon("Key", "EditorIcons"); + } - rect.size.x -= key->get_width() + get_constant("hseparator", "Tree"); + rect.size.x -= key->get_width() + get_constant("hseparator", "Tree"); + + if (no_children) { + text_size -= key->get_width() + 4 * EDSCALE; + } + } } //set children @@ -297,16 +301,12 @@ bool EditorProperty::is_read_only() const { return read_only; } -bool EditorProperty::_might_be_in_instance() { - - if (!object) - return false; - - Node *node = Object::cast_to<Node>(object); +bool EditorPropertyRevert::may_node_be_in_instance(Node *p_node) { Node *edited_scene = EditorNode::get_singleton()->get_edited_scene(); bool might_be = false; + Node *node = p_node; while (node) { @@ -328,13 +328,9 @@ bool EditorProperty::_might_be_in_instance() { return might_be; // or might not be } -bool EditorProperty::_get_instanced_node_original_property(const StringName &p_prop, Variant &value) { - - Node *node = Object::cast_to<Node>(object); - - if (!node) - return false; +bool EditorPropertyRevert::get_instanced_node_original_property(Node *p_node, const StringName &p_prop, Variant &value) { + Node *node = p_node; Node *orig = node; Node *edited_scene = EditorNode::get_singleton()->get_edited_scene(); @@ -374,16 +370,26 @@ bool EditorProperty::_get_instanced_node_original_property(const StringName &p_p node = node->get_owner(); } + if (!found) { + //if not found, try default class value + Variant attempt = ClassDB::class_get_default_property_value(node->get_class_name(), p_prop); + if (attempt.get_type() != Variant::NIL) { + found = true; + value = attempt; + } + } + return found; } -bool EditorProperty::_is_property_different(const Variant &p_current, const Variant &p_orig, int p_usage) { +bool EditorPropertyRevert::is_node_property_different(Node *p_node, const Variant &p_current, const Variant &p_orig) { // this is a pretty difficult function, because a property may not be saved but may have // the flag to not save if one or if zero + //make sure there is an actual state { - Node *node = Object::cast_to<Node>(object); + Node *node = p_node; if (!node) return false; @@ -415,15 +421,6 @@ bool EditorProperty::_is_property_different(const Variant &p_current, const Vari return false; //pointless to check if we are not comparing against anything. } - if (p_orig.get_type() == Variant::NIL) { - // not found (was not saved) - // check if it was not saved due to being zero or one - if (p_current.is_zero() && property_usage & PROPERTY_USAGE_STORE_IF_NONZERO) - return false; - if (p_current.is_one() && property_usage & PROPERTY_USAGE_STORE_IF_NONONE) - return false; - } - if (p_current.get_type() == Variant::REAL && p_orig.get_type() == Variant::REAL) { float a = p_current; float b = p_orig; @@ -434,49 +431,55 @@ bool EditorProperty::_is_property_different(const Variant &p_current, const Vari return bool(Variant::evaluate(Variant::OP_NOT_EQUAL, p_current, p_orig)); } -bool EditorProperty::_is_instanced_node_with_original_property_different() { +bool EditorPropertyRevert::can_property_revert(Object *p_object, const StringName &p_property) { + + bool has_revert = false; + + Node *node = Object::cast_to<Node>(p_object); - bool mbi = _might_be_in_instance(); - if (mbi) { + if (node && EditorPropertyRevert::may_node_be_in_instance(node)) { + //check for difference including instantiation Variant vorig; - int usage = property_usage & (PROPERTY_USAGE_STORE_IF_NONONE | PROPERTY_USAGE_STORE_IF_NONZERO); - if (_get_instanced_node_original_property(property, vorig) || usage) { - Variant v = object->get(property); + if (EditorPropertyRevert::get_instanced_node_original_property(node, p_property, vorig)) { + Variant v = p_object->get(p_property); - if (_is_property_different(v, vorig, usage)) { - return true; + if (EditorPropertyRevert::is_node_property_different(node, v, vorig)) { + has_revert = true; } } - } - return false; -} - -void EditorProperty::update_reload_status() { - - if (property == StringName()) - return; //no property, so nothing to do - - bool has_reload = false; - - if (_is_instanced_node_with_original_property_different()) { - has_reload = true; + } else { + //check for difference against default class value instead + Variant default_value = ClassDB::class_get_default_property_value(p_object->get_class_name(), p_property); + if (default_value != Variant() && default_value != p_object->get(p_property)) { + has_revert = true; + } } - if (object->call("property_can_revert", property).operator bool()) { + if (p_object->call("property_can_revert", p_property).operator bool()) { - has_reload = true; + has_revert = true; } - if (!has_reload && !object->get_script().is_null()) { - Ref<Script> scr = object->get_script(); + if (!has_revert && !p_object->get_script().is_null()) { + Ref<Script> scr = p_object->get_script(); Variant orig_value; - if (scr->get_property_default_value(property, orig_value)) { - if (orig_value != object->get(property)) { - has_reload = true; + if (scr->get_property_default_value(p_property, orig_value)) { + if (orig_value != p_object->get(p_property)) { + has_revert = true; } } } + return has_revert; +} + +void EditorProperty::update_reload_status() { + + if (property == StringName()) + return; //no property, so nothing to do + + bool has_reload = EditorPropertyRevert::can_property_revert(object, property); + if (has_reload != can_revert) { can_revert = has_reload; update(); @@ -484,6 +487,17 @@ void EditorProperty::update_reload_status() { } bool EditorProperty::use_keying_next() const { + List<PropertyInfo> plist; + object->get_property_list(&plist, true); + + for (List<PropertyInfo>::Element *I = plist.front(); I; I = I->next()) { + PropertyInfo &p = I->get(); + + if (p.name == property) { + return p.hint == PROPERTY_HINT_SPRITE_FRAME; + } + } + return false; } void EditorProperty::set_checkable(bool p_checkable) { @@ -617,14 +631,20 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { } if (keying_rect.has_point(mb->get_position())) { - emit_signal("property_keyed", property); + emit_signal("property_keyed", property, use_keying_next()); + + if (use_keying_next()) { + call_deferred("emit_signal", "property_changed", property, object->get(property).operator int64_t() + 1); + call_deferred("update_property"); + } } if (revert_rect.has_point(mb->get_position())) { Variant vorig; - if (_might_be_in_instance() && _get_instanced_node_original_property(property, vorig)) { + Node *node = Object::cast_to<Node>(object); + if (node && EditorPropertyRevert::may_node_be_in_instance(node) && EditorPropertyRevert::get_instanced_node_original_property(node, property, vorig)) { emit_signal("property_changed", property, vorig.duplicate(true)); update_property(); @@ -635,6 +655,7 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { Variant rev = object->call("property_get_revert", property); emit_signal("property_changed", property, rev); update_property(); + return; } if (!object->get_script().is_null()) { @@ -643,8 +664,16 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { if (scr->get_property_default_value(property, orig_value)) { emit_signal("property_changed", property, orig_value); update_property(); + return; } } + + Variant default_value = ClassDB::class_get_default_property_value(object->get_class_name(), property); + if (default_value != Variant()) { + emit_signal("property_changed", property, default_value); + update_property(); + return; + } } if (check_rect.has_point(mb->get_position())) { checked = !checked; @@ -722,9 +751,9 @@ Control *EditorProperty::make_custom_tooltip(const String &p_text) const { tooltip_text = p_text; EditorHelpBit *help_bit = memnew(EditorHelpBit); help_bit->add_style_override("panel", get_stylebox("panel", "TooltipPanel")); - help_bit->get_rich_text()->set_fixed_size_to_width(300); + help_bit->get_rich_text()->set_fixed_size_to_width(360 * EDSCALE); - String text = TTR("Property: ") + "[u][b]" + p_text.get_slice("::", 0) + "[/b][/u]\n"; + String text = TTR("Property:") + " [u][b]" + p_text.get_slice("::", 0) + "[/b][/u]\n"; text += p_text.get_slice("::", 1).strip_edges(); help_bit->set_text(text); help_bit->call_deferred("set_text", text); //hack so it uses proper theme once inside scene @@ -944,7 +973,7 @@ Control *EditorInspectorCategory::make_custom_tooltip(const String &p_text) cons tooltip_text = p_text; EditorHelpBit *help_bit = memnew(EditorHelpBit); help_bit->add_style_override("panel", get_stylebox("panel", "TooltipPanel")); - help_bit->get_rich_text()->set_fixed_size_to_width(300); + help_bit->get_rich_text()->set_fixed_size_to_width(360 * EDSCALE); String text = "[u][b]" + p_text.get_slice("::", 0) + "[/b][/u]\n"; text += p_text.get_slice("::", 1).strip_edges(); @@ -1066,10 +1095,8 @@ void EditorInspectorSection::_notification(int p_what) { Color color = get_color("font_color", "Tree"); draw_string(font, Point2(hs, font->get_ascent() + (h - font->get_height()) / 2).floor(), label, color, get_size().width); - int ofs = 0; if (arrow.is_valid()) { draw_texture(arrow, Point2(get_size().width - arrow->get_width(), (h - arrow->get_height()) / 2).floor()); - ofs += hs + arrow->get_width(); } } } @@ -1132,6 +1159,11 @@ void EditorInspectorSection::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + Ref<Font> font = get_font("font", "Tree"); + if (mb->get_position().y > font->get_height()) { //clicked outside + return; + } + _test_unfold(); bool unfold = !object->editor_is_section_unfolded(section); @@ -1364,6 +1396,8 @@ void EditorInspector::update_tree() { object->get_property_list(&plist, true); HashMap<String, VBoxContainer *> item_path; + Map<VBoxContainer *, EditorInspectorSection *> section_map; + item_path[""] = main_vbox; Color sscolor = get_color("prop_subsection", "Editor"); @@ -1526,7 +1560,9 @@ void EditorInspector::update_tree() { c.a /= level; section->setup(acc_path, path_name, object, c, use_folding); - item_path[acc_path] = section->get_vbox(); + VBoxContainer *vb = section->get_vbox(); + item_path[acc_path] = vb; + section_map[vb] = section; } current_vbox = item_path[acc_path]; level = (MIN(level + 1, 4)); @@ -1976,20 +2012,20 @@ void EditorInspector::_multiple_properties_changed(Vector<String> p_paths, Array changing--; } -void EditorInspector::_property_keyed(const String &p_path) { +void EditorInspector::_property_keyed(const String &p_path, bool p_advance) { if (!object) return; - emit_signal("property_keyed", p_path, object->get(p_path), true); //second param is deprecated + emit_signal("property_keyed", p_path, object->get(p_path), p_advance); //second param is deprecated } -void EditorInspector::_property_keyed_with_value(const String &p_path, const Variant &p_value) { +void EditorInspector::_property_keyed_with_value(const String &p_path, const Variant &p_value, bool p_advance) { if (!object) return; - emit_signal("property_keyed", p_path, p_value, false); //second param is deprecated + emit_signal("property_keyed", p_path, p_value, p_advance); //second param is deprecated } void EditorInspector::_property_checked(const String &p_path, bool p_checked) { @@ -2123,6 +2159,13 @@ void EditorInspector::_notification(int p_what) { } if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { + + if (use_sub_inspector_bg) { + add_style_override("bg", get_stylebox("sub_inspector_bg", "Editor")); + } else if (is_inside_tree()) { + add_style_override("bg", get_stylebox("bg", "Tree")); + } + update_tree(); } } @@ -2182,6 +2225,7 @@ void EditorInspector::_bind_methods() { ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "res"), PropertyInfo(Variant::STRING, "prop"))); ADD_SIGNAL(MethodInfo("object_id_selected", PropertyInfo(Variant::INT, "id"))); ADD_SIGNAL(MethodInfo("property_edited", PropertyInfo(Variant::STRING, "property"))); + ADD_SIGNAL(MethodInfo("property_toggled", PropertyInfo(Variant::STRING, "property"), PropertyInfo(Variant::BOOL, "checked"))); ADD_SIGNAL(MethodInfo("restart_requested")); } diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index dccbdb9a73..44cc56b543 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -37,6 +37,15 @@ class UndoRedo; +class EditorPropertyRevert { +public: + static bool may_node_be_in_instance(Node *p_node); + static bool get_instanced_node_original_property(Node *p_node, const StringName &p_prop, Variant &value); + static bool is_node_property_different(Node *p_node, const Variant &p_current, const Variant &p_orig); + + static bool can_property_revert(Object *p_object, const StringName &p_property); +}; + class EditorProperty : public Container { GDCLASS(EditorProperty, Container) @@ -70,9 +79,7 @@ private: bool use_folding; bool draw_top_bg; - bool _might_be_in_instance(); - bool _is_property_different(const Variant &p_current, const Variant &p_orig, int p_usage); - bool _is_instanced_node_with_original_property_different(); + bool _is_property_different(const Variant &p_current, const Variant &p_orig); bool _get_instanced_node_original_property(const StringName &p_prop, Variant &value); void _focusable_focused(int p_index); @@ -152,6 +159,8 @@ public: void set_draw_top_bg(bool p_draw) { draw_top_bg = p_draw; } + bool can_revert_to_default() const { return can_revert; } + EditorProperty(); }; @@ -293,8 +302,8 @@ class EditorInspector : public ScrollContainer { void _property_changed(const String &p_path, const Variant &p_value, bool changing = false); void _property_changed_update_all(const String &p_path, const Variant &p_value); void _multiple_properties_changed(Vector<String> p_paths, Array p_values); - void _property_keyed(const String &p_path); - void _property_keyed_with_value(const String &p_path, const Variant &p_value); + void _property_keyed(const String &p_path, bool p_advance); + void _property_keyed_with_value(const String &p_path, const Variant &p_value, bool p_advance); void _property_checked(const String &p_path, bool p_checked); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 790e38afca..a3743efb38 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -227,12 +227,6 @@ void EditorNode::_unhandled_input(const Ref<InputEvent> &p_event) { _editor_select_prev(); } - if (k->get_scancode() == KEY_ESCAPE) { - for (int i = 0; i < bottom_panel_items.size(); i++) { - _bottom_panel_switch(false, i); - } - } - if (old_editor != editor_plugin_screen) { get_tree()->set_input_as_handled(); } @@ -390,7 +384,6 @@ void EditorNode::_notification(int p_what) { update_menu->set_icon(gui_base->get_icon("Progress1", "EditorIcons")); PopupMenu *p = help_menu->get_popup(); - p->set_item_icon(p->get_item_index(HELP_CLASSES), gui_base->get_icon("ClassList", "EditorIcons")); p->set_item_icon(p->get_item_index(HELP_SEARCH), gui_base->get_icon("HelpSearch", "EditorIcons")); p->set_item_icon(p->get_item_index(HELP_DOCS), gui_base->get_icon("Instance", "EditorIcons")); p->set_item_icon(p->get_item_index(HELP_QA), gui_base->get_icon("Instance", "EditorIcons")); @@ -416,51 +409,50 @@ void EditorNode::_on_plugin_ready(Object *p_script, const String &p_activate_nam push_item(script.operator->()); } -void EditorNode::_fs_changed() { +void EditorNode::_resources_changed(const PoolVector<String> &p_resources) { - for (Set<FileDialog *>::Element *E = file_dialogs.front(); E; E = E->next()) { + List<Ref<Resource> > changed; - E->get()->invalidate(); - } + int rc = p_resources.size(); + for (int i = 0; i < rc; i++) { - for (Set<EditorFileDialog *>::Element *E = editor_file_dialogs.front(); E; E = E->next()) { + Ref<Resource> res(ResourceCache::get(p_resources.get(i))); + if (res.is_null()) { + continue; + } - E->get()->invalidate(); - } + if (!res->editor_can_reload_from_file()) + continue; + if (!res->get_path().is_resource_file() && !res->get_path().is_abs_path()) + continue; + if (!FileAccess::exists(res->get_path())) + continue; - { - //reload changed resources - List<Ref<Resource> > changed; + if (res->get_import_path() != String()) { + //this is an imported resource, will be reloaded if reimported via the _resources_reimported() callback + continue; + } - List<Ref<Resource> > cached; - ResourceCache::get_cached_resources(&cached); - // FIXME: This should be done in a thread. - for (List<Ref<Resource> >::Element *E = cached.front(); E; E = E->next()) { + changed.push_back(res); + } - if (!E->get()->editor_can_reload_from_file()) - continue; - if (!E->get()->get_path().is_resource_file() && !E->get()->get_path().is_abs_path()) - continue; - if (!FileAccess::exists(E->get()->get_path())) - continue; + if (changed.size()) { + for (List<Ref<Resource> >::Element *E = changed.front(); E; E = E->next()) { + E->get()->reload_from_file(); + } + } +} - if (E->get()->get_import_path() != String()) { - //this is an imported resource, will be reloaded if reimported via the _resources_reimported() callback - continue; - } +void EditorNode::_fs_changed() { - uint64_t mt = FileAccess::get_modified_time(E->get()->get_path()); + for (Set<FileDialog *>::Element *E = file_dialogs.front(); E; E = E->next()) { - if (mt != E->get()->get_last_modified_time()) { - changed.push_back(E->get()); - } - } + E->get()->invalidate(); + } - if (changed.size()) { - for (List<Ref<Resource> >::Element *E = changed.front(); E; E = E->next()) { - E->get()->reload_from_file(); - } - } + for (Set<EditorFileDialog *>::Element *E = editor_file_dialogs.front(); E; E = E->next()) { + + E->get()->invalidate(); } _mark_unsaved_scenes(); @@ -580,13 +572,29 @@ void EditorNode::_editor_select_prev() { _editor_select(editor); } -Error EditorNode::load_resource(const String &p_scene) { +Error EditorNode::load_resource(const String &p_resource, bool p_ignore_broken_deps) { - RES res = ResourceLoader::load(p_scene); + dependency_errors.clear(); + + Error err; + RES res = ResourceLoader::load(p_resource, "", false, &err); ERR_FAIL_COND_V(!res.is_valid(), ERR_CANT_OPEN); - inspector_dock->edit_resource(res); + if (!p_ignore_broken_deps && dependency_errors.has(p_resource)) { + + //current_option = -1; + Vector<String> errors; + for (Set<String>::Element *E = dependency_errors[p_resource].front(); E; E = E->next()) { + + errors.push_back(E->get()); + } + dependency_error->show(DependencyErrorDialog::MODE_RESOURCE, p_resource, errors); + dependency_errors.erase(p_resource); + return ERR_FILE_MISSING_DEPENDENCIES; + } + + inspector_dock->edit_resource(res); return OK; } @@ -627,6 +635,7 @@ void EditorNode::save_resource(const Ref<Resource> &p_resource) { void EditorNode::save_resource_as(const Ref<Resource> &p_resource, const String &p_at_path) { file->set_mode(EditorFileDialog::MODE_SAVE_FILE); + saving_resource = p_resource; current_option = RESOURCE_SAVE_AS; List<String> extensions; @@ -990,6 +999,22 @@ void EditorNode::_save_scene_with_preview(String p_file, int p_idx) { EditorResourcePreview::get_singleton()->check_for_invalidation(p_file); } +bool EditorNode::_validate_scene_recursive(const String &p_filename, Node *p_node) { + + for (int i = 0; i < p_node->get_child_count(); i++) { + Node *child = p_node->get_child(i); + if (child->get_filename() == p_filename) { + return true; + } + + if (_validate_scene_recursive(p_filename, child)) { + return true; + } + } + + return false; +} + void EditorNode::_save_scene(String p_file, int idx) { Node *scene = editor_data.get_edited_scene_root(idx); @@ -1000,6 +1025,11 @@ void EditorNode::_save_scene(String p_file, int idx) { return; } + if (scene->get_filename() != String() && _validate_scene_recursive(scene->get_filename(), scene)) { + show_accept(TTR("This scene can't be saved because there is a cyclic instancing inclusion.\nPlease resolve it and then attempt to save again."), TTR("OK")); + return; + } + editor_data.apply_changes_in_editors(); _save_default_environment(); @@ -1067,6 +1097,9 @@ void EditorNode::_save_scene(String p_file, int idx) { set_current_version(editor_data.get_undo_redo().get_version()); else editor_data.set_edited_scene_version(0, idx); + + editor_folding.save_scene_folding(scene, p_file); + _update_title(); _update_scene_tabs(); } else { @@ -1250,15 +1283,13 @@ void EditorNode::_dialog_action(String p_file) { case RESOURCE_SAVE: case RESOURCE_SAVE_AS: { - uint32_t current = editor_history.get_current(); + ERR_FAIL_COND(saving_resource.is_null()) + save_resource_in_path(saving_resource, p_file); + saving_resource = Ref<Resource>(); + ObjectID current = editor_history.get_current(); Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; - - ERR_FAIL_COND(!Object::cast_to<Resource>(current_obj)) - - RES current_res = RES(Object::cast_to<Resource>(current_obj)); - - save_resource_in_path(current_res, p_file); - + ERR_FAIL_COND(!current_obj); + current_obj->_change_notify(); } break; case SETTINGS_LAYOUT_SAVE: { @@ -1990,7 +2021,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (err != OK) ERR_PRINT("Failed to load scene"); editor_data.move_edited_scene_to_index(cur_idx); - get_undo_redo()->clear_history(); + get_undo_redo()->clear_history(false); scene_tabs->set_current_tab(cur_idx); } break; @@ -2250,14 +2281,11 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { file->popup_centered_ratio(); } break; - case HELP_CLASSES: { - emit_signal("request_help_index", ""); - } break; case HELP_SEARCH: { emit_signal("request_help_search", ""); } break; case HELP_DOCS: { - OS::get_singleton()->shell_open("http://docs.godotengine.org/"); + OS::get_singleton()->shell_open("https://docs.godotengine.org/"); } break; case HELP_QA: { OS::get_singleton()->shell_open("https://godotengine.org/qa/"); @@ -2557,6 +2585,12 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled) return; } + //errors in the script cause the base_type to be "" + if (String(script->get_instance_base_type()) == "") { + show_warning(vformat(TTR("Unable to load addon script from path: '%s' There seems to be an error in the code, please check the syntax."), path)); + return; + } + //could check inheritance.. if (String(script->get_instance_base_type()) != "EditorPlugin") { show_warning(vformat(TTR("Unable to load addon script from path: '%s' Base type is not EditorPlugin."), path)); @@ -2600,7 +2634,7 @@ void EditorNode::_remove_edited_scene() { } _scene_tab_changed(new_index); editor_data.remove_scene(old_index); - editor_data.get_undo_redo().clear_history(); + editor_data.get_undo_redo().clear_history(false); _update_title(); _update_scene_tabs(); } @@ -2848,7 +2882,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b errors.push_back(E->get()); } - dependency_error->show(lpath, errors); + dependency_error->show(DependencyErrorDialog::MODE_SCENE, lpath, errors); opening_prev = false; if (prev != -1) { @@ -2913,6 +2947,13 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b _update_scene_tabs(); _add_to_recent_scenes(lpath); + if (editor_folding.has_folding_data(lpath)) { + editor_folding.load_scene_folding(new_scene, lpath); + } else if (EDITOR_GET("interface/inspector/auto_unfold_foreign_scenes")) { + editor_folding.unfold_scene(new_scene); + editor_folding.save_scene_folding(new_scene, lpath); + } + prev_scene->set_disabled(previous_scenes.size() == 0); opening_prev = false; @@ -3135,34 +3176,33 @@ Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p script = p_object; } - StringName name; - String icon_path; if (script.is_valid()) { - name = EditorNode::get_editor_data().script_class_get_name(script->get_path()); - icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name); - name = script->get_instance_base_type(); + StringName name = EditorNode::get_editor_data().script_class_get_name(script->get_path()); + String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name); + if (icon_path.length()) + return ResourceLoader::load(icon_path); + + // should probably be deprecated in 4.x + StringName base = script->get_instance_base_type(); + if (base != StringName()) { + const Map<String, Vector<EditorData::CustomType> > &p_map = EditorNode::get_editor_data().get_custom_types(); + for (const Map<String, Vector<EditorData::CustomType> >::Element *E = p_map.front(); E; E = E->next()) { + const Vector<EditorData::CustomType> &ct = E->value(); + for (int i = 0; i < ct.size(); ++i) { + if (ct[i].name == base && ct[i].icon.is_valid()) { + return ct[i].icon; + } + } + } + } } - if (gui_base->has_icon(p_object->get_class(), "EditorIcons")) - return gui_base->get_icon(p_object->get_class(), "EditorIcons"); - - if (icon_path.length()) - return ResourceLoader::load(icon_path); - + // should probably be deprecated in 4.x if (p_object->has_meta("_editor_icon")) return p_object->get_meta("_editor_icon"); - if (name != StringName()) { - const Map<String, Vector<EditorData::CustomType> > &p_map = EditorNode::get_editor_data().get_custom_types(); - for (const Map<String, Vector<EditorData::CustomType> >::Element *E = p_map.front(); E; E = E->next()) { - const Vector<EditorData::CustomType> &ct = E->value(); - for (int i = 0; i < ct.size(); ++i) { - if (ct[i].name == name && ct[i].icon.is_valid()) { - return ct[i].icon; - } - } - } - } + if (gui_base->has_icon(p_object->get_class(), "EditorIcons")) + return gui_base->get_icon(p_object->get_class(), "EditorIcons"); if (p_fallback.length()) return gui_base->get_icon(p_fallback, "EditorIcons"); @@ -3209,17 +3249,31 @@ Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_f void EditorNode::progress_add_task(const String &p_task, const String &p_label, int p_steps, bool p_can_cancel) { - singleton->progress_dialog->add_task(p_task, p_label, p_steps, p_can_cancel); + if (singleton->disable_progress_dialog) { + print_line(p_task + ": begin: " + p_label + " steps: " + itos(p_steps)); + } else { + singleton->progress_dialog->add_task(p_task, p_label, p_steps, p_can_cancel); + } } bool EditorNode::progress_task_step(const String &p_task, const String &p_state, int p_step, bool p_force_refresh) { - return singleton->progress_dialog->task_step(p_task, p_state, p_step, p_force_refresh); + if (singleton->disable_progress_dialog) { + print_line("\t" + p_task + ": step " + itos(p_step) + ": " + p_state); + return false; + } else { + + return singleton->progress_dialog->task_step(p_task, p_state, p_step, p_force_refresh); + } } void EditorNode::progress_end_task(const String &p_task) { - singleton->progress_dialog->end_task(p_task); + if (singleton->disable_progress_dialog) { + print_line(p_task + ": end"); + } else { + singleton->progress_dialog->end_task(p_task); + } } void EditorNode::progress_add_task_bg(const String &p_task, const String &p_label, int p_steps) { @@ -3301,7 +3355,7 @@ Error EditorNode::export_preset(const String &p_preset, const String &p_path, bo export_defer.path = p_path; export_defer.debug = p_debug; export_defer.password = p_password; - + disable_progress_dialog = true; return OK; } @@ -3591,6 +3645,7 @@ void EditorNode::_load_docks() { _load_docks_from_config(config, "docks"); _load_open_scenes_from_config(config, "EditorNode"); + editor_data.set_plugin_window_layout(config); } @@ -3785,6 +3840,23 @@ void EditorNode::_load_open_scenes_from_config(Ref<ConfigFile> p_layout, const S restoring_scenes = false; } +bool EditorNode::has_scenes_in_session() { + if (!bool(EDITOR_GET("interface/scene_tabs/restore_scenes_on_load"))) { + return false; + } + Ref<ConfigFile> config; + config.instance(); + Error err = config->load(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("editor_layout.cfg")); + if (err != OK) { + return false; + } + if (!config->has_section("EditorNode") || !config->has_section_key("EditorNode", "open_scenes")) { + return false; + } + Array scenes = config->get_value("EditorNode", "open_scenes"); + return !scenes.empty(); +} + void EditorNode::_update_layouts_menu() { editor_layouts->clear(); @@ -3889,7 +3961,7 @@ void EditorNode::_scene_tab_closed(int p_tab) { } void EditorNode::_scene_tab_hover(int p_tab) { - if (bool(EDITOR_GET("interface/scene_tabs/show_thumbnail_on_hover")) == false) { + if (!bool(EDITOR_GET("interface/scene_tabs/show_thumbnail_on_hover"))) { return; } int current_tab = scene_tabs->get_current_tab(); @@ -3898,7 +3970,9 @@ void EditorNode::_scene_tab_hover(int p_tab) { tab_preview_panel->hide(); } else { String path = editor_data.get_scene_path(p_tab); - EditorResourcePreview::get_singleton()->queue_resource_preview(path, this, "_thumbnail_done", p_tab); + if (path != String()) { + EditorResourcePreview::get_singleton()->queue_resource_preview(path, this, "_thumbnail_done", p_tab); + } } } @@ -3934,7 +4008,7 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) { scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/save_all_scenes"), FILE_SAVE_ALL_SCENES); if (scene_tabs->get_hovered_tab() >= 0) { scene_tabs_context_menu->add_separator(); - scene_tabs_context_menu->add_item(TTR("Show in filesystem"), FILE_SHOW_IN_FILESYSTEM); + scene_tabs_context_menu->add_item(TTR("Show in FileSystem"), FILE_SHOW_IN_FILESYSTEM); scene_tabs_context_menu->add_item(TTR("Play This Scene"), RUN_PLAY_SCENE); scene_tabs_context_menu->add_item(TTR("Close Tab"), FILE_CLOSE); } @@ -4548,6 +4622,19 @@ void EditorNode::_video_driver_selected(int p_which) { _update_video_driver_color(); } +void EditorNode::_resource_saved(RES p_resource, const String &p_path) { + if (EditorFileSystem::get_singleton()) { + EditorFileSystem::get_singleton()->update_file(p_path); + } + + singleton->editor_folding.save_resource_folding(p_resource, p_path); +} + +void EditorNode::_resource_loaded(RES p_resource, const String &p_path) { + + singleton->editor_folding.load_resource_folding(p_resource, p_path); +} + void EditorNode::_bind_methods() { ClassDB::bind_method("_menu_option", &EditorNode::_menu_option); @@ -4622,11 +4709,12 @@ void EditorNode::_bind_methods() { ClassDB::bind_method(D_METHOD("_video_driver_selected"), &EditorNode::_video_driver_selected); + ClassDB::bind_method(D_METHOD("_resources_changed"), &EditorNode::_resources_changed); + ADD_SIGNAL(MethodInfo("play_pressed")); ADD_SIGNAL(MethodInfo("pause_pressed")); ADD_SIGNAL(MethodInfo("stop_pressed")); ADD_SIGNAL(MethodInfo("request_help_search")); - ADD_SIGNAL(MethodInfo("request_help_index")); ADD_SIGNAL(MethodInfo("script_add_function_request", PropertyInfo(Variant::OBJECT, "obj"), PropertyInfo(Variant::STRING, "function"), PropertyInfo(Variant::POOL_STRING_ARRAY, "args"))); ADD_SIGNAL(MethodInfo("resource_saved", PropertyInfo(Variant::OBJECT, "obj"))); } @@ -4675,7 +4763,7 @@ EditorNode::EditorNode() { _initializing_addons = false; docks_visible = true; restoring_scenes = false; - + disable_progress_dialog = false; scene_distraction = false; script_distraction = false; @@ -4848,6 +4936,7 @@ EditorNode::EditorNode() { EDITOR_DEF_RST("interface/scene_tabs/show_thumbnail_on_hover", true); EDITOR_DEF_RST("interface/inspector/capitalize_properties", true); EDITOR_DEF_RST("interface/inspector/disable_folding", false); + EDITOR_DEF_RST("interface/inspector/auto_unfold_foreign_scenes", true); EDITOR_DEF("interface/inspector/horizontal_vector2_editing", false); EDITOR_DEF("interface/inspector/horizontal_vector_types_editing", true); EDITOR_DEF("interface/inspector/open_resources_in_current_inspector", true); @@ -4987,7 +5076,7 @@ EditorNode::EditorNode() { dock_select_rect_over = -1; dock_popup_selected = -1; for (int i = 0; i < DOCK_SLOT_MAX; i++) { - dock_slot[i]->set_custom_minimum_size(Size2(230, 220) * EDSCALE); + dock_slot[i]->set_custom_minimum_size(Size2(170, 0) * EDSCALE); dock_slot[i]->set_v_size_flags(Control::SIZE_EXPAND_FILL); dock_slot[i]->set_popup(dock_select_popup); dock_slot[i]->connect("pre_popup_pressed", this, "_dock_pre_popup", varray(i)); @@ -5164,7 +5253,7 @@ EditorNode::EditorNode() { p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/save_scene", TTR("Save Scene"), KEY_MASK_CMD + KEY_S), FILE_SAVE_SCENE); p->add_shortcut(ED_SHORTCUT("editor/save_scene_as", TTR("Save Scene As..."), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_S), FILE_SAVE_AS_SCENE); - p->add_shortcut(ED_SHORTCUT("editor/save_all_scenes", TTR("Save all Scenes"), KEY_MASK_ALT + KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_S), FILE_SAVE_ALL_SCENES); + p->add_shortcut(ED_SHORTCUT("editor/save_all_scenes", TTR("Save All Scenes"), KEY_MASK_ALT + KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_S), FILE_SAVE_ALL_SCENES); p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/close_scene", TTR("Close Scene"), KEY_MASK_SHIFT + KEY_MASK_CMD + KEY_W), FILE_CLOSE); p->add_separator(); @@ -5255,10 +5344,13 @@ EditorNode::EditorNode() { p->add_check_item(TTR("Visible Navigation"), RUN_DEBUG_NAVIGATION); p->set_item_tooltip(p->get_item_count() - 1, TTR("Navigation meshes and polygons will be visible on the running game if this option is turned on.")); p->add_separator(); + //those are now on by default, since they are harmless p->add_check_item(TTR("Sync Scene Changes"), RUN_LIVE_DEBUG); p->set_item_tooltip(p->get_item_count() - 1, TTR("When this option is turned on, any changes made to the scene in the editor will be replicated in the running game.\nWhen used remotely on a device, this is more efficient with network filesystem.")); + p->set_item_checked(p->get_item_count() - 1, true); p->add_check_item(TTR("Sync Script Changes"), RUN_RELOAD_SCRIPTS); p->set_item_tooltip(p->get_item_count() - 1, TTR("When this option is turned on, any script that is saved will be reloaded on the running game.\nWhen used remotely on a device, this is more efficient with network filesystem.")); + p->set_item_checked(p->get_item_count() - 1, true); p->connect("id_pressed", this, "_menu_option"); menu_hb->add_spacer(); @@ -5308,8 +5400,7 @@ EditorNode::EditorNode() { p = help_menu->get_popup(); p->set_hide_on_window_lose_focus(true); p->connect("id_pressed", this, "_menu_option"); - p->add_icon_item(gui_base->get_icon("ClassList", "EditorIcons"), TTR("Classes"), HELP_CLASSES); - p->add_icon_item(gui_base->get_icon("HelpSearch", "EditorIcons"), TTR("Search"), HELP_SEARCH); + p->add_icon_shortcut(gui_base->get_icon("HelpSearch", "EditorIcons"), ED_SHORTCUT("editor/editor_help", TTR("Search"), KEY_F4), HELP_SEARCH); p->add_separator(); p->add_icon_item(gui_base->get_icon("Instance", "EditorIcons"), TTR("Online Docs"), HELP_DOCS); p->add_icon_item(gui_base->get_icon("Instance", "EditorIcons"), TTR("Q&A"), HELP_QA); @@ -5503,8 +5594,8 @@ EditorNode::EditorNode() { right_r_vsplit->hide(); // Add some offsets to left_r and main hsplits to make LEFT_R and RIGHT_L docks wider than minsize - left_r_hsplit->set_split_offset(40 * EDSCALE); - main_hsplit->set_split_offset(-40 * EDSCALE); + left_r_hsplit->set_split_offset(70 * EDSCALE); + main_hsplit->set_split_offset(-70 * EDSCALE); // Define corresponding default layout @@ -5519,8 +5610,8 @@ EditorNode::EditorNode() { for (int i = 0; i < vsplits.size(); i++) default_layout->set_value(docks_section, "dock_split_" + itos(i + 1), 0); default_layout->set_value(docks_section, "dock_hsplit_1", 0); - default_layout->set_value(docks_section, "dock_hsplit_2", 40 * EDSCALE); - default_layout->set_value(docks_section, "dock_hsplit_3", -40 * EDSCALE); + default_layout->set_value(docks_section, "dock_hsplit_2", 70 * EDSCALE); + default_layout->set_value(docks_section, "dock_hsplit_3", -70 * EDSCALE); default_layout->set_value(docks_section, "dock_hsplit_4", 0); _update_layouts_menu(); @@ -5744,6 +5835,7 @@ EditorNode::EditorNode() { _edit_current(); current = NULL; + saving_resource = Ref<Resource>(); reference_resource_mem = true; save_external_resources_mem = true; @@ -5786,6 +5878,7 @@ EditorNode::EditorNode() { EditorFileSystem::get_singleton()->connect("sources_changed", this, "_sources_changed"); EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "_fs_changed"); EditorFileSystem::get_singleton()->connect("resources_reimported", this, "_resources_reimported"); + EditorFileSystem::get_singleton()->connect("resources_reload", this, "_resources_changed"); _build_icon_type_cache(); @@ -5833,6 +5926,9 @@ EditorNode::EditorNode() { print_handler.userdata = this; add_print_handler(&print_handler); + ResourceSaver::set_save_callback(_resource_saved); + ResourceLoader::set_load_callback(_resource_loaded); + #ifdef OSX_ENABLED ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1); ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2); @@ -5861,6 +5957,7 @@ EditorNode::~EditorNode() { memdelete(editor_plugins_force_input_forwarding); memdelete(file_server); memdelete(progress_hb); + EditorSettings::destroy(); } diff --git a/editor/editor_node.h b/editor/editor_node.h index 0096748ed1..3a4b8d451f 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -38,6 +38,7 @@ #include "editor/editor_about.h" #include "editor/editor_data.h" #include "editor/editor_export.h" +#include "editor/editor_folding.h" #include "editor/editor_inspector.h" #include "editor/editor_log.h" #include "editor/editor_name_dialog.h" @@ -179,7 +180,6 @@ private: SETTINGS_HELP, SCENE_TAB_CLOSE, - HELP_CLASSES, HELP_SEARCH, HELP_DOCS, HELP_QA, @@ -355,6 +355,7 @@ private: EditorExport *editor_export; Object *current; + Ref<Resource> saving_resource; bool _playing_edited; String run_custom_filename; @@ -385,6 +386,7 @@ private: EditorSelection *editor_selection; ProjectExportDialog *project_export; EditorResourcePreview *resource_preview; + EditorFolding editor_folding; EditorFileServer *file_server; @@ -443,6 +445,7 @@ private: void _show_messages(); void _vp_resized(); + bool _validate_scene_recursive(const String &p_filename, Node *p_node); void _save_scene(String p_file, int idx = -1); void _save_all_scenes(); int _next_unsaved_scene(bool p_valid_filename, int p_start = 0); @@ -522,6 +525,8 @@ private: } export_defer; + bool disable_progress_dialog; + static EditorNode *singleton; static Vector<EditorNodeInitCallback> _init_callbacks; @@ -600,6 +605,11 @@ private: PrintHandlerList print_handler; static void _print_handler(void *p_this, const String &p_string, bool p_error); + static void _resource_saved(RES p_resource, const String &p_path); + static void _resource_loaded(RES p_resource, const String &p_path); + + void _resources_changed(const PoolVector<String> &p_resources); + protected: void _notification(int p_what); static void _bind_methods(); @@ -682,7 +692,7 @@ public: void fix_dependencies(const String &p_for_file); void clear_scene() { _cleanup_scene(); } Error load_scene(const String &p_scene, bool p_ignore_broken_deps = false, bool p_set_inherited = false, bool p_clear_errors = true, bool p_force_open_imported = false); - Error load_resource(const String &p_scene); + Error load_resource(const String &p_resource, bool p_ignore_broken_deps = false); bool is_scene_open(const String &p_path); @@ -690,6 +700,7 @@ public: void set_current_scene(int p_idx); static EditorData &get_editor_data() { return singleton->editor_data; } + static EditorFolding &get_editor_folding() { return singleton->editor_folding; } EditorHistory *get_editor_history() { return &editor_history; } static VSplitContainer *get_top_split() { return singleton->top_split; } @@ -778,6 +789,7 @@ public: void edit_current() { _edit_current(); }; void update_keying() const { inspector_dock->update_keying(); }; + bool has_scenes_in_session(); EditorNode(); ~EditorNode(); diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index dd3a8aa307..86b2db877e 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -475,7 +475,6 @@ void EditorPlugin::set_force_draw_over_forwarding_enabled() { } void EditorPlugin::notify_scene_changed(const Node *scn_root) { - if (scn_root == NULL) return; emit_signal("scene_changed", scn_root); } diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp index b57e3826c6..d3978749c0 100644 --- a/editor/editor_profiler.cpp +++ b/editor/editor_profiler.cpp @@ -257,7 +257,7 @@ void EditorProfiler::_update_plot() { //get const Metric &m = frame_metrics[idx]; - if (m.valid == false) + if (!m.valid) continue; //skip because invalid float value = 0; diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index c5c78b2590..de948acc71 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -233,7 +233,7 @@ void EditorPropertyPath::_path_pressed() { dialog->set_mode(EditorFileDialog::MODE_OPEN_DIR); dialog->set_current_dir(full_path); } else { - dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); + dialog->set_mode(save_mode ? EditorFileDialog::MODE_SAVE_FILE : EditorFileDialog::MODE_OPEN_FILE); for (int i = 0; i < extensions.size(); i++) { String e = extensions[i].strip_edges(); if (e != String()) { @@ -260,6 +260,11 @@ void EditorPropertyPath::setup(const Vector<String> &p_extensions, bool p_folder global = p_global; } +void EditorPropertyPath::set_save_mode() { + + save_mode = true; +} + void EditorPropertyPath::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { @@ -296,6 +301,7 @@ EditorPropertyPath::EditorPropertyPath() { path_edit->connect("pressed", this, "_path_pressed"); folder = false; global = false; + save_mode = false; } ///////////////////// CLASS NAME ///////////////////////// @@ -477,33 +483,16 @@ EditorPropertyCheck::EditorPropertyCheck() { void EditorPropertyEnum::_option_selected(int p_which) { - String text = options->get_item_text(p_which); - Vector<String> text_split = text.split(":"); - if (text_split.size() == 1) { - emit_signal("property_changed", get_edited_property(), p_which); - return; - } - String name = text_split[1]; - emit_signal("property_changed", get_edited_property(), name.to_int()); + int val = options->get_item_metadata(p_which); + emit_signal("property_changed", get_edited_property(), val); } void EditorPropertyEnum::update_property() { int which = get_edited_object()->get(get_edited_property()); - if (which == 0) { - options->select(which); - return; - } for (int i = 0; i < options->get_item_count(); i++) { - String text = options->get_item_text(i); - Vector<String> text_split = text.split(":"); - if (text_split.size() == 1) { - options->select(which); - return; - } - String name = text_split[1]; - if (itos(which) == name) { + if (which == (int)options->get_item_metadata(i)) { options->select(i); return; } @@ -511,8 +500,15 @@ void EditorPropertyEnum::update_property() { } void EditorPropertyEnum::setup(const Vector<String> &p_options) { + + int current_val = 0; for (int i = 0; i < p_options.size(); i++) { - options->add_item(p_options[i], i); + Vector<String> text_split = p_options[i].split(":"); + if (text_split.size() != 1) + current_val = text_split[1].to_int(); + options->add_item(text_split[0]); + options->set_item_metadata(i, current_val); + current_val += 1; } } @@ -1779,7 +1775,7 @@ void EditorPropertyColor::_color_changed(const Color &p_color) { void EditorPropertyColor::_popup_closed() { - emit_signal("property_changed", get_edited_property(), picker->get_pick_color(), true); + emit_signal("property_changed", get_edited_property(), picker->get_pick_color(), false); } void EditorPropertyColor::_bind_methods() { @@ -1812,9 +1808,26 @@ void EditorPropertyNodePath::_node_selected(const NodePath &p_path) { NodePath path = p_path; Node *base_node = Object::cast_to<Node>(get_edited_object()); - if (base_node == NULL && get_edited_object()->has_method("get_root_path")) { + if (!base_node) { + //try a base node within history + if (EditorNode::get_singleton()->get_editor_history()->get_path_size() > 0) { + Object *base = ObjectDB::get_instance(EditorNode::get_singleton()->get_editor_history()->get_path_object(0)); + if (base) { + base_node = Object::cast_to<Node>(base); + } + } + } + + if (!base_node && get_edited_object()->has_method("get_root_path")) { base_node = get_edited_object()->call("get_root_path"); } + + if (!base_node && Object::cast_to<Reference>(get_edited_object())) { + Node *to_node = get_node(p_path); + ERR_FAIL_COND(!to_node); + path = get_tree()->get_edited_scene_root()->get_path_to(to_node); + } + if (base_node) { // for AnimationTrackKeyEdit path = base_node->get_path().rel_path_to(p_path); } @@ -1870,6 +1883,12 @@ void EditorPropertyNodePath::update_property() { Node *target_node = base_node->get_node(p); ERR_FAIL_COND(!target_node); + if (String(target_node->get_name()).find("@") != -1) { + assign->set_icon(Ref<Texture>()); + assign->set_text(p); + return; + } + assign->set_text(target_node->get_name()); assign->set_icon(EditorNode::get_singleton()->get_object_icon(target_node, "Node")); } @@ -2015,6 +2034,13 @@ void EditorPropertyResource::_menu_option(int p_which) { } break; + case OBJ_MENU_SAVE: { + RES res = get_edited_object()->get(get_edited_property()); + if (res.is_null()) + return; + EditorNode::get_singleton()->save_resource(res); + } break; + case OBJ_MENU_COPY: { RES res = get_edited_object()->get(get_edited_property()); @@ -2068,8 +2094,22 @@ void EditorPropertyResource::_menu_option(int p_which) { if (intype == "ViewportTexture") { + Resource *r = Object::cast_to<Resource>(get_edited_object()); + if (r && r->get_path().is_resource_file()) { + EditorNode::get_singleton()->show_warning(TTR("Can't create a ViewportTexture on resources saved as a file.\nResource needs to belong to a scene.")); + return; + } + + if (r && !r->is_local_to_scene()) { + EditorNode::get_singleton()->show_warning(TTR("Can't create a ViewportTexture on this resource because it's not set as local to scene.\nPlease switch on the 'local to scene' property on it (and all resources containing it up to a node).")); + return; + } + if (!scene_tree) { scene_tree = memnew(SceneTreeDialog); + Vector<StringName> valid_types; + valid_types.push_back("Viewport"); + scene_tree->get_scene_tree()->set_valid_types(valid_types); scene_tree->get_scene_tree()->set_show_enabled_subscene(true); add_child(scene_tree); scene_tree->connect("selected", this, "_viewport_selected"); @@ -2102,12 +2142,18 @@ void EditorPropertyResource::_menu_option(int p_which) { } } -void EditorPropertyResource::_resource_preview(const String &p_path, const Ref<Texture> &p_preview, ObjectID p_obj) { +void EditorPropertyResource::_resource_preview(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, ObjectID p_obj) { RES p = get_edited_object()->get(get_edited_property()); if (p.is_valid() && p->get_instance_id() == p_obj) { + String type = p->get_class_name(); + + if (ClassDB::is_parent_class(type, "Script")) { + assign->set_text(p->get_path().get_file()); + return; + } + if (p_preview.is_valid()) { - String type = p->get_class_name(); preview->set_margin(MARGIN_LEFT, assign->get_icon()->get_width() + assign->get_stylebox("normal")->get_default_margin(MARGIN_LEFT) + get_constant("hseparation", "Button")); if (type == "GradientTexture") { preview->set_stretch_mode(TextureRect::STRETCH_SCALE); @@ -2124,7 +2170,8 @@ void EditorPropertyResource::_resource_preview(const String &p_path, const Ref<T } } -void EditorPropertyResource::_update_menu() { +void EditorPropertyResource::_update_menu_items() { + //////////////////// UPDATE MENU ////////////////////////// RES res = get_edited_object()->get(get_edited_property()); @@ -2211,10 +2258,11 @@ void EditorPropertyResource::_update_menu() { menu->add_icon_item(get_icon("Edit", "EditorIcons"), TTR("Edit"), OBJ_MENU_EDIT); menu->add_icon_item(get_icon("Clear", "EditorIcons"), TTR("Clear"), OBJ_MENU_CLEAR); menu->add_icon_item(get_icon("Duplicate", "EditorIcons"), TTR("Make Unique"), OBJ_MENU_MAKE_UNIQUE); + menu->add_icon_item(get_icon("Save", "EditorIcons"), TTR("Save"), OBJ_MENU_SAVE); RES r = res; if (r.is_valid() && r->get_path().is_resource_file()) { menu->add_separator(); - menu->add_item(TTR("Show in File System"), OBJ_MENU_SHOW_IN_FILE_SYSTEM); + menu->add_item(TTR("Show in FileSystem"), OBJ_MENU_SHOW_IN_FILE_SYSTEM); } } else { } @@ -2266,6 +2314,11 @@ void EditorPropertyResource::_update_menu() { menu->add_icon_item(icon, vformat(TTR("Convert To %s"), what), CONVERT_BASE_ID + i); } } +} + +void EditorPropertyResource::_update_menu() { + + _update_menu_items(); Rect2 gt = edit->get_global_rect(); menu->set_as_minsize(); @@ -2290,6 +2343,20 @@ void EditorPropertyResource::_sub_inspector_object_id_selected(int p_id) { emit_signal("object_id_selected", get_edited_property(), p_id); } +void EditorPropertyResource::_button_input(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> mb = p_event; + if (mb.is_valid()) { + if (mb->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) { + _update_menu_items(); + Vector2 pos = mb->get_global_position(); + //pos = assign->get_global_transform().xform(pos); + menu->set_as_minsize(); + menu->set_global_position(pos); + menu->popup(); + } + } +} + void EditorPropertyResource::_open_editor_pressed() { RES res = get_edited_object()->get(get_edited_property()); if (res.is_valid()) { @@ -2374,7 +2441,7 @@ void EditorPropertyResource::update_property() { if (res->get_name() != String()) { assign->set_text(res->get_name()); } else if (res->get_path().is_resource_file()) { - assign->set_text(res->get_name()); + assign->set_text(res->get_path().get_file()); assign->set_tooltip(res->get_path()); } else { assign->set_text(res->get_class()); @@ -2577,6 +2644,7 @@ void EditorPropertyResource::_bind_methods() { ClassDB::bind_method(D_METHOD("drop_data_fw"), &EditorPropertyResource::drop_data_fw); ClassDB::bind_method(D_METHOD("_button_draw"), &EditorPropertyResource::_button_draw); ClassDB::bind_method(D_METHOD("_open_editor_pressed"), &EditorPropertyResource::_open_editor_pressed); + ClassDB::bind_method(D_METHOD("_button_input"), &EditorPropertyResource::_button_input); } EditorPropertyResource::EditorPropertyResource() { @@ -2603,6 +2671,7 @@ EditorPropertyResource::EditorPropertyResource() { preview->set_margin(MARGIN_BOTTOM, -1); preview->set_margin(MARGIN_RIGHT, -1); assign->add_child(preview); + assign->connect("gui_input", this, "_button_input"); menu = memnew(PopupMenu); add_child(menu); @@ -2611,6 +2680,7 @@ EditorPropertyResource::EditorPropertyResource() { menu->connect("id_pressed", this, "_menu_option"); edit->connect("pressed", this, "_update_menu"); hbc->add_child(edit); + edit->connect("gui_input", this, "_button_input"); file = NULL; scene_tree = NULL; @@ -3032,7 +3102,7 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ } break; case Variant::ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::ARRAY); + editor->setup(Variant::ARRAY, p_hint_text); add_property_editor(p_path, editor); } break; case Variant::POOL_BYTE_ARRAY: { diff --git a/editor/editor_properties.h b/editor/editor_properties.h index 18e70345aa..05716408f3 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -106,6 +106,7 @@ class EditorPropertyPath : public EditorProperty { Vector<String> extensions; bool folder; bool global; + bool save_mode; EditorFileDialog *dialog; LineEdit *path; Button *path_edit; @@ -120,6 +121,7 @@ protected: public: void setup(const Vector<String> &p_extensions, bool p_folder, bool p_global); + void set_save_mode(); virtual void update_property(); EditorPropertyPath(); }; @@ -522,10 +524,11 @@ class EditorPropertyResource : public EditorProperty { OBJ_MENU_EDIT = 1, OBJ_MENU_CLEAR = 2, OBJ_MENU_MAKE_UNIQUE = 3, - OBJ_MENU_COPY = 4, - OBJ_MENU_PASTE = 5, - OBJ_MENU_NEW_SCRIPT = 6, - OBJ_MENU_SHOW_IN_FILE_SYSTEM = 7, + OBJ_MENU_SAVE = 4, + OBJ_MENU_COPY = 5, + OBJ_MENU_PASTE = 6, + OBJ_MENU_NEW_SCRIPT = 7, + OBJ_MENU_SHOW_IN_FILE_SYSTEM = 8, TYPE_BASE_ID = 100, CONVERT_BASE_ID = 1000 @@ -548,10 +551,12 @@ class EditorPropertyResource : public EditorProperty { void _file_selected(const String &p_path); void _menu_option(int p_which); - void _resource_preview(const String &p_path, const Ref<Texture> &p_preview, ObjectID p_obj); + void _resource_preview(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, ObjectID p_obj); void _resource_selected(); void _viewport_selected(const NodePath &p_path); + void _update_menu_items(); + void _update_menu(); void _sub_inspector_property_keyed(const String &p_property, const Variant &p_value, bool); @@ -564,6 +569,7 @@ class EditorPropertyResource : public EditorProperty { bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); + void _button_input(const Ref<InputEvent> &p_event); void _open_editor_pressed(); protected: diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 24360813a2..090c7b2d3d 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -29,9 +29,9 @@ /*************************************************************************/ #include "editor_properties_array_dict.h" +#include "core/io/marshalls.h" #include "editor/editor_scale.h" #include "editor_properties.h" - bool EditorPropertyArrayObject::_set(const StringName &p_name, const Variant &p_value) { String pn = p_name; @@ -54,6 +54,10 @@ bool EditorPropertyArrayObject::_get(const StringName &p_name, Variant &r_ret) c int idx = pn.get_slicec('/', 1).to_int(); bool valid; r_ret = array.get(idx, &valid); + if (r_ret.get_type() == Variant::OBJECT && Object::cast_to<EncodedObjectAsID>(r_ret)) { + r_ret = Object::cast_to<EncodedObjectAsID>(r_ret)->get_object_id(); + } + return valid; } @@ -120,6 +124,10 @@ bool EditorPropertyDictionaryObject::_get(const StringName &p_name, Variant &r_r int idx = pn.get_slicec('/', 1).to_int(); Variant key = dict.get_key_at_index(idx); r_ret = dict[key]; + if (r_ret.get_type() == Variant::OBJECT && Object::cast_to<EncodedObjectAsID>(r_ret)) { + r_ret = Object::cast_to<EncodedObjectAsID>(r_ret)->get_object_id(); + } + return true; } @@ -198,6 +206,10 @@ void EditorPropertyArray::_change_type_menu(int p_index) { update_property(); } +void EditorPropertyArray::_object_id_selected(const String &p_property, ObjectID p_id) { + emit_signal("object_id_selected", p_property, p_id); +} + void EditorPropertyArray::update_property() { Variant array = get_edited_object()->get(get_edited_property()); @@ -211,31 +223,31 @@ void EditorPropertyArray::update_property() { // arrays case Variant::POOL_BYTE_ARRAY: { - arrtype = "ByteArray"; + arrtype = "PoolByteArray"; } break; case Variant::POOL_INT_ARRAY: { - arrtype = "IntArray"; + arrtype = "PoolIntArray"; } break; case Variant::POOL_REAL_ARRAY: { - arrtype = "FltArray"; + arrtype = "PoolFloatArray"; } break; case Variant::POOL_STRING_ARRAY: { - arrtype = "StrArray"; + arrtype = "PoolStringArray"; } break; case Variant::POOL_VECTOR2_ARRAY: { - arrtype = "Vec2Array"; + arrtype = "PoolVector2Array"; } break; case Variant::POOL_VECTOR3_ARRAY: { - arrtype = "Vec3Array"; + arrtype = "PoolVector3Array"; } break; case Variant::POOL_COLOR_ARRAY: { - arrtype = "ColArray"; + arrtype = "PoolColorArray"; } break; default: {} } @@ -249,7 +261,7 @@ void EditorPropertyArray::update_property() { return; } - edit->set_text(arrtype + "(size " + itos(array.call("size")) + ")"); + edit->set_text(arrtype + " (size " + itos(array.call("size")) + ")"); #ifdef TOOLS_ENABLED @@ -322,181 +334,25 @@ void EditorPropertyArray::update_property() { EditorProperty *prop = NULL; Variant value = array.get(i + offset); + Variant::Type value_type = value.get_type(); - switch (value.get_type()) { - case Variant::NIL: { - prop = memnew(EditorPropertyNil); - - } break; - - // atomic types - case Variant::BOOL: { - - prop = memnew(EditorPropertyCheck); - - } break; - case Variant::INT: { - EditorPropertyInteger *editor = memnew(EditorPropertyInteger); - editor->setup(-100000, 100000, 1, true, true); - prop = editor; - - } break; - case Variant::REAL: { - - EditorPropertyFloat *editor = memnew(EditorPropertyFloat); - editor->setup(-100000, 100000, 0.001, true, false, true, true); - prop = editor; - } break; - case Variant::STRING: { - - prop = memnew(EditorPropertyText); - - } break; - - // math types - - case Variant::VECTOR2: { - - EditorPropertyVector2 *editor = memnew(EditorPropertyVector2); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::RECT2: { - - EditorPropertyRect2 *editor = memnew(EditorPropertyRect2); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::VECTOR3: { - - EditorPropertyVector3 *editor = memnew(EditorPropertyVector3); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::TRANSFORM2D: { - - EditorPropertyTransform2D *editor = memnew(EditorPropertyTransform2D); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::PLANE: { - - EditorPropertyPlane *editor = memnew(EditorPropertyPlane); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::QUAT: { - - EditorPropertyQuat *editor = memnew(EditorPropertyQuat); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::AABB: { - - EditorPropertyAABB *editor = memnew(EditorPropertyAABB); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::BASIS: { - EditorPropertyBasis *editor = memnew(EditorPropertyBasis); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - case Variant::TRANSFORM: { - EditorPropertyTransform *editor = memnew(EditorPropertyTransform); - editor->setup(-100000, 100000, 0.001, true); - prop = editor; - - } break; - - // misc types - case Variant::COLOR: { - prop = memnew(EditorPropertyColor); - - } break; - case Variant::NODE_PATH: { - prop = memnew(EditorPropertyNodePath); - - } break; - case Variant::_RID: { - prop = memnew(EditorPropertyNil); - - } break; - case Variant::OBJECT: { - EditorPropertyResource *editor = memnew(EditorPropertyResource); - editor->setup("Resource"); - prop = editor; - - } break; - case Variant::DICTIONARY: { - prop = memnew(EditorPropertyDictionary); - - } break; - - // arrays - case Variant::ARRAY: { - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::ARRAY); - prop = editor; - - } break; - case Variant::POOL_BYTE_ARRAY: { - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_BYTE_ARRAY); - prop = editor; - - } break; - case Variant::POOL_INT_ARRAY: { - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_INT_ARRAY); - prop = editor; - - } break; - case Variant::POOL_REAL_ARRAY: { - - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_REAL_ARRAY); - prop = editor; - } break; - case Variant::POOL_STRING_ARRAY: { - - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_STRING_ARRAY); - prop = editor; - } break; - case Variant::POOL_VECTOR2_ARRAY: { - - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_VECTOR2_ARRAY); - prop = editor; - } break; - case Variant::POOL_VECTOR3_ARRAY: { - - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_VECTOR3_ARRAY); - prop = editor; - } break; - case Variant::POOL_COLOR_ARRAY: { + if (value_type == Variant::NIL && subtype != Variant::NIL) { + value_type = subtype; + } - EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_COLOR_ARRAY); - prop = editor; - } break; - default: {} + if (value_type == Variant::OBJECT && Object::cast_to<EncodedObjectAsID>(value)) { + EditorPropertyObjectID *editor = memnew(EditorPropertyObjectID); + editor->setup("Object"); + prop = editor; + } else { + prop = EditorInspector::instantiate_property_editor(NULL, value_type, "", subtype_hint, subtype_hint_string, 0); } prop->set_object_and_property(object.ptr(), prop_name); prop->set_label(itos(i + offset)); prop->set_selectable(false); prop->connect("property_changed", this, "_property_changed"); + prop->connect("object_id_selected", this, "_object_id_selected"); if (array.get_type() == Variant::ARRAY) { HBoxContainer *hb = memnew(HBoxContainer); vbox->add_child(hb); @@ -560,15 +416,39 @@ void EditorPropertyArray::_length_changed(double p_page) { emit_signal("property_changed", get_edited_property(), array); if (array.get_type() == Variant::ARRAY) { + if (subtype != Variant::NIL) { + int size = array.call("size"); + for (int i = 0; i < size; i++) { + if (array.get(i).get_type() == Variant::NIL) { + Variant::CallError ce; + array.set(i, Variant::construct(subtype, NULL, 0, ce)); + } + } + } array = array.call("duplicate"); //dupe, so undo/redo works better } object->set_array(array); update_property(); } -void EditorPropertyArray::setup(Variant::Type p_array_type) { +void EditorPropertyArray::setup(Variant::Type p_array_type, const String &p_hint_string) { array_type = p_array_type; + + if (array_type == Variant::ARRAY && !p_hint_string.empty()) { + int hint_subtype_seperator = p_hint_string.find(":"); + if (hint_subtype_seperator >= 0) { + String subtype_string = p_hint_string.substr(0, hint_subtype_seperator); + int slash_pos = subtype_string.find("/"); + if (slash_pos >= 0) { + subtype_hint = PropertyHint(subtype_string.substr(slash_pos + 1, subtype_string.size() - slash_pos - 1).to_int()); + subtype_string = subtype_string.substr(0, slash_pos); + } + + subtype_hint_string = p_hint_string.substr(hint_subtype_seperator + 1, p_hint_string.size() - hint_subtype_seperator - 1); + subtype = Variant::Type(subtype_string.to_int()); + } + } } void EditorPropertyArray::_bind_methods() { @@ -578,6 +458,7 @@ void EditorPropertyArray::_bind_methods() { ClassDB::bind_method("_property_changed", &EditorPropertyArray::_property_changed, DEFVAL(false)); ClassDB::bind_method("_change_type", &EditorPropertyArray::_change_type); ClassDB::bind_method("_change_type_menu", &EditorPropertyArray::_change_type_menu); + ClassDB::bind_method("_object_id_selected", &EditorPropertyArray::_object_id_selected); } EditorPropertyArray::EditorPropertyArray() { @@ -606,6 +487,10 @@ EditorPropertyArray::EditorPropertyArray() { change_type->add_item(type, i); } changing_type_idx = -1; + + subtype = Variant::NIL; + subtype_hint = PROPERTY_HINT_NONE; + subtype_hint_string = ""; } ///////////////////// DICTIONARY /////////////////////////// @@ -893,9 +778,19 @@ void EditorPropertyDictionary::update_property() { } break; case Variant::OBJECT: { - EditorPropertyResource *editor = memnew(EditorPropertyResource); - editor->setup("Resource"); - prop = editor; + + if (Object::cast_to<EncodedObjectAsID>(value)) { + + EditorPropertyObjectID *editor = memnew(EditorPropertyObjectID); + editor->setup("Object"); + prop = editor; + + } else { + + EditorPropertyResource *editor = memnew(EditorPropertyResource); + editor->setup("Resource"); + prop = editor; + } } break; case Variant::DICTIONARY: { @@ -986,6 +881,7 @@ void EditorPropertyDictionary::update_property() { prop->set_selectable(false); prop->connect("property_changed", this, "_property_changed"); + prop->connect("object_id_selected", this, "_object_id_selected"); HBoxContainer *hb = memnew(HBoxContainer); if (add_vbox) { @@ -1022,6 +918,10 @@ void EditorPropertyDictionary::update_property() { #endif } +void EditorPropertyDictionary::_object_id_selected(const String &p_property, ObjectID p_id) { + emit_signal("object_id_selected", p_property, p_id); +} + void EditorPropertyDictionary::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { @@ -1055,6 +955,7 @@ void EditorPropertyDictionary::_bind_methods() { ClassDB::bind_method("_change_type", &EditorPropertyDictionary::_change_type); ClassDB::bind_method("_change_type_menu", &EditorPropertyDictionary::_change_type_menu); ClassDB::bind_method("_add_key_value", &EditorPropertyDictionary::_add_key_value); + ClassDB::bind_method("_object_id_selected", &EditorPropertyDictionary::_object_id_selected); } EditorPropertyDictionary::EditorPropertyDictionary() { diff --git a/editor/editor_properties_array_dict.h b/editor/editor_properties_array_dict.h index d2bd849f30..46c9bebf2a 100644 --- a/editor/editor_properties_array_dict.h +++ b/editor/editor_properties_array_dict.h @@ -93,6 +93,9 @@ class EditorPropertyArray : public EditorProperty { EditorSpinSlider *page; HBoxContainer *page_hb; Variant::Type array_type; + Variant::Type subtype; + PropertyHint subtype_hint; + String subtype_hint_string; void _page_changed(double p_page); void _length_changed(double p_page); @@ -101,12 +104,14 @@ class EditorPropertyArray : public EditorProperty { void _change_type(Object *p_button, int p_index); void _change_type_menu(int p_index); + void _object_id_selected(const String &p_property, ObjectID p_id); + protected: static void _bind_methods(); void _notification(int p_what); public: - void setup(Variant::Type p_array_type); + void setup(Variant::Type p_array_type, const String &p_hint_string = ""); virtual void update_property(); EditorPropertyArray(); }; @@ -134,6 +139,7 @@ class EditorPropertyDictionary : public EditorProperty { void _change_type_menu(int p_index); void _add_key_value(); + void _object_id_selected(const String &p_property, ObjectID p_id); protected: static void _bind_methods(); diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 310c3b3a52..71e9aced7e 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -326,7 +326,7 @@ void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource> &p if (cache.has(path_id) && cache[path_id].last_hash == p_res->hash_edited_version()) { cache[path_id].order = order++; - p_receiver->call_deferred(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); + p_receiver->call(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); preview_mutex->unlock(); return; } @@ -351,7 +351,7 @@ void EditorResourcePreview::queue_resource_preview(const String &p_path, Object preview_mutex->lock(); if (cache.has(p_path)) { cache[p_path].order = order++; - p_receiver->call_deferred(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); + p_receiver->call(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); preview_mutex->unlock(); return; } diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 2dec21fffb..fdfa094ba2 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -300,6 +300,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["interface/editor/main_font_size"] = PropertyInfo(Variant::INT, "interface/editor/main_font_size", PROPERTY_HINT_RANGE, "10,40,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/editor/code_font_size", 14); hints["interface/editor/code_font_size"] = PropertyInfo(Variant::INT, "interface/editor/code_font_size", PROPERTY_HINT_RANGE, "8,96,1", PROPERTY_USAGE_DEFAULT); + _initial_set("interface/editor/main_font_antialiased", true); + _initial_set("interface/editor/code_font_antialiased", true); _initial_set("interface/editor/main_font_hinting", 2); hints["interface/editor/main_font_hinting"] = PropertyInfo(Variant::INT, "interface/editor/main_font_hinting", PROPERTY_HINT_ENUM, "None,Light,Normal", PROPERTY_USAGE_DEFAULT); _initial_set("interface/editor/code_font_hinting", 2); @@ -357,7 +359,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/theme/color_theme", "Adaptive"); hints["text_editor/theme/color_theme"] = PropertyInfo(Variant::STRING, "text_editor/theme/color_theme", PROPERTY_HINT_ENUM, "Adaptive,Default,Custom"); - _initial_set("text_editor/theme/line_spacing", 4); + _initial_set("text_editor/theme/line_spacing", 6); _initial_set("text_editor/theme/selection_color", Color::html("40808080")); _load_default_text_editor_theme(); @@ -410,7 +412,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/completion/add_type_hints", false); _initial_set("docks/scene_tree/start_create_dialog_fully_expanded", false); - _initial_set("docks/scene_tree/draw_relationship_lines", false); + _initial_set("docks/scene_tree/draw_relationship_lines", true); _initial_set("docks/scene_tree/relationship_line_color", Color::html("464646")); _initial_set("editors/grid_map/pick_distance", 5000.0); @@ -433,7 +435,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // navigation _initial_set("editors/3d/navigation/navigation_scheme", 0); - _initial_set("editors/3d/navigation/invert_y-axis", false); + _initial_set("editors/3d/navigation/invert_y_axis", false); hints["editors/3d/navigation/navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/navigation/navigation_scheme", PROPERTY_HINT_ENUM, "Godot,Maya,Modo"); _initial_set("editors/3d/navigation/zoom_style", 0); hints["editors/3d/navigation/zoom_style"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_style", PROPERTY_HINT_ENUM, "Vertical, Horizontal"); @@ -531,7 +533,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("docks/property_editor/texture_preview_width", 48); _initial_set("docks/property_editor/auto_refresh_interval", 0.3); - _initial_set("text_editor/help/doc_path", ""); _initial_set("text_editor/help/show_help_index", true); _initial_set("filesystem/import/ask_save_before_reimport", false); diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index b6e4375ce9..1b7322fd13 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -63,6 +63,7 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { grabbing_spinner_attempt = true; grabbing_spinner_dist_cache = 0; + pre_grab_value = get_value(); grabbing_spinner = false; grabbing_spinner_mouse_pos = Input::get_singleton()->get_mouse_position(); } @@ -107,10 +108,10 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { if (ABS(grabbing_spinner_dist_cache) > 6) { set_value(get_value() + SGN(grabbing_spinner_dist_cache)); grabbing_spinner_dist_cache = 0; + pre_grab_value = get_value(); } } else { - set_value(get_value() + get_step() * grabbing_spinner_dist_cache * 10); - grabbing_spinner_dist_cache = 0; + set_value(pre_grab_value + get_step() * grabbing_spinner_dist_cache * 10); } } } else if (updown_offset != -1) { @@ -154,7 +155,7 @@ void EditorSpinSlider::_grabber_gui_input(const Ref<InputEvent> &p_event) { void EditorSpinSlider::_notification(int p_what) { - if (p_what == MainLoop::NOTIFICATION_WM_FOCUS_OUT || p_what == MainLoop::NOTIFICATION_WM_FOCUS_OUT) { + if (p_what == MainLoop::NOTIFICATION_WM_FOCUS_OUT || p_what == MainLoop::NOTIFICATION_WM_FOCUS_IN) { if (grabbing_spinner) { Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); grabbing_spinner = false; @@ -434,6 +435,7 @@ EditorSpinSlider::EditorSpinSlider() { grabbing_spinner_attempt = false; grabbing_spinner = false; grabbing_spinner_dist_cache = 0; + pre_grab_value = 0; set_focus_mode(FOCUS_ALL); updown_offset = -1; hover_updown = false; diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index e48eb171b8..9d43bd2884 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -59,6 +59,7 @@ class EditorSpinSlider : public Range { bool read_only; float grabbing_spinner_dist_cache; Vector2 grabbing_spinner_mouse_pos; + double pre_grab_value; LineEdit *value_input; bool value_input_just_closed; diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 9e81051dc2..36053d7534 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -251,7 +251,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Color preset_accent_color; Color preset_base_color; - float preset_contrast; + float preset_contrast = 0; // Please, use alphabet order if you've added new theme here(After "Default" and "Custom") @@ -376,7 +376,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { //Register icons + font // the resolution and the icon color (dark_theme bool) has not changed, so we do not regenerate the icons - if (p_theme != NULL && fabs(p_theme->get_constant("scale", "Editor") - EDSCALE) < 0.00001 && p_theme->get_constant("dark_theme", "Editor") == dark_theme) { + if (p_theme != NULL && fabs(p_theme->get_constant("scale", "Editor") - EDSCALE) < 0.00001 && (bool)p_theme->get_constant("dark_theme", "Editor") == dark_theme) { // register already generated icons for (int i = 0; i < editor_icons_count; i++) { theme->set_icon(editor_icons_names[i], "EditorIcons", p_theme->get_icon(editor_icons_names[i], "EditorIcons")); @@ -635,7 +635,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("visibility_hidden", "PopupMenu", theme->get_icon("GuiVisibilityHidden", "EditorIcons")); theme->set_icon("visibility_visible", "PopupMenu", theme->get_icon("GuiVisibilityVisible", "EditorIcons")); theme->set_icon("visibility_xray", "PopupMenu", theme->get_icon("GuiVisibilityXray", "EditorIcons")); - theme->set_constant("vseparation", "PopupMenu", (extra_spacing + default_margin_size) * EDSCALE); + theme->set_constant("vseparation", "PopupMenu", (extra_spacing + default_margin_size + 1) * EDSCALE); Ref<StyleBoxFlat> sub_inspector_bg = make_flat_stylebox(dark_color_1, 2, 0, 0, 0); sub_inspector_bg->set_border_width(MARGIN_LEFT, 2); @@ -734,10 +734,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("font_color", "ItemList", font_color); theme->set_color("font_color_selected", "ItemList", mono_color); theme->set_color("guide_color", "ItemList", guide_color); - theme->set_constant("vseparation", "ItemList", 2 * EDSCALE); - theme->set_constant("hseparation", "ItemList", 2 * EDSCALE); + theme->set_constant("vseparation", "ItemList", 3 * EDSCALE); + theme->set_constant("hseparation", "ItemList", 3 * EDSCALE); theme->set_constant("icon_margin", "ItemList", default_margin_size * EDSCALE); - theme->set_constant("line_separation", "ItemList", 2 * EDSCALE); + theme->set_constant("line_separation", "ItemList", 3 * EDSCALE); // Tabs & TabContainer theme->set_stylebox("tab_fg", "TabContainer", style_tab_selected); @@ -1016,6 +1016,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_constant("port_offset", "GraphNode", 14 * EDSCALE); theme->set_constant("title_h_offset", "GraphNode", -16 * EDSCALE); + theme->set_constant("title_offset", "GraphNode", 20 * EDSCALE); theme->set_constant("close_h_offset", "GraphNode", 20 * EDSCALE); theme->set_constant("close_offset", "GraphNode", 20 * EDSCALE); theme->set_constant("separation", "GraphNode", 1 * EDSCALE); diff --git a/editor/fileserver/editor_file_server.cpp b/editor/fileserver/editor_file_server.cpp index 27fe716855..306f047860 100644 --- a/editor/fileserver/editor_file_server.cpp +++ b/editor/fileserver/editor_file_server.cpp @@ -150,13 +150,13 @@ void EditorFileServer::_subthread_start(void *s) { s.parse_utf8(fileutf8.ptr()); if (cmd == FileAccessNetwork::COMMAND_FILE_EXISTS) { - DEBUG_PRINT("FILE EXISTS: " + s); + print_verbose("FILE EXISTS: " + s); } if (cmd == FileAccessNetwork::COMMAND_GET_MODTIME) { - DEBUG_PRINT("MOD TIME: " + s); + print_verbose("MOD TIME: " + s); } if (cmd == FileAccessNetwork::COMMAND_OPEN_FILE) { - DEBUG_PRINT("OPEN: " + s); + print_verbose("OPEN: " + s); } if (!s.begins_with("res://")) { @@ -243,7 +243,7 @@ void EditorFileServer::_subthread_start(void *s) { int read = cd->files[id]->get_buffer(buf.ptrw(), blocklen); ERR_CONTINUE(read < 0); - DEBUG_PRINT("GET BLOCK - offset: " + itos(offset) + ", blocklen: " + itos(blocklen)); + print_verbose("GET BLOCK - offset: " + itos(offset) + ", blocklen: " + itos(blocklen)); //not found, continue encode_uint32(id, buf4); @@ -259,7 +259,7 @@ void EditorFileServer::_subthread_start(void *s) { } break; case FileAccessNetwork::COMMAND_CLOSE: { - DEBUG_PRINT("CLOSED"); + print_verbose("CLOSED"); ERR_CONTINUE(!cd->files.has(id)); memdelete(cd->files[id]); cd->files.erase(id); diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 2c69909f23..b2368fff6b 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -225,16 +225,11 @@ void FileSystemDock::_update_tree(const Vector<String> p_uncollapsed_paths, bool updating_tree = false; } -void FileSystemDock::_update_display_mode() { +void FileSystemDock::_update_display_mode(bool p_force) { // Compute the new display mode - DisplayMode new_display_mode; - if (display_mode_setting == DISPLAY_MODE_SETTING_TREE_ONLY) { - new_display_mode = file_list_view ? DISPLAY_MODE_FILE_LIST_ONLY : DISPLAY_MODE_TREE_ONLY; - } else { - new_display_mode = DISPLAY_MODE_SPLIT; - } + DisplayMode new_display_mode = (display_mode_setting == DISPLAY_MODE_SETTING_TREE_ONLY) ? DISPLAY_MODE_TREE_ONLY : DISPLAY_MODE_SPLIT; - if (new_display_mode != display_mode || old_display_mode_setting != display_mode_setting) { + if (p_force || new_display_mode != display_mode || old_display_mode_setting != display_mode_setting) { display_mode = new_display_mode; old_display_mode_setting = display_mode_setting; button_toggle_display_mode->set_pressed(display_mode_setting == DISPLAY_MODE_SETTING_SPLIT ? true : false); @@ -252,19 +247,9 @@ void FileSystemDock::_update_display_mode() { file_list_vb->hide(); break; - case DISPLAY_MODE_FILE_LIST_ONLY: - tree->hide(); - tree_search_box->hide(); - button_tree->show(); - - file_list_vb->show(); - _update_file_list(true); - break; - case DISPLAY_MODE_SPLIT: tree->show(); tree->set_v_size_flags(SIZE_EXPAND_FILL); - button_tree->hide(); tree->ensure_cursor_is_visible(); tree_search_box->hide(); _update_tree(_compute_uncollapsed_paths()); @@ -295,7 +280,6 @@ void FileSystemDock::_notification(int p_what) { String ei = "EditorIcons"; button_reload->set_icon(get_icon("Reload", ei)); button_toggle_display_mode->set_icon(get_icon("Panels2", ei)); - button_tree->set_icon(get_icon("Filesystem", ei)); _update_file_list_display_mode_button(); button_file_list_display_mode->connect("pressed", this, "_change_file_display"); @@ -312,7 +296,6 @@ void FileSystemDock::_notification(int p_what) { file_list_popup->connect("id_pressed", this, "_file_list_rmb_option"); tree_popup->connect("id_pressed", this, "_tree_rmb_option"); - button_tree->connect("pressed", this, "_go_to_tree", varray(), CONNECT_DEFERRED); current_path->connect("text_entered", this, "navigate_to_path"); display_mode_setting = DisplayModeSetting(int(EditorSettings::get_singleton()->get("docks/filesystem/display_mode"))); @@ -352,14 +335,23 @@ void FileSystemDock::_notification(int p_what) { tree->set_drop_mode_flags(0); } break; + case NOTIFICATION_THEME_CHANGED: { + if (is_visible_in_tree()) { + _update_display_mode(true); + } + } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { // Update icons String ei = "EditorIcons"; button_reload->set_icon(get_icon("Reload", ei)); button_toggle_display_mode->set_icon(get_icon("Panels2", ei)); - button_tree->set_icon(get_icon("Filesystem", ei)); button_hist_next->set_icon(get_icon("Forward", ei)); button_hist_prev->set_icon(get_icon("Back", ei)); + if (button_file_list_display_mode->is_pressed()) { + button_file_list_display_mode->set_icon(get_icon("FileThumbnail", "EditorIcons")); + } else { + button_file_list_display_mode->set_icon(get_icon("FileList", "EditorIcons")); + } tree_search_box->set_right_icon(get_icon("Search", ei)); tree_search_box->set_clear_button_enabled(true); @@ -412,7 +404,7 @@ void FileSystemDock::_tree_multi_selected(Object *p_item, int p_column, bool p_s return; TreeItem *favorites_item = tree->get_root()->get_children(); - if (selected->get_parent() == favorites_item) { + if (selected->get_parent() == favorites_item && !String(selected->get_metadata(0)).ends_with("/")) { // Go to the favorites if we click in the favorites and the path has changed path = "Favorites"; } else { @@ -474,20 +466,9 @@ void FileSystemDock::navigate_to_path(const String &p_path) { _set_current_path_text(path); _push_to_history(); + _update_tree(_compute_uncollapsed_paths()); if (display_mode == DISPLAY_MODE_SPLIT) { - if (path.ends_with("/") || path == "Favorites") { - _go_to_file_list(); - } - _update_tree(_compute_uncollapsed_paths()); _update_file_list(false); - } else if (display_mode == DISPLAY_MODE_TREE_ONLY) { - if (path.ends_with("/") || path == "Favorites") { - _go_to_file_list(); - } else { - _update_tree(_compute_uncollapsed_paths()); - } - } else { // DISPLAY_MODE_FILE_LIST_ONLY - _update_file_list(true); } String file_name = p_path.get_file(); @@ -701,7 +682,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { _search(EditorFileSystem::get_singleton()->get_filesystem(), &filelist, 128); } else { - if ((display_mode == DISPLAY_MODE_FILE_LIST_ONLY || display_mode == DISPLAY_MODE_TREE_ONLY) || always_show_folders) { + if (display_mode == DISPLAY_MODE_TREE_ONLY || always_show_folders) { // Display folders in the list if (directory != "res://") { @@ -829,35 +810,16 @@ void FileSystemDock::_tree_activate_file() { TreeItem *selected = tree->get_selected(); if (selected) { call_deferred("_select_file", selected->get_metadata(0)); - } -} - -void FileSystemDock::_file_list_activate_file(int p_idx) { - _select_file(files->get_item_metadata(p_idx)); -} - -void FileSystemDock::_go_to_file_list() { - if (display_mode == DISPLAY_MODE_TREE_ONLY) { - - file_list_view = true; - _update_display_mode(); - } else { - TreeItem *selected = tree->get_selected(); - if (selected) { + if (path.ends_with("/") || path == "Favorites") { bool collapsed = selected->is_collapsed(); selected->set_collapsed(!collapsed); } - _update_file_list(false); } } -void FileSystemDock::_go_to_tree() { - - file_list_view = false; - tree->grab_focus(); - _update_display_mode(); - tree->ensure_cursor_is_visible(); +void FileSystemDock::_file_list_activate_file(int p_idx) { + _select_file(files->get_item_metadata(p_idx)); } void FileSystemDock::_preview_invalidated(const String &p_path) { @@ -989,7 +951,7 @@ void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd, const Map<Str } void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_new_path, - Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) const { + Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) { //Ensure folder paths end with "/" String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/"); String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/"); @@ -1019,6 +981,7 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ print_verbose("Moving " + old_path + " -> " + new_path); Error err = da->rename(old_path, new_path); if (err == OK) { + //Move/Rename any corresponding import settings too if (p_item.is_file && FileAccess::exists(old_path + ".import")) { err = da->rename(old_path + ".import", new_path + ".import"); @@ -1045,9 +1008,11 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ for (int i = 0; i < file_changed_paths.size(); ++i) { p_file_renames[file_changed_paths[i]] = file_changed_paths[i].replace_first(old_path, new_path); print_verbose(" Remap: " + file_changed_paths[i] + " -> " + p_file_renames[file_changed_paths[i]]); + emit_signal("files_moved", file_changed_paths[i], p_file_renames[file_changed_paths[i]]); } for (int i = 0; i < folder_changed_paths.size(); ++i) { p_folder_renames[folder_changed_paths[i]] = folder_changed_paths[i].replace_first(old_path, new_path); + emit_signal("folder_moved", folder_changed_paths[i], p_folder_renames[folder_changed_paths[i]].substr(0, p_folder_renames[folder_changed_paths[i]].length() - 1)); } } else { EditorNode::get_singleton()->add_io_error(TTR("Error moving:") + "\n" + old_path + "\n"); @@ -1172,6 +1137,23 @@ void FileSystemDock::_update_project_settings_after_move(const Map<String, Strin } }; } + + // Also search for the file in autoload, as they are stored differently from normal files. + List<PropertyInfo> property_list; + ProjectSettings::get_singleton()->get_property_list(&property_list); + for (const List<PropertyInfo>::Element *E = property_list.front(); E; E = E->next()) { + if (E->get().name.begins_with("autoload/")) { + // If the autoload resource paths has a leading "*", it indicates that it is a Singleton, + // so we have to handle both cases when updating. + String autoload = GLOBAL_GET(E->get().name); + String autoload_singleton = autoload.substr(1, autoload.length()); + if (p_renames.has(autoload)) { + ProjectSettings::get_singleton()->set_setting(E->get().name, p_renames[autoload]); + } else if (autoload.begins_with("*") && p_renames.has(autoload_singleton)) { + ProjectSettings::get_singleton()->set_setting(E->get().name, "*" + p_renames[autoload_singleton]); + } + } + } ProjectSettings::get_singleton()->save(); } @@ -1200,7 +1182,8 @@ void FileSystemDock::_make_dir_confirm() { if (dir_name.length() == 0) { EditorNode::get_singleton()->show_warning(TTR("No name provided")); return; - } else if (dir_name.find("/") != -1 || dir_name.find("\\") != -1 || dir_name.find(":") != -1 || dir_name.ends_with(".") || dir_name.ends_with(" ")) { + } else if (dir_name.find("/") != -1 || dir_name.find("\\") != -1 || dir_name.find(":") != -1 || dir_name.find("*") != -1 || + dir_name.find("|") != -1 || dir_name.find(">") != -1 || dir_name.ends_with(".") || dir_name.ends_with(" ")) { EditorNode::get_singleton()->show_warning(TTR("Provided name contains invalid characters")); return; } @@ -1225,6 +1208,14 @@ void FileSystemDock::_make_dir_confirm() { } } +void FileSystemDock::_file_deleted(String p_file) { + emit_signal("file_deleted", p_file); +} + +void FileSystemDock::_folder_deleted(String p_folder) { + emit_signal("folder_deleted", p_folder); +} + void FileSystemDock::_rename_operation_confirm() { String new_name = rename_dialog_text->get_text().strip_edges(); @@ -1623,7 +1614,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> p_selected) if (!fpath.ends_with("/")) { fpath = fpath.get_base_dir(); } - make_script_dialog_text->config("Node", fpath + "new_script.gd", false); + make_script_dialog_text->config("Node", fpath.plus_file("new_script.gd"), false); make_script_dialog_text->popup_centered(Size2(300, 300) * EDSCALE); } break; @@ -1676,9 +1667,6 @@ void FileSystemDock::_search_changed(const String &p_text, const Control *p_from tree_search_box->set_text(searched_string); switch (display_mode) { - case DISPLAY_MODE_FILE_LIST_ONLY: { - _update_file_list(false); - } break; case DISPLAY_MODE_TREE_ONLY: { _update_tree(searched_string.length() == 0 ? uncollapsed_paths_before_search : Vector<String>()); } break; @@ -1707,12 +1695,6 @@ void FileSystemDock::fix_dependencies(const String &p_for_file) { void FileSystemDock::focus_on_filter() { - if (display_mode == DISPLAY_MODE_FILE_LIST_ONLY && tree->is_visible()) { - // Tree mode, switch to files list with search box - tree->hide(); - file_list_vb->show(); - } - file_list_search_box->grab_focus(); } @@ -1953,7 +1935,7 @@ void FileSystemDock::_get_drag_target_folder(String &target, bool &target_favori } String ltarget = files->get_item_metadata(pos); - target = ltarget.ends_with("/") ? ltarget : path; + target = ltarget.ends_with("/") ? ltarget : path.get_base_dir(); return; } @@ -1997,7 +1979,7 @@ void FileSystemDock::_get_drag_target_folder(String &target, bool &target_favori return; } -void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<String> p_paths) { +void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<String> p_paths, bool p_display_path_dependent_options) { // Add options for files and folders ERR_FAIL_COND(p_paths.empty()) @@ -2084,12 +2066,14 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str if (p_paths.size() == 1) { p_popup->add_separator(); - p_popup->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); - p_popup->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); - p_popup->add_item(TTR("New Resource..."), FILE_NEW_RESOURCE); + if (p_display_path_dependent_options) { + p_popup->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); + p_popup->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); + p_popup->add_item(TTR("New Resource..."), FILE_NEW_RESOURCE); + } String fpath = p_paths[0]; - String item_text = fpath.ends_with("/") ? TTR("Open In File Manager") : TTR("Show In File Manager"); + String item_text = fpath.ends_with("/") ? TTR("Open in File Manager") : TTR("Show in File Manager"); p_popup->add_item(item_text, FILE_SHOW_IN_EXPLORER); } } @@ -2100,8 +2084,8 @@ void FileSystemDock::_tree_rmb_select(const Vector2 &p_pos) { if (paths.size() == 1) { if (paths[0].ends_with("/")) { - tree_popup->add_item(TTR("Expand all"), FOLDER_EXPAND_ALL); - tree_popup->add_item(TTR("Collapse all"), FOLDER_COLLAPSE_ALL); + tree_popup->add_item(TTR("Expand All"), FOLDER_EXPAND_ALL); + tree_popup->add_item(TTR("Collapse All"), FOLDER_COLLAPSE_ALL); tree_popup->add_separator(); } } @@ -2133,7 +2117,7 @@ void FileSystemDock::_file_list_rmb_select(int p_item, const Vector2 &p_pos) { if (!paths.empty()) { file_list_popup->clear(); file_list_popup->set_size(Size2(1, 1)); - _file_and_folders_fill_popup(file_list_popup, paths); + _file_and_folders_fill_popup(file_list_popup, paths, searched_string.length() == 0); file_list_popup->set_position(files->get_global_position() + p_pos); file_list_popup->popup(); } @@ -2141,13 +2125,16 @@ void FileSystemDock::_file_list_rmb_select(int p_item, const Vector2 &p_pos) { void FileSystemDock::_file_list_rmb_pressed(const Vector2 &p_pos) { // Right click on empty space for file list + if (searched_string.length() > 0) + return; + file_list_popup->clear(); file_list_popup->set_size(Size2(1, 1)); file_list_popup->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); file_list_popup->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); file_list_popup->add_item(TTR("New Resource..."), FILE_NEW_RESOURCE); - file_list_popup->add_item(TTR("Show In File Manager"), FILE_SHOW_IN_EXPLORER); + file_list_popup->add_item(TTR("Show in File Manager"), FILE_SHOW_IN_EXPLORER); file_list_popup->set_position(files->get_global_position() + p_pos); file_list_popup->popup(); } @@ -2297,12 +2284,14 @@ void FileSystemDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_file_list_rmb_select"), &FileSystemDock::_file_list_rmb_select); ClassDB::bind_method(D_METHOD("_file_list_rmb_pressed"), &FileSystemDock::_file_list_rmb_pressed); + ClassDB::bind_method(D_METHOD("_file_deleted"), &FileSystemDock::_file_deleted); + ClassDB::bind_method(D_METHOD("_folder_deleted"), &FileSystemDock::_folder_deleted); + ClassDB::bind_method(D_METHOD("_file_list_thumbnail_done"), &FileSystemDock::_file_list_thumbnail_done); ClassDB::bind_method(D_METHOD("_tree_thumbnail_done"), &FileSystemDock::_tree_thumbnail_done); ClassDB::bind_method(D_METHOD("_file_list_activate_file"), &FileSystemDock::_file_list_activate_file); ClassDB::bind_method(D_METHOD("_tree_activate_file"), &FileSystemDock::_tree_activate_file); ClassDB::bind_method(D_METHOD("_select_file"), &FileSystemDock::_select_file); - ClassDB::bind_method(D_METHOD("_go_to_tree"), &FileSystemDock::_go_to_tree); ClassDB::bind_method(D_METHOD("navigate_to_path"), &FileSystemDock::navigate_to_path); ClassDB::bind_method(D_METHOD("_change_file_display"), &FileSystemDock::_change_file_display); ClassDB::bind_method(D_METHOD("_fw_history"), &FileSystemDock::_fw_history); @@ -2328,6 +2317,11 @@ void FileSystemDock::_bind_methods() { ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"))); ADD_SIGNAL(MethodInfo("open")); + + ADD_SIGNAL(MethodInfo("file_removed", PropertyInfo(Variant::STRING, "file"))); + ADD_SIGNAL(MethodInfo("folder_removed", PropertyInfo(Variant::STRING, "folder"))); + ADD_SIGNAL(MethodInfo("files_moved", PropertyInfo(Variant::STRING, "old_file"), PropertyInfo(Variant::STRING, "new_file"))); + ADD_SIGNAL(MethodInfo("folder_moved", PropertyInfo(Variant::STRING, "old_folder"), PropertyInfo(Variant::STRING, "new_file"))); } FileSystemDock::FileSystemDock(EditorNode *p_editor) { @@ -2398,7 +2392,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { /* button_open = memnew( Button ); button_open->set_flat(true); - button_open->connect("pressed",this,"_go_to_file_list"); + button_open->connect("pressed",this,"_tree_toggle_collapsed"); toolbar_hbc->add_child(button_open); button_open->hide(); button_open->set_focus_mode(FOCUS_NONE); @@ -2448,11 +2442,6 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { path_hb = memnew(HBoxContainer); file_list_vb->add_child(path_hb); - button_tree = memnew(ToolButton); - button_tree->set_tooltip(TTR("Enter tree-view.")); - button_tree->hide(); - path_hb->add_child(button_tree); - file_list_search_box = memnew(LineEdit); file_list_search_box->set_h_size_flags(SIZE_EXPAND_FILL); file_list_search_box->set_placeholder(TTR("Search files")); @@ -2494,6 +2483,8 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { add_child(owners_editor); remove_dialog = memnew(DependencyRemoveDialog); + remove_dialog->connect("file_removed", this, "_file_deleted"); + remove_dialog->connect("folder_removed", this, "_folder_deleted"); add_child(remove_dialog); move_dialog = memnew(EditorDirDialog); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index d964515572..7692566c0b 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -73,7 +73,6 @@ private: enum DisplayMode { DISPLAY_MODE_TREE_ONLY, - DISPLAY_MODE_FILE_LIST_ONLY, DISPLAY_MODE_SPLIT, }; @@ -109,7 +108,6 @@ private: Button *button_toggle_display_mode; Button *button_reload; - Button *button_tree; Button *button_file_list_display_mode; Button *button_hist_next; Button *button_hist_prev; @@ -127,7 +125,6 @@ private: DisplayMode display_mode; DisplayModeSetting display_mode_setting; DisplayModeSetting old_display_mode_setting; - bool file_list_view; PopupMenu *file_list_popup; PopupMenu *tree_popup; @@ -193,8 +190,7 @@ private: void _change_file_display(); void _fs_changed(); - void _go_to_tree(); - void _go_to_file_list(); + void _tree_toggle_collapsed(); void _select_file(const String p_path); void _tree_activate_file(); @@ -206,13 +202,18 @@ private: void _get_all_items_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files, Vector<String> &folders) const; void _find_remaps(EditorFileSystemDirectory *efsd, const Map<String, String> &renames, Vector<String> &to_remaps) const; - void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) const; + void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames); void _try_duplicate_item(const FileOrFolder &p_item, const String &p_new_path) const; void _update_dependencies_after_move(const Map<String, String> &p_renames) const; void _update_resource_paths_after_move(const Map<String, String> &p_renames) const; void _update_favorites_list_after_move(const Map<String, String> &p_files_renames, const Map<String, String> &p_folders_renames) const; void _update_project_settings_after_move(const Map<String, String> &p_folders_renames) const; + void _file_deleted(String p_file); + void _folder_deleted(String p_folder); + void _files_moved(String p_old_file, String p_new_file); + void _folder_moved(String p_old_folder, String p_new_folder); + void _resource_created() const; void _make_dir_confirm(); void _rename_operation_confirm(); @@ -237,7 +238,7 @@ private: void _search_changed(const String &p_text, const Control *p_from); - void _file_and_folders_fill_popup(PopupMenu *p_popup, Vector<String> p_paths); + void _file_and_folders_fill_popup(PopupMenu *p_popup, Vector<String> p_paths, bool p_display_path_dependent_options = true); void _tree_rmb_select(const Vector2 &p_pos); void _file_list_rmb_select(int p_item, const Vector2 &p_pos); void _file_list_rmb_pressed(const Vector2 &p_pos); @@ -268,7 +269,7 @@ private: void _file_list_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); void _tree_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); - void _update_display_mode(); + void _update_display_mode(bool p_force = false); Vector<String> _tree_get_selected(bool remove_self_inclusion = true); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index 2af81b8ac7..6ebe8cfe2c 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -29,8 +29,10 @@ /*************************************************************************/ #include "find_in_files.h" + #include "core/os/dir_access.h" #include "core/os/os.h" +#include "editor_node.h" #include "editor_scale.h" #include "scene/gui/box_container.h" #include "scene/gui/button.h" @@ -42,8 +44,6 @@ #include "scene/gui/progress_bar.h" #include "scene/gui/tree.h" -#define ROOT_PREFIX "res://" - const char *FindInFiles::SIGNAL_RESULT_FOUND = "result_found"; const char *FindInFiles::SIGNAL_FINISHED = "finished"; @@ -87,9 +87,6 @@ static bool find_next(const String &line, String pattern, int from, bool match_c //-------------------------------------------------------------------------------- FindInFiles::FindInFiles() { - _root_prefix = ROOT_PREFIX; - _extension_filter.insert("gd"); - _extension_filter.insert("cs"); _searching = false; _whole_words = true; _match_case = true; @@ -182,7 +179,7 @@ void FindInFiles::_iterate() { _current_dir = _current_dir.plus_file(folder_name); PoolStringArray sub_dirs; - _scan_dir(_root_prefix + _current_dir, sub_dirs); + _scan_dir("res://" + _current_dir, sub_dirs); _folders_stack.push_back(sub_dirs); @@ -300,8 +297,7 @@ const char *FindInFilesDialog::SIGNAL_REPLACE_REQUESTED = "replace_requested"; FindInFilesDialog::FindInFilesDialog() { - set_custom_minimum_size(Size2(400, 190)); - set_resizable(true); + set_custom_minimum_size(Size2(500 * EDSCALE, 0)); set_title(TTR("Find in Files")); VBoxContainer *vbc = memnew(VBoxContainer); @@ -316,7 +312,7 @@ FindInFilesDialog::FindInFilesDialog() { vbc->add_child(gc); Label *find_label = memnew(Label); - find_label->set_text(TTR("Find: ")); + find_label->set_text(TTR("Find:")); gc->add_child(find_label); _search_text_line_edit = memnew(LineEdit); @@ -325,36 +321,31 @@ FindInFilesDialog::FindInFilesDialog() { _search_text_line_edit->connect("text_entered", this, "_on_search_text_entered"); gc->add_child(_search_text_line_edit); - { - Control *placeholder = memnew(Control); - gc->add_child(placeholder); - } + gc->add_child(memnew(Control)); // Space to mantain the grid aligned. { HBoxContainer *hbc = memnew(HBoxContainer); _whole_words_checkbox = memnew(CheckBox); - _whole_words_checkbox->set_text(TTR("Whole words")); - _whole_words_checkbox->set_pressed(true); + _whole_words_checkbox->set_text(TTR("Whole Words")); hbc->add_child(_whole_words_checkbox); _match_case_checkbox = memnew(CheckBox); - _match_case_checkbox->set_text(TTR("Match case")); - _match_case_checkbox->set_pressed(true); + _match_case_checkbox->set_text(TTR("Match Case")); hbc->add_child(_match_case_checkbox); gc->add_child(hbc); } Label *folder_label = memnew(Label); - folder_label->set_text(TTR("Folder: ")); + folder_label->set_text(TTR("Folder:")); gc->add_child(folder_label); { HBoxContainer *hbc = memnew(HBoxContainer); Label *prefix_label = memnew(Label); - prefix_label->set_text(ROOT_PREFIX); + prefix_label->set_text("res://"); hbc->add_child(prefix_label); _folder_line_edit = memnew(LineEdit); @@ -375,15 +366,18 @@ FindInFilesDialog::FindInFilesDialog() { } Label *filter_label = memnew(Label); - filter_label->set_text(TTR("Filter: ")); + filter_label->set_text(TTR("Filters:")); gc->add_child(filter_label); { HBoxContainer *hbc = memnew(HBoxContainer); + // TODO: Unhardcode this. Vector<String> exts; exts.push_back("gd"); - exts.push_back("cs"); + if (Engine::get_singleton()->has_singleton("GodotSharp")) + exts.push_back("cs"); + exts.push_back("shader"); for (int i = 0; i < exts.size(); ++i) { CheckBox *cb = memnew(CheckBox); @@ -396,39 +390,14 @@ FindInFilesDialog::FindInFilesDialog() { gc->add_child(hbc); } - { - Control *placeholder = memnew(Control); - placeholder->set_custom_minimum_size(Size2(0, EDSCALE * 16)); - vbc->add_child(placeholder); - } - - { - HBoxContainer *hbc = memnew(HBoxContainer); - hbc->set_alignment(HBoxContainer::ALIGN_CENTER); + _find_button = add_button(TTR("Find..."), false, "find"); + _find_button->set_disabled(true); - _find_button = add_button(TTR("Find..."), false, "find"); - _find_button->set_disabled(true); + _replace_button = add_button(TTR("Replace..."), false, "replace"); + _replace_button->set_disabled(true); - { - Control *placeholder = memnew(Control); - placeholder->set_custom_minimum_size(Size2(EDSCALE * 16, 0)); - hbc->add_child(placeholder); - } - - _replace_button = add_button(TTR("Replace..."), false, "replace"); - _replace_button->set_disabled(true); - - { - Control *placeholder = memnew(Control); - placeholder->set_custom_minimum_size(Size2(EDSCALE * 16, 0)); - hbc->add_child(placeholder); - } - - Button *cancel_button = get_ok(); - cancel_button->set_text(TTR("Cancel")); - - vbc->add_child(hbc); - } + Button *cancel_button = get_ok(); + cancel_button->set_text(TTR("Cancel")); } void FindInFilesDialog::set_search_text(String text) { @@ -548,7 +517,7 @@ FindInFilesPanel::FindInFilesPanel() { hbc->add_child(find_label); _search_text_label = memnew(Label); - _search_text_label->add_font_override("font", get_font("source", "EditorFonts")); + _search_text_label->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("source", "EditorFonts")); hbc->add_child(_search_text_label); _progress_bar = memnew(ProgressBar); @@ -562,14 +531,14 @@ FindInFilesPanel::FindInFilesPanel() { _cancel_button = memnew(Button); _cancel_button->set_text(TTR("Cancel")); _cancel_button->connect("pressed", this, "_on_cancel_button_clicked"); - _cancel_button->set_disabled(true); + _cancel_button->hide(); hbc->add_child(_cancel_button); vbc->add_child(hbc); } _results_display = memnew(Tree); - _results_display->add_font_override("font", get_font("source", "EditorFonts")); + _results_display->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("source", "EditorFonts")); _results_display->set_v_size_flags(SIZE_EXPAND_FILL); _results_display->connect("item_selected", this, "_on_result_selected"); _results_display->connect("item_edited", this, "_on_item_edited"); @@ -641,7 +610,7 @@ void FindInFilesPanel::start_search() { _finder->start(); update_replace_buttons(); - _cancel_button->set_disabled(false); + _cancel_button->show(); } void FindInFilesPanel::stop_search() { @@ -651,7 +620,7 @@ void FindInFilesPanel::stop_search() { _status_label->set_text(""); update_replace_buttons(); set_progress_visible(false); - _cancel_button->set_disabled(true); + _cancel_button->hide(); } void FindInFilesPanel::_notification(int p_what) { @@ -687,7 +656,7 @@ void FindInFilesPanel::_on_result_found(String fpath, int line_number, int begin // Do this first because it resets properties of the cell... item->set_cell_mode(text_index, TreeItem::CELL_MODE_CUSTOM); - String item_text = String::num_int64(line_number) + ": " + text.replace("\t", " "); + String item_text = vformat("%3s: %s", line_number, text.replace("\t", " ")); item->set_text(text_index, item_text); item->set_custom_draw(text_index, this, "_draw_result_text"); @@ -702,7 +671,7 @@ void FindInFilesPanel::_on_result_found(String fpath, int line_number, int begin r.begin = begin; r.end = end; r.draw_begin = (item_text_width - raw_text_width) + font->get_string_size(text.left(r.begin)).x; - r.draw_width = font->get_string_size(text.substr(r.begin, r.end - r.begin + 1)).x; + r.draw_width = font->get_string_size(text.substr(r.begin, r.end - r.begin)).x; _result_items[item] = r; if (_with_replace) { @@ -753,7 +722,7 @@ void FindInFilesPanel::_on_finished() { _status_label->set_text(TTR("Search complete")); update_replace_buttons(); set_progress_visible(false); - _cancel_button->set_disabled(true); + _cancel_button->hide(); } void FindInFilesPanel::_on_cancel_button_clicked() { diff --git a/editor/find_in_files.h b/editor/find_in_files.h index 7f37123430..9705c4796c 100644 --- a/editor/find_in_files.h +++ b/editor/find_in_files.h @@ -73,7 +73,6 @@ private: // Config String _pattern; Set<String> _extension_filter; - String _root_prefix; String _root_dir; bool _whole_words; bool _match_case; diff --git a/editor/icons/icon_GUI_viewport_hdiagsplitter.svg b/editor/icons/icon_GUI_viewport_hdiagsplitter.svg index 36769768fd..90a0f56c43 100644 --- a/editor/icons/icon_GUI_viewport_hdiagsplitter.svg +++ b/editor/icons/icon_GUI_viewport_hdiagsplitter.svg @@ -1,64 +1,5 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="64" - height="34" - version="1.1" - viewBox="0 0 64 34" - id="svg6" - sodipodi:docname="icon_GUI_vsplitter1.svg" - inkscape:version="0.92.2 2405546, 2018-03-11"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1366" - inkscape:window-height="714" - id="namedview8" - showgrid="false" - inkscape:zoom="5.6568543" - inkscape:cx="37.006499" - inkscape:cy="15.680715" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="1" - inkscape:current-layer="svg6" /> - <g - transform="translate(0,-1018.4)" - id="g4" /> - <g - transform="rotate(90,541.2,539.2)" - id="g4-3"> - <path - id="path2-6" - style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-opacity:0.39216003" - d="M 4.0306826,1048.4 H 34 m -30,30 v -60" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" /> - </g> +<svg width="64" height="34" version="1.1" viewBox="0 0 64 34" xmlns="http://www.w3.org/2000/svg"> +<g transform="rotate(90,541.2,539.2)"> +<path d="m4.0307 1048.4h29.969m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> +</g> </svg> diff --git a/editor/icons/icon_GUI_viewport_vdiagsplitter.svg b/editor/icons/icon_GUI_viewport_vdiagsplitter.svg index f23b4a0a74..481f895d46 100644 --- a/editor/icons/icon_GUI_viewport_vdiagsplitter.svg +++ b/editor/icons/icon_GUI_viewport_vdiagsplitter.svg @@ -1,68 +1,7 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="34" - height="64" - version="1.1" - viewBox="0 0 34 64" - id="svg6" - sodipodi:docname="icon_GUI_vsplitter2.svg" - inkscape:version="0.92.2 2405546, 2018-03-11"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1366" - inkscape:window-height="714" - id="namedview8" - showgrid="false" - inkscape:zoom="4" - inkscape:cx="32.245723" - inkscape:cy="44.255214" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="1" - inkscape:current-layer="svg6" /> - <g - transform="translate(0,-988.4)" - id="g4" /> - <g - id="g839" - transform="rotate(90,32.003536,32.003535)"> - <g - id="g4-3" - transform="rotate(90,526.2,554.2)"> - <path - sodipodi:nodetypes="cccc" - inkscape:connector-curvature="0" - d="M 4.0306826,1048.4 H 34 m -30,30 v -60" - style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-opacity:0.39216003" - id="path2-6" /> - </g> - </g> +<svg width="34" height="64" version="1.1" viewBox="0 0 34 64" xmlns="http://www.w3.org/2000/svg"> +<g transform="rotate(90 32.004 32.004)"> +<g transform="rotate(90,526.2,554.2)"> +<path d="m4.0307 1048.4h29.969m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> +</g> +</g> </svg> diff --git a/editor/icons/icon_GUI_viewport_vhsplitter.svg b/editor/icons/icon_GUI_viewport_vhsplitter.svg index 429cf909ae..52d7d8f0b7 100644 --- a/editor/icons/icon_GUI_viewport_vhsplitter.svg +++ b/editor/icons/icon_GUI_viewport_vhsplitter.svg @@ -1,63 +1,5 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="64" - height="64" - version="1.1" - viewBox="0 0 64 64" - id="svg6" - sodipodi:docname="icon_GUI_vsplitter.svg" - inkscape:version="0.92.2 2405546, 2018-03-11"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1366" - inkscape:window-height="714" - id="namedview8" - showgrid="false" - inkscape:zoom="4.65625" - inkscape:cx="9.8488117" - inkscape:cy="20.04653" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="1" - inkscape:current-layer="svg6" /> - <g - transform="translate(0,-988.4)" - id="g4" /> - <g - transform="rotate(90,526.2,554.2)" - id="g4-3"> - <path - id="path2-6" - style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-opacity:0.39216003" - d="m -26,1048.4 h 60 m -30,30 v -60" - inkscape:connector-curvature="0" /> - </g> +<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> +<g transform="rotate(90,526.2,554.2)"> +<path d="m-26 1048.4h60m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> +</g> </svg> diff --git a/editor/icons/icon_noise_texture.svg b/editor/icons/icon_noise_texture.svg new file mode 100644 index 0000000000..5908c2b2d4 --- /dev/null +++ b/editor/icons/icon_noise_texture.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<path d="m2 1c-0.55228 0-1 0.44772-1 1v12c0 0.55228 0.44772 1 1 1h12c0.55228 0 1-0.44772 1-1v-12c0-0.55228-0.44772-1-1-1zm1 2h10v8h-10zm3 1v2h2v-2zm2 2v2h2v2h2v-6h-2v2zm0 2h-2v-2h-2v4h4z" fill="#e0e0e0" fill-opacity=".99608"/> +</svg> diff --git a/editor/icons/icon_script_extend.svg b/editor/icons/icon_script_extend.svg new file mode 100644 index 0000000000..ef3d48af9f --- /dev/null +++ b/editor/icons/icon_script_extend.svg @@ -0,0 +1,8 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m6 1v1c-0.55228 0-1 0.44772-1 1v10h-1v-2h-2v2c2.826e-4 0.35698 0.19084 0.68674 0.5 0.86523 0.15194 0.088045 0.32439 0.13452 0.5 0.13477v1h7c0.73866 0 1.3763-0.40437 1.7227-1h-3.7227v-4h4v-5h3v-2c0-1.1046-0.89543-2-2-2z" fill="#e0e0e0"/> +<path transform="translate(0 1036.4)" d="m6 1c-1.1046 0-2 0.89543-2 2v7h-2-1v1 2c0 1.1046 0.89543 2 2 2s2-0.89543 2-2v-10c0-0.55228 0.44772-1 1-1s1 0.44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-0.89543-2-2-2zm-4 10h2v2c0 0.55228-0.44772 1-1 1s-1-0.44772-1-1v-2z" fill="#b4b4b4"/> +<circle cx="3" cy="1048.4" rx="1" ry="1" fill="#e0e0e0"/> +<path d="m16 1048.4-3-3v2h-4v2h4v2z" fill="#68b6ff" fill-rule="evenodd"/> +</g> +</svg> diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 60ca66e464..8e69090da3 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -321,7 +321,7 @@ Error ColladaImport::_create_scene(Collada::Node *p_node, Spatial *p_parent) { } else { //mesh since nothing else node = memnew(MeshInstance); - Object::cast_to<MeshInstance>(node)->set_flag(GeometryInstance::FLAG_USE_BAKED_LIGHT, true); + //Object::cast_to<MeshInstance>(node)->set_flag(GeometryInstance::FLAG_USE_BAKED_LIGHT, true); } } break; case Collada::Node::TYPE_SKELETON: { @@ -771,7 +771,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me int binormal_pos = (binormal_src->stride ? binormal_src->stride : 3) * p.indices[src + binormal_ofs]; ERR_FAIL_INDEX_V(binormal_pos, binormal_src->array.size(), ERR_INVALID_DATA); - Vector3 binormal = Vector3(binormal_src->array[binormal_pos + 0], binormal_src->array[binormal_pos + 1], binormal_src->array[binormal_pos + 2]); + Vector3 binormal = Vector3(-binormal_src->array[binormal_pos + 0], -binormal_src->array[binormal_pos + 1], -binormal_src->array[binormal_pos + 2]); // Due to Godots face order it seems we need to flip our binormal! int tangent_pos = (tangent_src->stride ? tangent_src->stride : 3) * p.indices[src + tangent_ofs]; ERR_FAIL_INDEX_V(tangent_pos, tangent_src->array.size(), ERR_INVALID_DATA); @@ -1191,6 +1191,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres if (collada.state.mesh_data_map.has(meshid)) { Ref<ArrayMesh> mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); const Collada::MeshData &meshdata = collada.state.mesh_data_map[meshid]; + mesh->set_name(meshdata.name); Error err = _create_mesh_surfaces(false, mesh, ng->material_map, meshdata, apply_xform, bone_remap, skin, NULL, Vector<Ref<ArrayMesh> >(), false); ERR_FAIL_COND_V(err, err); @@ -1655,8 +1656,9 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones } } - Quat q = xform.basis.get_rotation_quat(); Vector3 s = xform.basis.get_scale(); + bool singular_matrix = Math::is_equal_approx(s.x, 0.0f) || Math::is_equal_approx(s.y, 0.0f) || Math::is_equal_approx(s.z, 0.0f); + Quat q = singular_matrix ? Quat() : xform.basis.get_rotation_quat(); Vector3 l = xform.origin; animation->transform_track_insert_key(track, snapshots[i], l, q, s); @@ -1705,8 +1707,9 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones xform = sk->get_bone_rest(nm.bone).affine_inverse() * xform; - Quat q = xform.basis.get_rotation_quat(); Vector3 s = xform.basis.get_scale(); + bool singular_matrix = Math::is_equal_approx(s.x, 0.0f) || Math::is_equal_approx(s.y, 0.0f) || Math::is_equal_approx(s.z, 0.0f); + Quat q = singular_matrix ? Quat() : xform.basis.get_rotation_quat(); Vector3 l = xform.origin; animation->transform_track_insert_key(track, 0, l, q, s); diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index a6b754de3b..00ca86a43b 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -899,7 +899,16 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array[Mesh::ARRAY_NORMAL] = _decode_accessor_as_vec3(state, a["NORMAL"], true); } if (a.has("TANGENT")) { - array[Mesh::ARRAY_TANGENT] = _decode_accessor_as_floats(state, a["TANGENT"], true); + PoolVector<float> tans = _decode_accessor_as_floats(state, a["TANGENT"], true); + { // we need our binormals inversed, so flip our w component. + int ts = tans.size(); + PoolVector<float>::Write w = tans.write(); + + for (int j = 3; j < ts; j += 4) { + w[j] *= -1.0; + } + } + array[Mesh::ARRAY_TANGENT] = tans; } if (a.has("TEXCOORD_0")) { array[Mesh::ARRAY_TEX_UV] = _decode_accessor_as_vec2(state, a["TEXCOORD_0"], true); @@ -1686,7 +1695,7 @@ void EditorSceneImporterGLTF::_generate_node(GLTFState &state, int p_node, Node n->godot_nodes.push_back(node); - if (n->skin >= 0 && Object::cast_to<MeshInstance>(node)) { + if (n->skin >= 0 && n->skin < skeletons.size() && Object::cast_to<MeshInstance>(node)) { MeshInstance *mi = Object::cast_to<MeshInstance>(node); Skeleton *s = skeletons[n->skin]; @@ -1793,22 +1802,22 @@ template <> struct EditorSceneImporterGLTFInterpolate<Quat> { Quat lerp(const Quat &a, const Quat &b, float c) const { - ERR_FAIL_COND_V(a.is_normalized() == false, Quat()); - ERR_FAIL_COND_V(b.is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!a.is_normalized(), Quat()); + ERR_FAIL_COND_V(!b.is_normalized(), Quat()); return a.slerp(b, c).normalized(); } Quat catmull_rom(const Quat &p0, const Quat &p1, const Quat &p2, const Quat &p3, float c) { - ERR_FAIL_COND_V(p1.is_normalized() == false, Quat()); - ERR_FAIL_COND_V(p2.is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!p1.is_normalized(), Quat()); + ERR_FAIL_COND_V(!p2.is_normalized(), Quat()); return p1.slerp(p2, c).normalized(); } Quat bezier(Quat start, Quat control_1, Quat control_2, Quat end, float t) { - ERR_FAIL_COND_V(start.is_normalized() == false, Quat()); - ERR_FAIL_COND_V(end.is_normalized() == false, Quat()); + ERR_FAIL_COND_V(!start.is_normalized(), Quat()); + ERR_FAIL_COND_V(!end.is_normalized(), Quat()); return start.slerp(end, t).normalized(); } diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 6d72cb4909..c5a5980fc1 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -365,29 +365,37 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Array return p_node; MeshInstance *mi = Object::cast_to<MeshInstance>(p_node); if (mi) { - Node *col; + Node *col = NULL; if (_teststr(name, "colonly")) { col = mi->create_trimesh_collision_node(); - ERR_FAIL_COND_V(!col, NULL); + if (col == NULL) { + ERR_PRINTS("Error generating collision for mesh: " + name); + } else { - col->set_name(_fixstr(name, "colonly")); + col->set_name(_fixstr(name, "colonly")); + } } else { col = mi->create_convex_collision_node(); - ERR_FAIL_COND_V(!col, NULL); + if (col == NULL) { + ERR_PRINTS("Error generating collision for mesh: " + name); + } else { - col->set_name(_fixstr(name, "convcolonly")); + col->set_name(_fixstr(name, "convcolonly")); + } } - Object::cast_to<Spatial>(col)->set_transform(mi->get_transform()); - p_node->replace_by(col); - memdelete(p_node); - p_node = col; + if (col) { + Object::cast_to<Spatial>(col)->set_transform(mi->get_transform()); + p_node->replace_by(col); + memdelete(p_node); + p_node = col; - StaticBody *sb = Object::cast_to<StaticBody>(col); - CollisionShape *colshape = Object::cast_to<CollisionShape>(sb->get_child(0)); - colshape->set_name("shape"); - colshape->set_owner(p_node->get_owner()); + StaticBody *sb = Object::cast_to<StaticBody>(col); + CollisionShape *colshape = Object::cast_to<CollisionShape>(sb->get_child(0)); + colshape->set_name("shape"); + colshape->set_owner(p_node->get_owner()); + } } else if (p_node->has_meta("empty_draw_type")) { String empty_draw_type = String(p_node->get_meta("empty_draw_type")); StaticBody *sb = memnew(StaticBody); diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index b046e2e975..b81a52ab70 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -116,7 +116,7 @@ class ResourceImporterScene : public ResourceImporter { enum LightBakeMode { LIGHT_BAKE_DISABLED, LIGHT_BAKE_ENABLE, - //LIGHT_BAKE_LIGHTMAPS + LIGHT_BAKE_LIGHTMAPS }; void _replace_owner(Node *p_node, Node *p_scene, Node *p_new_owner); diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index 5eb1a42f9f..724203831c 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -216,7 +216,7 @@ void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "stream"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "size_limit", PROPERTY_HINT_RANGE, "0,4096,1"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "detect_3d"), p_preset == PRESET_DETECT)); - r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "svg/scale", PROPERTY_HINT_RANGE, "0.001,100,0.1"), 1.0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "svg/scale", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 1.0)); } void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb, bool p_force_rgbe, bool p_detect_normal, bool p_force_normal) { @@ -235,7 +235,7 @@ void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String if (p_streamable) format |= StreamTexture::FORMAT_BIT_STREAM; - if (p_mipmaps || p_compress_mode == COMPRESS_VIDEO_RAM) //VRAM always uses mipmaps + if (p_mipmaps) format |= StreamTexture::FORMAT_BIT_HAS_MIPMAPS; //mipmaps bit if (p_detect_3d) format |= StreamTexture::FORMAT_BIT_DETECT_3D; @@ -310,7 +310,9 @@ void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String case COMPRESS_VIDEO_RAM: { Ref<Image> image = p_image->duplicate(); - image->generate_mipmaps(p_force_normal); + if (p_mipmaps) { + image->generate_mipmaps(p_force_normal); + } if (p_force_rgbe && image->get_format() >= Image::FORMAT_R8 && image->get_format() <= Image::FORMAT_RGBE9995) { image->convert(Image::FORMAT_RGBE9995); @@ -413,7 +415,7 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String image->resize(new_width, new_height, Image::INTERPOLATE_CUBIC); } - if (normal) { + if (normal == 1) { image->normalize(); } } diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 31eb193461..2e68609a56 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -38,11 +38,17 @@ public: List<PropertyInfo> properties; Ref<ResourceImporter> importer; Vector<String> paths; + Set<StringName> checked; + bool checking; bool _set(const StringName &p_name, const Variant &p_value) { if (values.has(p_name)) { values[p_name] = p_value; + if (checking) { + checked.insert(p_name); + _change_notify(String(p_name).utf8().get_data()); + } return true; } @@ -63,13 +69,24 @@ public: for (const List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { if (!importer->get_option_visibility(E->get().name, values)) continue; - p_list->push_back(E->get()); + PropertyInfo pi = E->get(); + if (checking) { + pi.usage |= PROPERTY_USAGE_CHECKABLE; + if (checked.has(E->get().name)) { + pi.usage |= PROPERTY_USAGE_CHECKED; + } + } + p_list->push_back(pi); } } void update() { _change_notify(); } + + ImportDockParameters() { + checking = false; + } }; void ImportDock::set_edit_path(const String &p_path) { @@ -125,6 +142,8 @@ void ImportDock::_update_options(const Ref<ConfigFile> &p_config) { params->properties.clear(); params->values.clear(); + params->checking = false; + params->checked.clear(); for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) { @@ -205,6 +224,8 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { params->properties.clear(); params->values.clear(); + params->checking = true; + params->checked.clear(); for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) { @@ -360,11 +381,21 @@ void ImportDock::_reimport() { Error err = config->load(params->paths[i] + ".import"); ERR_CONTINUE(err != OK); - config->set_value("remap", "importer", params->importer->get_importer_name()); - config->erase_section("params"); + if (params->checking) { + //update only what edited (checkboxes) + for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) { + if (params->checked.has(E->get().name)) { + config->set_value("params", E->get().name, params->values[E->get().name]); + } + } + } else { + //override entirely + config->set_value("remap", "importer", params->importer->get_importer_name()); + config->erase_section("params"); - for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) { - config->set_value("params", E->get().name, params->values[E->get().name]); + for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) { + config->set_value("params", E->get().name, params->values[E->get().name]); + } } config->save(params->paths[i] + ".import"); @@ -388,11 +419,20 @@ void ImportDock::_notification(int p_what) { } break; } } + +void ImportDock::_property_toggled(const StringName &p_prop, bool p_checked) { + if (p_checked) { + params->checked.insert(p_prop); + } else { + params->checked.erase(p_prop); + } +} void ImportDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_reimport"), &ImportDock::_reimport); ClassDB::bind_method(D_METHOD("_preset_selected"), &ImportDock::_preset_selected); ClassDB::bind_method(D_METHOD("_importer_selected"), &ImportDock::_importer_selected); + ClassDB::bind_method(D_METHOD("_property_toggled"), &ImportDock::_property_toggled); } void ImportDock::initialize_import_options() const { @@ -423,6 +463,7 @@ ImportDock::ImportDock() { import_opts = memnew(EditorInspector); add_child(import_opts); import_opts->set_v_size_flags(SIZE_EXPAND_FILL); + import_opts->connect("property_toggled", this, "_property_toggled"); hb = memnew(HBoxContainer); add_child(hb); diff --git a/editor/import_dock.h b/editor/import_dock.h index 41c7298d9a..632fd39700 100644 --- a/editor/import_dock.h +++ b/editor/import_dock.h @@ -60,6 +60,7 @@ class ImportDock : public VBoxContainer { void _importer_selected(int i_idx); void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>()); + void _property_toggled(const StringName &p_prop, bool p_checked); void _reimport(); enum { diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index 4f4980d83c..750fca2852 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -328,6 +328,21 @@ Container *InspectorDock::get_addon_area() { return this; } +void InspectorDock::_notification(int p_what) { + switch (p_what) { + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + set_theme(editor->get_gui_base()->get_theme()); + resource_new_button->set_icon(get_icon("New", "EditorIcons")); + resource_load_button->set_icon(get_icon("Load", "EditorIcons")); + backward_button->set_icon(get_icon("Back", "EditorIcons")); + forward_button->set_icon(get_icon("Forward", "EditorIcons")); + history_menu->set_icon(get_icon("History", "EditorIcons")); + object_menu->set_icon(get_icon("Tools", "EditorIcons")); + warning->set_icon(get_icon("NodeWarning", "EditorIcons")); + } break; + } +} + void InspectorDock::_bind_methods() { ClassDB::bind_method("_menu_option", &InspectorDock::_menu_option); diff --git a/editor/inspector_dock.h b/editor/inspector_dock.h index 97ef6899dc..57d2a03295 100644 --- a/editor/inspector_dock.h +++ b/editor/inspector_dock.h @@ -118,6 +118,7 @@ class InspectorDock : public VBoxContainer { protected: static void _bind_methods(); + void _notification(int p_what); public: void go_back(); diff --git a/editor/multi_node_edit.cpp b/editor/multi_node_edit.cpp index be4e752d55..420d8ad3cf 100644 --- a/editor/multi_node_edit.cpp +++ b/editor/multi_node_edit.cpp @@ -52,7 +52,7 @@ bool MultiNodeEdit::_set_impl(const StringName &p_name, const Variant &p_value, UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("MultiNode Set") + " " + String(name)); + ur->create_action(TTR("MultiNode Set") + " " + String(name), UndoRedo::MERGE_ENDS); for (const List<NodePath>::Element *E = nodes.front(); E; E = E->next()) { if (!es->has_node(E->get())) diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp index 93bed035a5..8e626e7111 100644 --- a/editor/plugin_config_dialog.cpp +++ b/editor/plugin_config_dialog.cpp @@ -76,7 +76,10 @@ void PluginConfigDialog::_on_confirmed() { "extends EditorPlugin\n" "\n" "func _enter_tree():\n" - "\tpass"); + "\tpass\n" + "\n" + "func _exit_tree():\n" + "\tpass\n"); String script_path = path.plus_file(script_edit->get_text()); gdscript->set_path(script_path); ResourceSaver::save(script_path, gdscript); @@ -84,7 +87,7 @@ void PluginConfigDialog::_on_confirmed() { } //TODO: other languages - emit_signal("plugin_ready", script.operator->(), active_edit->is_pressed() ? name_edit->get_text() : ""); + emit_signal("plugin_ready", script.operator->(), active_edit->is_pressed() ? subfolder_edit->get_text() : ""); } else { EditorNode::get_singleton()->get_project_settings()->update_plugins(); } @@ -177,7 +180,7 @@ PluginConfigDialog::PluginConfigDialog() { grid->add_child(desc_lb); desc_edit = memnew(TextEdit); - desc_edit->set_custom_minimum_size(Size2(400.0f, 50.0f)); + desc_edit->set_custom_minimum_size(Size2(400, 80) * EDSCALE); grid->add_child(desc_edit); Label *author_lb = memnew(Label); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index f7e59e2beb..a85f4456f7 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -103,6 +103,11 @@ bool AbstractPolygon2DEditor::_is_line() const { return false; } +bool AbstractPolygon2DEditor::_has_uv() const { + + return false; +} + int AbstractPolygon2DEditor::_get_polygon_count() const { return 1; @@ -132,8 +137,8 @@ Vector2 AbstractPolygon2DEditor::_get_offset(int p_idx) const { void AbstractPolygon2DEditor::_commit_action() { - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); } @@ -202,12 +207,7 @@ void AbstractPolygon2DEditor::_notification(int p_what) { button_edit->set_pressed(true); get_tree()->connect("node_removed", this, "_node_removed"); - create_resource->connect("confirmed", this, "_create_resource"); - - } break; - case NOTIFICATION_PHYSICS_PROCESS: { - } break; } } @@ -218,7 +218,7 @@ void AbstractPolygon2DEditor::_node_removed(Node *p_node) { edit(NULL); hide(); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } } @@ -229,6 +229,18 @@ void AbstractPolygon2DEditor::_wip_changed() { } } +void AbstractPolygon2DEditor::_wip_cancel() { + + wip.clear(); + wip_active = false; + + edited_point = PosVertex(); + hover_point = Vertex(); + selected_point = Vertex(); + + canvas_item_editor->update_viewport(); +} + void AbstractPolygon2DEditor::_wip_close() { if (!wip_active) return; @@ -238,8 +250,12 @@ void AbstractPolygon2DEditor::_wip_close() { _set_polygon(0, wip); } else if (wip.size() >= (_is_line() ? 2 : 3)) { - undo_redo->create_action(TTR("Create Poly")); + undo_redo->create_action(TTR("Create Polygon")); _action_add_polygon(wip); + if (_has_uv()) { + undo_redo->add_do_method(_get_node(), "set_uv", PoolVector<Vector2>()); + undo_redo->add_undo_method(_get_node(), "set_uv", _get_node()->get("uv")); + } _commit_action(); } else { @@ -301,7 +317,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) if (vertices.size() < (_is_line() ? 2 : 3)) { vertices.push_back(cpoint); - undo_redo->create_action(TTR("Edit Poly")); + undo_redo->create_action(TTR("Edit Polygon")); selected_point = Vertex(insert.polygon, vertices.size()); _action_set_polygon(insert.polygon, vertices); _commit_action(); @@ -319,7 +335,6 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) undo_redo->create_action(TTR("Insert Point")); _action_set_polygon(insert.polygon, vertices); _commit_action(); - return true; } } else { @@ -334,7 +349,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) edited_point = PosVertex(closest, xform.affine_inverse().xform(closest.pos)); selected_point = closest; edge_point = PosVertex(); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); return true; } else { @@ -351,7 +366,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) ERR_FAIL_INDEX_V(edited_point.vertex, vertices.size(), false); vertices.write[edited_point.vertex] = edited_point.pos - _get_offset(edited_point.polygon); - undo_redo->create_action(TTR("Edit Poly")); + undo_redo->create_action(TTR("Edit Polygon")); _action_set_polygon(edited_point.polygon, pre_move_edit, vertices); _commit_action(); @@ -403,7 +418,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) wip_active = true; _wip_changed(); edited_point = PosVertex(-1, 1, cpoint); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); hover_point = Vertex(); selected_point = Vertex(0); edge_point = PosVertex(); @@ -424,12 +439,12 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) _wip_changed(); edited_point = PosVertex(-1, wip.size(), cpoint); selected_point = Vertex(wip.size() - 1); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); return true; } } } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { - _wip_close(); + _wip_cancel(); } } } @@ -453,7 +468,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) _set_polygon(edited_point.polygon, vertices); } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } else if (mode == MODE_EDIT || (_is_line() && mode == MODE_CREATE)) { const PosVertex onEdgeVertex = closest_edge_point(gpoint); @@ -462,20 +477,20 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) hover_point = Vertex(); edge_point = onEdgeVertex; - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } else { if (edge_point.valid()) { edge_point = PosVertex(); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } const PosVertex new_hover_point = closest_point(gpoint); if (hover_point != new_hover_point) { hover_point = new_hover_point; - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } } } @@ -494,7 +509,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) wip.remove(selected_point.vertex); _wip_changed(); selected_point = wip.size() - 1; - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); return true; } } else { @@ -510,6 +525,8 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) } else if (wip_active && k->get_scancode() == KEY_ENTER) { _wip_close(); + } else if (wip_active && k->get_scancode() == KEY_ESCAPE) { + _wip_cancel(); } } @@ -517,6 +534,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) } void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { + if (!_get_node()) return; @@ -617,9 +635,11 @@ void AbstractPolygon2DEditor::edit(Node *p_polygon) { _set_node(p_polygon); - //Enable the pencil tool if the polygon is empty + // Enable the pencil tool if the polygon is empty. if (_is_empty()) _menu_option(MODE_CREATE); + else + _menu_option(MODE_EDIT); wip.clear(); wip_active = false; @@ -627,7 +647,7 @@ void AbstractPolygon2DEditor::edit(Node *p_polygon) { hover_point = Vertex(); selected_point = Vertex(); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } else { @@ -650,12 +670,12 @@ void AbstractPolygon2DEditor::remove_point(const Vertex &p_vertex) { vertices.remove(p_vertex.vertex); - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); + undo_redo->create_action(TTR("Edit Polygon (Remove Point)")); _action_set_polygon(p_vertex.polygon, vertices); _commit_action(); } else { - undo_redo->create_action(TTR("Remove Poly And Point")); + undo_redo->create_action(TTR("Remove Polygon And Point")); _action_remove_polygon(p_vertex.polygon); _commit_action(); } @@ -763,19 +783,19 @@ AbstractPolygon2DEditor::AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wi add_child(button_create); button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); button_create->set_toggle_mode(true); - button_create->set_tooltip(TTR("Create a new polygon from scratch")); + button_create->set_tooltip(TTR("Create points.")); button_edit = memnew(ToolButton); add_child(button_edit); button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); button_edit->set_toggle_mode(true); - button_edit->set_tooltip(TTR("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.")); + button_edit->set_tooltip(TTR("Edit points.\nLMB: Move Point\nRMB: Erase Point")); button_delete = memnew(ToolButton); add_child(button_delete); button_delete->connect("pressed", this, "_menu_option", varray(MODE_DELETE)); button_delete->set_toggle_mode(true); - button_delete->set_tooltip(TTR("Delete points")); + button_delete->set_tooltip(TTR("Erase points.")); create_resource = memnew(ConfirmationDialog); add_child(create_resource); diff --git a/editor/plugins/abstract_polygon_2d_editor.h b/editor/plugins/abstract_polygon_2d_editor.h index 00634ba5b8..046e8540e7 100644 --- a/editor/plugins/abstract_polygon_2d_editor.h +++ b/editor/plugins/abstract_polygon_2d_editor.h @@ -88,12 +88,10 @@ class AbstractPolygon2DEditor : public HBoxContainer { protected: enum { - MODE_CREATE, MODE_EDIT, MODE_DELETE, MODE_CONT, - }; int mode; @@ -103,6 +101,7 @@ protected: virtual void _menu_option(int p_option); void _wip_changed(); void _wip_close(); + void _wip_cancel(); bool _delete_point(const Vector2 &p_gpoint); void _notification(int p_what); @@ -115,13 +114,12 @@ protected: PosVertex closest_edge_point(const Vector2 &p_pos) const; bool _is_empty() const; - void _commit_action(); -protected: virtual Node2D *_get_node() const = 0; virtual void _set_node(Node *p_polygon) = 0; virtual bool _is_line() const; + virtual bool _has_uv() const; virtual int _get_polygon_count() const; virtual Vector2 _get_offset(int p_idx) const; virtual Variant _get_polygon(int p_idx) const; @@ -131,6 +129,7 @@ protected: virtual void _action_remove_polygon(int p_idx); virtual void _action_set_polygon(int p_idx, const Variant &p_polygon); virtual void _action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon); + virtual void _commit_action(); virtual bool _has_resource() const; virtual void _create_resource(); diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp index c4f8cdc3d7..e2fe9a91d8 100644 --- a/editor/plugins/animation_blend_space_2d_editor.cpp +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -434,7 +434,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { if (blend_space->get_snap().x > 0) { - int prev_idx; + int prev_idx = 0; for (int i = 0; i < s.x; i++) { float v = blend_space->get_min_space().x + i * (blend_space->get_max_space().x - blend_space->get_min_space().x) / s.x; @@ -450,7 +450,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { if (blend_space->get_snap().y > 0) { - int prev_idx; + int prev_idx = 0; for (int i = 0; i < s.y; i++) { float v = blend_space->get_max_space().y - i * (blend_space->get_max_space().y - blend_space->get_min_space().y) / s.y; @@ -607,6 +607,8 @@ void AnimationNodeBlendSpace2DEditor::_update_space() { auto_triangles->set_pressed(blend_space->get_auto_triangles()); + interpolation->select(blend_space->get_blend_mode()); + max_x_value->set_value(blend_space->get_max_space().x); max_y_value->set_value(blend_space->get_max_space().y); @@ -636,6 +638,8 @@ void AnimationNodeBlendSpace2DEditor::_config_changed(double) { undo_redo->add_undo_method(blend_space.ptr(), "set_min_space", blend_space->get_min_space()); undo_redo->add_do_method(blend_space.ptr(), "set_snap", Vector2(snap_x->get_value(), snap_y->get_value())); undo_redo->add_undo_method(blend_space.ptr(), "set_snap", blend_space->get_snap()); + undo_redo->add_do_method(blend_space.ptr(), "set_blend_mode", interpolation->get_selected()); + undo_redo->add_undo_method(blend_space.ptr(), "set_blend_mode", blend_space->get_blend_mode()); undo_redo->add_do_method(this, "_update_space"); undo_redo->add_undo_method(this, "_update_space"); undo_redo->commit_action(); @@ -752,6 +756,10 @@ void AnimationNodeBlendSpace2DEditor::_notification(int p_what) { snap->set_icon(get_icon("SnapGrid", "EditorIcons")); open_editor->set_icon(get_icon("Edit", "EditorIcons")); auto_triangles->set_icon(get_icon("AutoTriangle", "EditorIcons")); + interpolation->clear(); + interpolation->add_icon_item(get_icon("TrackContinuous", "EditorIcons"), "", 0); + interpolation->add_icon_item(get_icon("TrackDiscrete", "EditorIcons"), "", 1); + interpolation->add_icon_item(get_icon("TrackCapture", "EditorIcons"), "", 2); } if (p_what == NOTIFICATION_PROCESS) { @@ -914,6 +922,13 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { snap_y->set_step(0.01); snap_y->set_max(1000); + top_hb->add_child(memnew(VSeparator)); + + top_hb->add_child(memnew(Label(TTR("Blend:")))); + interpolation = memnew(OptionButton); + top_hb->add_child(interpolation); + interpolation->connect("item_selected", this, "_config_changed"); + edit_hb = memnew(HBoxContainer); top_hb->add_child(edit_hb); edit_hb->add_child(memnew(VSeparator)); diff --git a/editor/plugins/animation_blend_space_2d_editor.h b/editor/plugins/animation_blend_space_2d_editor.h index 613289e4d8..603fa1cd19 100644 --- a/editor/plugins/animation_blend_space_2d_editor.h +++ b/editor/plugins/animation_blend_space_2d_editor.h @@ -60,6 +60,7 @@ class AnimationNodeBlendSpace2DEditor : public AnimationTreeNodeEditorPlugin { ToolButton *snap; SpinBox *snap_x; SpinBox *snap_y; + OptionButton *interpolation; ToolButton *auto_triangles; diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 205458fb1d..eb3c432ee7 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -692,7 +692,9 @@ void AnimationNodeBlendTreeEditor::_notification(int p_what) { Ref<Animation> anim = player->get_animation(an->get_animation()); if (anim.is_valid()) { E->get()->set_max(anim->get_length()); - E->get()->set_value(an->get_playback_time()); + //StringName path = AnimationTreeEditor::get_singleton()->get_base_path() + E->get().input_node; + StringName time_path = AnimationTreeEditor::get_singleton()->get_base_path() + String(E->key()) + "/time"; + E->get()->set_value(AnimationTreeEditor::get_singleton()->get_tree()->get(time_path)); } } } @@ -833,8 +835,6 @@ void AnimationNodeBlendTreeEditor::edit(const Ref<AnimationNode> &p_node) { if (p_node.is_valid()) { blend_tree = p_node; - } else { - blend_tree.unref(); } if (blend_tree.is_null()) { diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index e83773257b..990c77430f 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -849,7 +849,7 @@ void AnimationNodeStateMachineEditor::_state_machine_pos_draw() { return; int idx = -1; - for (int i = 0; node_rects.size(); i++) { + for (int i = 0; i < node_rects.size(); i++) { if (node_rects[i].node_name == playback->get_current_node()) { idx = i; break; diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 66770d98e5..138b8a491c 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -962,6 +962,9 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int HBoxContainer *hbc = memnew(HBoxContainer); + if (p_page_count < 2) + return hbc; + //do the mario int from = p_page - 5; if (from < 0) diff --git a/editor/plugins/baked_lightmap_editor_plugin.cpp b/editor/plugins/baked_lightmap_editor_plugin.cpp index e65a697857..40e3bb5be2 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.cpp +++ b/editor/plugins/baked_lightmap_editor_plugin.cpp @@ -108,7 +108,7 @@ void BakedLightmapEditorPlugin::_bind_methods() { BakedLightmapEditorPlugin::BakedLightmapEditorPlugin(EditorNode *p_node) { editor = p_node; - bake = memnew(Button); + bake = memnew(ToolButton); bake->set_icon(editor->get_gui_base()->get_icon("Bake", "EditorIcons")); bake->set_text(TTR("Bake Lightmaps")); bake->hide(); diff --git a/editor/plugins/baked_lightmap_editor_plugin.h b/editor/plugins/baked_lightmap_editor_plugin.h index a32b573851..8d3b5b1dd6 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.h +++ b/editor/plugins/baked_lightmap_editor_plugin.h @@ -42,7 +42,7 @@ class BakedLightmapEditorPlugin : public EditorPlugin { BakedLightmap *lightmap; - Button *bake; + ToolButton *bake; EditorNode *editor; static EditorProgress *tmp_progress; diff --git a/editor/plugins/camera_editor_plugin.cpp b/editor/plugins/camera_editor_plugin.cpp index 37fbb54c30..3d8b24ccc7 100644 --- a/editor/plugins/camera_editor_plugin.cpp +++ b/editor/plugins/camera_editor_plugin.cpp @@ -32,18 +32,6 @@ #include "spatial_editor_plugin.h" -void CameraEditor::_notification(int p_what) { - - switch (p_what) { - - /* case NOTIFICATION_PROCESS: { - - if (preview->is_pressed() && node) - node->call("make_current"); - - } break;*/ - } -} void CameraEditor::_node_removed(Node *p_node) { if (p_node == node) { diff --git a/editor/plugins/camera_editor_plugin.h b/editor/plugins/camera_editor_plugin.h index 275624beeb..0340808c9a 100644 --- a/editor/plugins/camera_editor_plugin.h +++ b/editor/plugins/camera_editor_plugin.h @@ -50,7 +50,6 @@ class CameraEditor : public Control { void _pressed(); protected: - void _notification(int p_what); void _node_removed(Node *p_node); static void _bind_methods(); diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index e8f00ce0ba..8d9872236c 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -179,8 +179,21 @@ void CanvasItemEditor::_snap_if_closer_float(float p_value, float p_target_snap, } } -bool CanvasItemEditor::_is_node_editable(const Node *p_node) { - return (!(p_node->has_meta("_edit_lock_") && p_node->get_meta("_edit_lock_")) && !(ClassDB::is_parent_class(p_node->get_parent()->get_class_name(), "Container") && ClassDB::is_parent_class(p_node->get_class_name(), "Control"))); +bool CanvasItemEditor::_is_node_locked(const Node *p_node) { + return p_node->has_meta("_edit_lock_") && p_node->get_meta("_edit_lock_"); +} + +bool CanvasItemEditor::_is_node_movable(const Node *p_node, bool p_popup_warning) { + if (_is_node_locked(p_node)) { + return false; + } + if (Object::cast_to<Control>(p_node) && Object::cast_to<Container>(p_node->get_parent())) { + if (p_popup_warning) { + _popup_warning_temporarily(warning_child_of_container, 3.0); + } + return false; + } + return true; } void CanvasItemEditor::_snap_if_closer_point(Point2 p_value, Point2 p_target_snap, Point2 &r_current_snap, bool (&r_snapped)[2], real_t rotation, float p_radius) { @@ -415,7 +428,7 @@ void CanvasItemEditor::_expand_encompassing_rect_using_children(Rect2 &r_rect, c } } - if (canvas_item && canvas_item->is_visible_in_tree() && (include_locked_nodes || !_is_node_editable(canvas_item))) { + if (canvas_item && canvas_item->is_visible_in_tree() && (include_locked_nodes || !_is_node_locked(canvas_item))) { Transform2D xform = p_parent_xform * p_canvas_xform * canvas_item->get_transform(); Rect2 rect = canvas_item->_edit_get_rect(); if (r_first) { @@ -437,7 +450,7 @@ Rect2 CanvasItemEditor::_get_encompassing_rect(const Node *p_node) { return rect; } -void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, int p_limit, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { +void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { if (!p_node) return; if (Object::cast_to<Viewport>(p_node)) @@ -449,16 +462,14 @@ void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_no for (int i = p_node->get_child_count() - 1; i >= 0; i--) { if (canvas_item) { if (!canvas_item->is_set_as_toplevel()) { - _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, p_limit, p_parent_xform * canvas_item->get_transform(), p_canvas_xform); + _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, p_parent_xform * canvas_item->get_transform(), p_canvas_xform); } else { - _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, p_limit, canvas_item->get_transform(), p_canvas_xform); + _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, canvas_item->get_transform(), p_canvas_xform); } } else { CanvasLayer *cl = Object::cast_to<CanvasLayer>(p_node); - _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, p_limit, Transform2D(), cl ? cl->get_transform() : p_canvas_xform); + _find_canvas_items_at_pos(p_pos, p_node->get_child(i), r_items, Transform2D(), cl ? cl->get_transform() : p_canvas_xform); } - if (p_limit != 0 && r_items.size() >= p_limit) - return; } if (canvas_item && canvas_item->is_visible_in_tree()) { @@ -478,11 +489,11 @@ void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_no return; } -void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, int p_limit) { +void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items) { Node *scene = editor->get_edited_scene(); - _find_canvas_items_at_pos(p_pos, scene, r_items, p_limit); + _find_canvas_items_at_pos(p_pos, scene, r_items); //Remove invalid results for (int i = 0; i < r_items.size(); i++) { @@ -513,7 +524,7 @@ void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_Sel } //Remove the item if invalid - if (!canvas_item || duplicate || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner())) || !_is_node_editable(canvas_item)) { + if (!canvas_item || duplicate || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner())) || _is_node_locked(canvas_item)) { r_items.remove(i); i--; } else { @@ -614,7 +625,7 @@ void CanvasItemEditor::_find_canvas_items_in_rect(const Rect2 &p_rect, Node *p_n bool editable = p_node == scene || p_node->get_owner() == scene || scene->is_editable_instance(p_node->get_owner()); bool lock_children = p_node->has_meta("_edit_group_") && p_node->get_meta("_edit_group_"); - bool locked = !_is_node_editable(p_node); + bool locked = _is_node_locked(p_node); if (!lock_children || !editable) { for (int i = p_node->get_child_count() - 1; i >= 0; i--) { @@ -681,7 +692,7 @@ List<CanvasItem *> CanvasItemEditor::_get_edited_canvas_items(bool retreive_lock List<CanvasItem *> selection; for (Map<Node *, Object *>::Element *E = editor_selection->get_selection().front(); E; E = E->next()) { CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E->key()); - if (canvas_item && canvas_item->is_visible_in_tree() && canvas_item->get_viewport() == EditorNode::get_singleton()->get_scene_root() && (retreive_locked || _is_node_editable(canvas_item))) { + if (canvas_item && canvas_item->is_visible_in_tree() && canvas_item->get_viewport() == EditorNode::get_singleton()->get_scene_root() && (retreive_locked || !_is_node_locked(canvas_item))) { CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); if (se) { selection.push_back(canvas_item); @@ -1025,8 +1036,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { // Scroll or pan down if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { view_offset.y += int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); - _update_scrollbars(); - viewport->update(); + update_viewport(); } else { _zoom_on_position(zoom * (1 - (0.05 * b->get_factor())), b->get_position()); } @@ -1037,8 +1047,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { // Scroll or pan up if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { view_offset.y -= int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); - _update_scrollbars(); - viewport->update(); + update_viewport(); } else { _zoom_on_position(zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95), b->get_position()); } @@ -1049,8 +1058,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { // Pan left if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { view_offset.x -= int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); - _update_scrollbars(); - viewport->update(); + update_viewport(); return true; } } @@ -1059,8 +1067,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { // Pan right if (bool(EditorSettings::get_singleton()->get("editors/2d/scroll_to_pan"))) { view_offset.x += int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom * b->get_factor(); - _update_scrollbars(); - viewport->update(); + update_viewport(); return true; } } @@ -1112,8 +1119,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { } view_offset.x -= relative.x / zoom; view_offset.y -= relative.y / zoom; - _update_scrollbars(); - viewport->update(); + update_viewport(); return true; } } @@ -1131,8 +1137,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event) { const Vector2 delta = (int(EditorSettings::get_singleton()->get("editors/2d/pan_speed")) / zoom) * pan_gesture->get_delta(); view_offset.x += delta.x; view_offset.y += delta.y; - _update_scrollbars(); - viewport->update(); + update_viewport(); return true; } @@ -1293,18 +1298,28 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) { // Start rotation if (drag_type == DRAG_NONE) { if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { - drag_selection = _get_edited_canvas_items(); - if (drag_selection.size() > 0 && ((b->get_control() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE)) { - drag_type = DRAG_ROTATE; - drag_from = transform.affine_inverse().xform(b->get_position()); - CanvasItem *canvas_item = drag_selection[0]; - if (canvas_item->_edit_use_pivot()) { - drag_rotation_center = canvas_item->get_global_transform_with_canvas().xform(canvas_item->_edit_get_pivot()); - } else { - drag_rotation_center = canvas_item->get_global_transform_with_canvas().get_origin(); + if ((b->get_control() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + + // Remove not movable nodes + for (List<CanvasItem *>::Element *E = selection.front(); E; E = E->next()) { + if (!_is_node_movable(E->get(), true)) + selection.erase(E); + } + + drag_selection = selection; + if (drag_selection.size() > 0) { + drag_type = DRAG_ROTATE; + drag_from = transform.affine_inverse().xform(b->get_position()); + CanvasItem *canvas_item = drag_selection[0]; + if (canvas_item->_edit_use_pivot()) { + drag_rotation_center = canvas_item->get_global_transform_with_canvas().xform(canvas_item->_edit_get_pivot()); + } else { + drag_rotation_center = canvas_item->get_global_transform_with_canvas().get_origin(); + } + _save_canvas_item_state(drag_selection); + return true; } - _save_canvas_item_state(drag_selection); - return true; } } } @@ -1367,7 +1382,7 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { List<CanvasItem *> selection = _get_edited_canvas_items(); if (selection.size() == 1) { Control *control = Object::cast_to<Control>(selection[0]); - if (control && !Object::cast_to<Container>(control->get_parent())) { + if (control && _is_node_movable(control)) { Vector2 anchor_pos[4]; anchor_pos[0] = Vector2(control->get_anchor(MARGIN_LEFT), control->get_anchor(MARGIN_TOP)); anchor_pos[1] = Vector2(control->get_anchor(MARGIN_RIGHT), control->get_anchor(MARGIN_TOP)); @@ -1486,7 +1501,7 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) { List<CanvasItem *> selection = _get_edited_canvas_items(); if (selection.size() == 1) { CanvasItem *canvas_item = selection[0]; - if (canvas_item->_edit_use_rect()) { + if (canvas_item->_edit_use_rect() && _is_node_movable(canvas_item)) { Rect2 rect = canvas_item->_edit_get_rect(); Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); @@ -1654,27 +1669,30 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { if (selection.size() == 1) { CanvasItem *canvas_item = selection[0]; - Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); - Transform2D simple_xform = viewport->get_transform() * unscaled_transform; + if (_is_node_movable(canvas_item)) { - drag_type = DRAG_SCALE_BOTH; + Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D simple_xform = viewport->get_transform() * unscaled_transform; - Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE); - Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); - if (x_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) { - drag_type = DRAG_SCALE_X; - } - Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); - if (y_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) { - drag_type = DRAG_SCALE_Y; - } + drag_type = DRAG_SCALE_BOTH; - drag_from = transform.affine_inverse().xform(b->get_position()); - drag_selection = List<CanvasItem *>(); - drag_selection.push_back(canvas_item); - _save_canvas_item_state(drag_selection); - return true; + Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE); + Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); + if (x_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) { + drag_type = DRAG_SCALE_X; + } + Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); + if (y_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) { + drag_type = DRAG_SCALE_Y; + } + + drag_from = transform.affine_inverse().xform(b->get_position()); + drag_selection = List<CanvasItem *>(); + drag_selection.push_back(canvas_item); + _save_canvas_item_state(drag_selection); + return true; + } } } } @@ -1702,13 +1720,7 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { if (drag_type == DRAG_SCALE_BOTH) { Size2 scale_factor = drag_to_local / drag_from_local; if (uniform) { - if (ABS(offset.x) > ABS(offset.y)) { - scale.x *= scale_factor.x; - scale.y = scale.x * ratio; - } else { - scale.y *= scale_factor.y; - scale.x = scale.y / ratio; - } + scale *= (scale_factor.x + scale_factor.y) / 2.0; } else { scale *= scale_factor; } @@ -1759,12 +1771,22 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { if (drag_type == DRAG_NONE) { //Start moving the nodes if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { - List<CanvasItem *> selection = _get_edited_canvas_items(); - if (((b->get_alt() && !b->get_control()) || tool == TOOL_MOVE) && selection.size() > 0) { - drag_type = DRAG_MOVE; - drag_from = transform.affine_inverse().xform(b->get_position()); - drag_selection = selection; - _save_canvas_item_state(drag_selection); + if ((b->get_alt() && !b->get_control()) || tool == TOOL_MOVE) { + List<CanvasItem *> selection = _get_edited_canvas_items(); + + // Remove not movable nodes + for (int i = 0; i < selection.size(); i++) { + if (!_is_node_movable(selection[i], true)) { + selection.erase(selection[i]); + } + } + + if (selection.size() > 0) { + drag_type = DRAG_MOVE; + drag_from = transform.affine_inverse().xform(b->get_position()); + drag_selection = selection; + _save_canvas_item_state(drag_selection); + } return true; } } @@ -2014,7 +2036,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { Vector<_SelectResult> selection; // Retrieve the items - _get_canvas_items_at_pos(click, selection, editor_selection->get_selection().empty() ? 1 : 0); + _get_canvas_items_at_pos(click, selection); // Retrieve the bones _get_bones_at_pos(click, selection); @@ -2042,10 +2064,19 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { // Drag the node(s) if requested List<CanvasItem *> selection = _get_edited_canvas_items(); - drag_type = DRAG_MOVE; - drag_selection = selection; - drag_from = click; - _save_canvas_item_state(drag_selection); + // Remove not movable nodes + for (int i = 0; i < selection.size(); i++) { + if (!_is_node_movable(selection[i], true)) { + selection.erase(selection[i]); + } + } + + if (selection.size() > 0) { + drag_type = DRAG_MOVE; + drag_selection = selection; + drag_from = click; + _save_canvas_item_state(drag_selection); + } } // Select the item return true; @@ -2178,6 +2209,8 @@ void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { //printf("Zoom or pan\n"); } else if ((accepted = _gui_input_select(p_event))) { //printf("Selection\n"); + } else { + //printf("Not accepted\n"); } if (accepted) @@ -2708,12 +2741,12 @@ void CanvasItemEditor::_draw_selection() { // Draw control-related helpers Control *control = Object::cast_to<Control>(canvas_item); - if (control) { + if (control && _is_node_movable(control)) { _draw_control_helpers(control); } // Draw the resize handles - if (tool == TOOL_SELECT && canvas_item->_edit_use_rect()) { + if (tool == TOOL_SELECT && canvas_item->_edit_use_rect() && _is_node_movable(canvas_item)) { Rect2 rect = canvas_item->_edit_get_rect(); Vector2 endpoints[4] = { xform.xform(rect.position), @@ -2741,40 +2774,41 @@ void CanvasItemEditor::_draw_selection() { bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CONTROL); bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT); if ((is_alt && is_ctrl) || tool == TOOL_SCALE || drag_type == DRAG_SCALE_X || drag_type == DRAG_SCALE_Y) { - - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); - Transform2D simple_xform = viewport->get_transform() * unscaled_transform; - - Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE); - bool uniform = Input::get_singleton()->is_key_pressed(KEY_SHIFT); - Point2 offset = (simple_xform.affine_inverse().xform(drag_to) - simple_xform.affine_inverse().xform(drag_from)) * zoom; - - if (drag_type == DRAG_SCALE_X) { - scale_factor.x += offset.x; - if (uniform) { - scale_factor.y += offset.x; - } - } else if (drag_type == DRAG_SCALE_Y) { - scale_factor.y -= offset.y; - if (uniform) { - scale_factor.x -= offset.y; + if (_is_node_movable(canvas_item)) { + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D simple_xform = viewport->get_transform() * unscaled_transform; + + Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE); + bool uniform = Input::get_singleton()->is_key_pressed(KEY_SHIFT); + Point2 offset = (simple_xform.affine_inverse().xform(drag_to) - simple_xform.affine_inverse().xform(drag_from)) * zoom; + + if (drag_type == DRAG_SCALE_X) { + scale_factor.x += offset.x; + if (uniform) { + scale_factor.y += offset.x; + } + } else if (drag_type == DRAG_SCALE_Y) { + scale_factor.y -= offset.y; + if (uniform) { + scale_factor.x -= offset.y; + } } - } - //scale_factor *= zoom; + //scale_factor *= zoom; - viewport->draw_set_transform_matrix(simple_xform); - Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); - Color x_axis_color(1.0, 0.4, 0.4, 0.6); - viewport->draw_rect(x_handle_rect, x_axis_color); - viewport->draw_line(Point2(), Point2(scale_factor.x * EDSCALE, 0), x_axis_color); + viewport->draw_set_transform_matrix(simple_xform); + Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); + Color x_axis_color(1.0, 0.4, 0.4, 0.6); + viewport->draw_rect(x_handle_rect, x_axis_color); + viewport->draw_line(Point2(), Point2(scale_factor.x * EDSCALE, 0), x_axis_color); - Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); - Color y_axis_color(0.4, 1.0, 0.4, 0.6); - viewport->draw_rect(y_handle_rect, y_axis_color); - viewport->draw_line(Point2(), Point2(0, -scale_factor.y * EDSCALE), y_axis_color); + Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); + Color y_axis_color(0.4, 1.0, 0.4, 0.6); + viewport->draw_rect(y_handle_rect, y_axis_color); + viewport->draw_line(Point2(), Point2(0, -scale_factor.y * EDSCALE), y_axis_color); - viewport->draw_set_transform_matrix(viewport->get_transform()); + viewport->draw_set_transform_matrix(viewport->get_transform()); + } } } } @@ -2950,7 +2984,7 @@ void CanvasItemEditor::_draw_invisible_nodes_positions(Node *p_node, const Trans _draw_invisible_nodes_positions(p_node->get_child(i), parent_xform, canvas_xform); } - if (canvas_item && !canvas_item->_edit_use_rect() && (!editor_selection->is_selected(canvas_item) || !_is_node_editable(canvas_item))) { + if (canvas_item && !canvas_item->_edit_use_rect() && (!editor_selection->is_selected(canvas_item) || _is_node_locked(canvas_item))) { Transform2D xform = transform * canvas_xform * parent_xform; // Draw the node's position @@ -3139,6 +3173,8 @@ void CanvasItemEditor::_draw_viewport() { group_button->set_disabled(selection.empty()); ungroup_button->set_visible(all_group); + info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); + _draw_grid(); _draw_selection(); _draw_axis(); @@ -3168,6 +3204,11 @@ void CanvasItemEditor::_draw_viewport() { _draw_hover(); } +void CanvasItemEditor::update_viewport() { + _update_scrollbars(); + viewport->update(); +} + void CanvasItemEditor::_notification(int p_what) { if (p_what == NOTIFICATION_PHYSICS_PROCESS) { @@ -3362,11 +3403,14 @@ void CanvasItemEditor::_notification(int p_what) { void CanvasItemEditor::edit(CanvasItem *p_canvas_item) { - drag_type = DRAG_NONE; + Array selection = editor_selection->get_selected_nodes(); + if (selection.size() != 1 || (Node *)selection[0] != p_canvas_item) { + drag_type = DRAG_NONE; - // Clear the selection - editor_selection->clear(); //_clear_canvas_items(); - editor_selection->add_node(p_canvas_item); + // Clear the selection + editor_selection->clear(); //_clear_canvas_items(); + editor_selection->add_node(p_canvas_item); + } } void CanvasItemEditor::_queue_update_bone_list() { @@ -3498,6 +3542,35 @@ void CanvasItemEditor::_update_scrollbars() { updating_scroll = false; } +void CanvasItemEditor::_popup_warning_depop(Control *p_control) { + ERR_FAIL_COND(!popup_temporarily_timers.has(p_control)); + + Timer *timer = popup_temporarily_timers[p_control]; + p_control->hide(); + remove_child(timer); + popup_temporarily_timers.erase(p_control); + memdelete(timer); + info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); +} + +void CanvasItemEditor::_popup_warning_temporarily(Control *p_control, const float p_duration) { + Timer *timer; + if (!popup_temporarily_timers.has(p_control)) { + timer = memnew(Timer); + timer->connect("timeout", this, "_popup_warning_depop", varray(p_control)); + timer->set_one_shot(true); + add_child(timer); + + popup_temporarily_timers[p_control] = timer; + } else { + timer = popup_temporarily_timers[p_control]; + } + + timer->start(p_duration); + p_control->show(); + info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); +} + void CanvasItemEditor::_update_scroll(float) { if (updating_scroll) @@ -3574,8 +3647,7 @@ void CanvasItemEditor::_zoom_on_position(float p_zoom, Point2 p_position) { view_offset.x = Math::round(view_offset.x + ofs.x); view_offset.y = Math::round(view_offset.y + ofs.y); - _update_scrollbars(); - viewport->update(); + update_viewport(); } void CanvasItemEditor::_button_zoom_minus() { @@ -4172,8 +4244,7 @@ void CanvasItemEditor::_focus_selection(int p_op) { Vector2 offset = viewport->get_size() / 2 - editor->get_scene_root()->get_global_canvas_transform().xform(center); view_offset.x -= offset.x / zoom; view_offset.y -= offset.y / zoom; - _update_scrollbars(); - viewport->update(); + update_viewport(); } else { // VIEW_FRAME_TO_SELECTION @@ -4206,10 +4277,11 @@ void CanvasItemEditor::_bind_methods() { ClassDB::bind_method("_snap_changed", &CanvasItemEditor::_snap_changed); ClassDB::bind_method("_update_bone_list", &CanvasItemEditor::_update_bone_list); ClassDB::bind_method("_tree_changed", &CanvasItemEditor::_tree_changed); - + ClassDB::bind_method("_popup_warning_depop", &CanvasItemEditor::_popup_warning_depop); ClassDB::bind_method(D_METHOD("_selection_result_pressed"), &CanvasItemEditor::_selection_result_pressed); ClassDB::bind_method(D_METHOD("_selection_menu_hide"), &CanvasItemEditor::_selection_menu_hide); ClassDB::bind_method(D_METHOD("set_state"), &CanvasItemEditor::set_state); + ClassDB::bind_method(D_METHOD("update_viewport"), &CanvasItemEditor::update_viewport); ADD_SIGNAL(MethodInfo("item_lock_status_changed")); ADD_SIGNAL(MethodInfo("item_group_status_changed")); @@ -4391,7 +4463,22 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) { viewport->update(); } +void CanvasItemEditor::add_control_to_info_overlay(Control *p_control) { + ERR_FAIL_COND(!p_control); + + p_control->set_h_size_flags(p_control->get_h_size_flags() & ~Control::SIZE_EXPAND_FILL); + info_overlay->add_child(p_control); + info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); +} + +void CanvasItemEditor::remove_control_from_info_overlay(Control *p_control) { + + info_overlay->remove_child(p_control); + info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); +} + void CanvasItemEditor::add_control_to_menu_panel(Control *p_control) { + ERR_FAIL_COND(!p_control); hb->add_child(p_control); } @@ -4417,6 +4504,46 @@ void CanvasItemEditor::focus_selection() { CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { + key_pos = true; + key_rot = true; + key_scale = false; + + show_grid = false; + show_origin = true; + show_viewport = true; + show_helpers = false; + show_rulers = true; + show_guides = true; + show_edit_locks = true; + zoom = 1; + view_offset = Point2(-150 - RULER_WIDTH, -95 - RULER_WIDTH); + previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen + grid_offset = Point2(); + grid_step = Point2(10, 10); + grid_step_multiplier = 0; + snap_rotation_offset = 0; + snap_rotation_step = 15 / (180 / Math_PI); + snap_active = false; + snap_node_parent = true; + snap_node_anchors = true; + snap_node_sides = true; + snap_node_center = true; + snap_other_nodes = true; + snap_grid = true; + snap_guides = true; + snap_rotation = false; + snap_pixel = false; + + skeleton_show_bones = true; + + drag_type = DRAG_NONE; + drag_from = Vector2(); + drag_to = Vector2(); + dragged_guide_pos = Point2(); + dragged_guide_index = -1; + + bone_last_frame = 0; + bone_list_dirty = false; tool = TOOL_SELECT; undo_redo = p_editor->get_undo_redo(); @@ -4460,6 +4587,28 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport->connect("draw", this, "_draw_viewport"); viewport->connect("gui_input", this, "_gui_input_viewport"); + info_overlay = memnew(VBoxContainer); + info_overlay->set_anchors_and_margins_preset(Control::PRESET_BOTTOM_LEFT); + info_overlay->set_margin(MARGIN_LEFT, 10); + info_overlay->set_margin(MARGIN_BOTTOM, -15); + info_overlay->set_v_grow_direction(Control::GROW_DIRECTION_BEGIN); + info_overlay->add_constant_override("separation", 10); + viewport_scrollable->add_child(info_overlay); + + Theme *info_overlay_theme = memnew(Theme); + info_overlay_theme->copy_default_theme(); + info_overlay->set_theme(info_overlay_theme); + + StyleBoxFlat *info_overlay_label_stylebox = memnew(StyleBoxFlat); + info_overlay_label_stylebox->set_bg_color(Color(0.0, 0.0, 0.0, 0.2)); + info_overlay_label_stylebox->set_expand_margin_size_all(4); + info_overlay_theme->set_stylebox("normal", "Label", info_overlay_label_stylebox); + + warning_child_of_container = memnew(Label); + warning_child_of_container->hide(); + warning_child_of_container->set_text(TTR("Warning: Children of a container get their position and size determined only by their parent")); + add_control_to_info_overlay(warning_child_of_container); + h_scroll = memnew(HScrollBar); viewport->add_child(h_scroll); h_scroll->connect("value_changed", this, "_update_scroll"); @@ -4477,19 +4626,19 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); zoom_minus->connect("pressed", this, "_button_zoom_minus"); - zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom out"), KEY_MASK_CMD | KEY_MINUS)); + zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS)); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(ToolButton); zoom_hb->add_child(zoom_reset); zoom_reset->connect("pressed", this, "_button_zoom_reset"); - zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom reset"), KEY_MASK_CMD | KEY_0)); + zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0)); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); zoom_plus->connect("pressed", this, "_button_zoom_plus"); - zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom in"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS + zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS zoom_plus->set_focus_mode(FOCUS_NONE); updating_scroll = false; @@ -4608,6 +4757,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { skeleton_menu = memnew(MenuButton); hb->add_child(skeleton_menu); + skeleton_menu->set_tooltip(TTR("Skeleton Options")); p = skeleton_menu->get_popup(); p->set_hide_on_checkable_item_selection(false); @@ -4716,49 +4866,11 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), KEY_KP_MULTIPLY); divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), KEY_KP_DIVIDE); - key_pos = true; - key_rot = true; - key_scale = false; - - show_grid = false; - show_origin = true; - show_viewport = true; - show_helpers = false; - show_rulers = true; - show_guides = true; - show_edit_locks = true; - zoom = 1; - view_offset = Point2(-150 - RULER_WIDTH, -95 - RULER_WIDTH); - previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen - grid_offset = Point2(); - grid_step = Point2(10, 10); - grid_step_multiplier = 0; - snap_rotation_offset = 0; - snap_rotation_step = 15 / (180 / Math_PI); - snap_active = false; - snap_node_parent = true; - snap_node_anchors = true; - snap_node_sides = true; - snap_node_center = true; - snap_other_nodes = true; - snap_grid = true; - snap_guides = true; - snap_rotation = false; - snap_pixel = false; - skeleton_show_bones = true; skeleton_menu->get_popup()->set_item_checked(skeleton_menu->get_popup()->get_item_index(SKELETON_SHOW_BONES), true); singleton = this; set_process_unhandled_key_input(true); - drag_type = DRAG_NONE; - drag_from = Vector2(); - drag_to = Vector2(); - dragged_guide_pos = Point2(); - dragged_guide_index = -1; - - bone_last_frame = 0; - // Update the menus' checkboxes call_deferred("set_state", get_state()); } @@ -4958,19 +5070,13 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String & editor_data->get_undo_redo().add_do_property(child, "polygon", list); } - // locate at preview position - Point2 pos = Point2(0, 0); - if (parent && parent->has_method("get_global_position")) { - pos = parent->call("get_global_position"); - } - Transform2D trans = canvas->get_canvas_transform(); - Point2 target_position = (p_point - trans.get_origin()) / trans.get_scale().x - pos; - if (default_type == "Polygon2D" || default_type == "TouchScreenButton" || default_type == "TextureRect" || default_type == "NinePatchRect") { - target_position -= texture_size / 2; - } + // Compute the global position + Transform2D xform = canvas_item_editor->get_canvas_transform(); + Point2 target_position = xform.affine_inverse().xform(p_point); + // there's nothing to be used as source position so snapping will work as absolute if enabled - target_position = canvas->snap_point(target_position); - editor_data->get_undo_redo().add_do_method(child, "set_position", target_position); + target_position = canvas_item_editor->snap_point(target_position); + editor_data->get_undo_redo().add_do_method(child, "set_global_position", target_position); } bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, const Point2 &p_point) { @@ -5005,8 +5111,8 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons CanvasItem *parent_ci = Object::cast_to<CanvasItem>(parent); if (parent_ci) { - Vector2 target_pos = canvas->get_canvas_transform().affine_inverse().xform(p_point); - target_pos = canvas->snap_point(target_pos); + Vector2 target_pos = canvas_item_editor->get_canvas_transform().affine_inverse().xform(p_point); + target_pos = canvas_item_editor->snap_point(target_pos); target_pos = parent_ci->get_global_transform_with_canvas().affine_inverse().xform(target_pos); editor_data->get_undo_redo().add_do_method(instanced_scene, "set_position", target_pos); } @@ -5113,7 +5219,7 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian type == "AtlasTexture" || type == "LargeTexture") { Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(*res)); - if (texture.is_valid() == false) { + if (!texture.is_valid()) { continue; } } else { @@ -5126,7 +5232,7 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian if (!preview_node->get_parent()) { // create preview only once _create_preview(files); } - Transform2D trans = canvas->get_canvas_transform(); + Transform2D trans = canvas_item_editor->get_canvas_transform(); preview_node->set_position((p_point - trans.get_origin()) / trans.get_scale().x); label->set_text(vformat(TTR("Adding %s..."), default_type)); } @@ -5221,7 +5327,7 @@ void CanvasItemEditorViewport::_bind_methods() { ClassDB::bind_method(D_METHOD("_on_mouse_exit"), &CanvasItemEditorViewport::_on_mouse_exit); } -CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasItemEditor *p_canvas) { +CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasItemEditor *p_canvas_item_editor) { default_type = "Sprite"; // Node2D types.push_back("Sprite"); @@ -5236,7 +5342,7 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte target_node = NULL; editor = p_node; editor_data = editor->get_scene_tree_dock()->get_editor_data(); - canvas = p_canvas; + canvas_item_editor = p_canvas_item_editor; preview_node = memnew(Node2D); accept = memnew(AcceptDialog); diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index 6a788692d7..207e57dbe2 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -64,7 +64,10 @@ public: Dictionary undo_state; - CanvasItemEditorSelectedItem() { prev_rot = 0; } + CanvasItemEditorSelectedItem() : + prev_anchors() { + prev_rot = 0; + } }; class CanvasItemEditor : public VBoxContainer { @@ -220,6 +223,11 @@ private: ToolButton *zoom_reset; ToolButton *zoom_plus; + Map<Control *, Timer *> popup_temporarily_timers; + + Label *warning_child_of_container; + VBoxContainer *info_overlay; + Transform2D transform; bool show_grid; bool show_rulers; @@ -280,6 +288,10 @@ private: Transform2D xform; float length; uint64_t last_pass; + + BoneList() : + length(0.f), + last_pass(0) {} }; uint64_t bone_last_frame; @@ -365,9 +377,10 @@ private: Ref<ShortCut> multiply_grid_step_shortcut; Ref<ShortCut> divide_grid_step_shortcut; - bool _is_node_editable(const Node *p_node); - void _find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, int p_limit = 0, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); - void _get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, int p_limit = 0); + bool _is_node_locked(const Node *p_node); + bool _is_node_movable(const Node *p_node, bool p_popup_warning = false); + void _find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); + void _get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items); void _get_bones_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items); void _find_canvas_items_in_rect(const Rect2 &p_rect, Node *p_node, List<CanvasItem *> *r_items, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); @@ -473,6 +486,9 @@ private: void _update_bone_list(); void _tree_changed(Node *); + void _popup_warning_temporarily(Control *p_control, const float p_duration); + void _popup_warning_depop(Control *p_control); + friend class CanvasItemEditorPlugin; protected: @@ -538,11 +554,16 @@ public: void add_control_to_menu_panel(Control *p_control); void remove_control_from_menu_panel(Control *p_control); + void add_control_to_info_overlay(Control *p_control); + void remove_control_from_info_overlay(Control *p_control); + HSplitContainer *get_palette_split(); VSplitContainer *get_bottom_split(); Control *get_viewport_control() { return viewport; } + void update_viewport(); + Tool get_current_tool() { return tool; } void set_undo_redo(UndoRedo *p_undo_redo) { undo_redo = p_undo_redo; } @@ -587,7 +608,7 @@ class CanvasItemEditorViewport : public Control { EditorNode *editor; EditorData *editor_data; - CanvasItemEditor *canvas; + CanvasItemEditor *canvas_item_editor; Node2D *preview_node; AcceptDialog *accept; WindowDialog *selector; @@ -621,7 +642,7 @@ public: virtual bool can_drop_data(const Point2 &p_point, const Variant &p_data) const; virtual void drop_data(const Point2 &p_point, const Variant &p_data); - CanvasItemEditorViewport(EditorNode *p_node, CanvasItemEditor *p_canvas); + CanvasItemEditorViewport(EditorNode *p_node, CanvasItemEditor *p_canvas_item_editor); ~CanvasItemEditorViewport(); }; diff --git a/editor/plugins/collision_polygon_editor_plugin.cpp b/editor/plugins/collision_polygon_editor_plugin.cpp index 805a7d3835..e92a91db7c 100644 --- a/editor/plugins/collision_polygon_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_editor_plugin.cpp @@ -95,7 +95,7 @@ void Polygon3DEditor::_menu_option(int p_option) { void Polygon3DEditor::_wip_close() { - undo_redo->create_action(TTR("Create Poly3D")); + undo_redo->create_action(TTR("Create Polygon3D")); undo_redo->add_undo_method(node, "set_polygon", node->call("get_polygon")); undo_redo->add_do_method(node, "set_polygon", wip); undo_redo->add_do_method(this, "_polygon_draw"); diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp index d1a94f5b49..313ba1ee6b 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.cpp +++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp @@ -129,7 +129,7 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { capsule->set_height(parameter * 2 - capsule->get_radius() * 2); } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } } break; @@ -138,7 +138,7 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { Ref<CircleShape2D> circle = node->get_shape(); circle->set_radius(p_point.length()); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } break; @@ -160,7 +160,7 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { line->set_normal(p_point.normalized()); } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } } break; @@ -170,7 +170,7 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { ray->set_length(Math::abs(p_point.y)); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } break; @@ -183,7 +183,7 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { rect->set_extents(extents.abs()); - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } } break; @@ -198,16 +198,16 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) { seg->set_b(p_point); } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } } break; } + node->get_shape()->_change_notify(); } void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { - Control *c = canvas_item_editor->get_viewport_control(); undo_redo->create_action(TTR("Set Handle")); switch (shape_type) { @@ -216,14 +216,14 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { if (idx == 0) { undo_redo->add_do_method(capsule.ptr(), "set_radius", capsule->get_radius()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(capsule.ptr(), "set_radius", p_org); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); } else if (idx == 1) { undo_redo->add_do_method(capsule.ptr(), "set_height", capsule->get_height()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(capsule.ptr(), "set_height", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } } break; @@ -232,9 +232,9 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { Ref<CircleShape2D> circle = node->get_shape(); undo_redo->add_do_method(circle.ptr(), "set_radius", circle->get_radius()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(circle.ptr(), "set_radius", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } break; @@ -251,14 +251,14 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { if (idx == 0) { undo_redo->add_do_method(line.ptr(), "set_d", line->get_d()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(line.ptr(), "set_d", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } else { undo_redo->add_do_method(line.ptr(), "set_normal", line->get_normal()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(line.ptr(), "set_normal", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } } break; @@ -267,9 +267,9 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { Ref<RayShape2D> ray = node->get_shape(); undo_redo->add_do_method(ray.ptr(), "set_length", ray->get_length()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(ray.ptr(), "set_length", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } break; @@ -277,9 +277,9 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { Ref<RectangleShape2D> rect = node->get_shape(); undo_redo->add_do_method(rect.ptr(), "set_extents", rect->get_extents()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(rect.ptr(), "set_extents", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } break; @@ -287,14 +287,14 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) { Ref<SegmentShape2D> seg = node->get_shape(); if (idx == 0) { undo_redo->add_do_method(seg.ptr(), "set_a", seg->get_a()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(seg.ptr(), "set_a", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } else if (idx == 1) { undo_redo->add_do_method(seg.ptr(), "set_b", seg->get_b()); - undo_redo->add_do_method(c, "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); undo_redo->add_undo_method(seg.ptr(), "set_b", p_org); - undo_redo->add_undo_method(c, "update"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); } } break; @@ -411,7 +411,7 @@ void CollisionShape2DEditor::_get_current_shape_type() { shape_type = -1; } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { @@ -538,7 +538,7 @@ void CollisionShape2DEditor::edit(Node *p_node) { node = NULL; } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } void CollisionShape2DEditor::_bind_methods() { diff --git a/editor/plugins/gi_probe_editor_plugin.cpp b/editor/plugins/gi_probe_editor_plugin.cpp index 06da64b181..5fc5cad1ef 100644 --- a/editor/plugins/gi_probe_editor_plugin.cpp +++ b/editor/plugins/gi_probe_editor_plugin.cpp @@ -90,7 +90,7 @@ void GIProbeEditorPlugin::_bind_methods() { GIProbeEditorPlugin::GIProbeEditorPlugin(EditorNode *p_node) { editor = p_node; - bake = memnew(Button); + bake = memnew(ToolButton); bake->set_icon(editor->get_gui_base()->get_icon("Bake", "EditorIcons")); bake->set_text(TTR("Bake GI Probe")); bake->hide(); diff --git a/editor/plugins/gi_probe_editor_plugin.h b/editor/plugins/gi_probe_editor_plugin.h index 017e9bd743..1b3b63f227 100644 --- a/editor/plugins/gi_probe_editor_plugin.h +++ b/editor/plugins/gi_probe_editor_plugin.h @@ -42,7 +42,7 @@ class GIProbeEditorPlugin : public EditorPlugin { GIProbe *gi_probe; - Button *bake; + ToolButton *bake; EditorNode *editor; static EditorProgress *tmp_progress; diff --git a/editor/plugins/item_list_editor_plugin.cpp b/editor/plugins/item_list_editor_plugin.cpp index 186e66f980..a32f42cc56 100644 --- a/editor/plugins/item_list_editor_plugin.cpp +++ b/editor/plugins/item_list_editor_plugin.cpp @@ -265,6 +265,9 @@ void ItemListEditor::_notification(int p_notification) { add_button->set_icon(get_icon("Add", "EditorIcons")); del_button->set_icon(get_icon("Remove", "EditorIcons")); + } else if (p_notification == NOTIFICATION_READY) { + + get_tree()->connect("node_removed", this, "_node_removed"); } } @@ -341,6 +344,7 @@ bool ItemListEditor::handles(Object *p_object) const { void ItemListEditor::_bind_methods() { + ClassDB::bind_method("_node_removed", &ItemListEditor::_node_removed); ClassDB::bind_method("_edit_items", &ItemListEditor::_edit_items); ClassDB::bind_method("_add_button", &ItemListEditor::_add_pressed); ClassDB::bind_method("_delete_button", &ItemListEditor::_delete_pressed); @@ -350,8 +354,6 @@ ItemListEditor::ItemListEditor() { selected_idx = -1; - add_child(memnew(VSeparator)); - toolbar_button = memnew(ToolButton); toolbar_button->set_text(TTR("Items")); add_child(toolbar_button); diff --git a/editor/plugins/light_occluder_2d_editor_plugin.cpp b/editor/plugins/light_occluder_2d_editor_plugin.cpp index 2f2e1dae81..646883fbda 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.cpp +++ b/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -30,425 +30,91 @@ #include "light_occluder_2d_editor_plugin.h" -#include "canvas_item_editor_plugin.h" -#include "core/os/file_access.h" -#include "editor/editor_settings.h" +Ref<OccluderPolygon2D> LightOccluder2DEditor::_ensure_occluder() const { -void LightOccluder2DEditor::_notification(int p_what) { + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (!occluder.is_valid()) { - switch (p_what) { - - case NOTIFICATION_READY: { - - button_create->set_icon(get_icon("Edit", "EditorIcons")); - button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); - button_edit->set_pressed(true); - get_tree()->connect("node_removed", this, "_node_removed"); - create_poly->connect("confirmed", this, "_create_poly"); - - } break; - case NOTIFICATION_PHYSICS_PROCESS: { - - } break; - } -} -void LightOccluder2DEditor::_node_removed(Node *p_node) { - - if (p_node == node) { - node = NULL; - hide(); - canvas_item_editor->get_viewport_control()->update(); + occluder = Ref<OccluderPolygon2D>(memnew(OccluderPolygon2D)); + node->set_occluder_polygon(occluder); } + return occluder; } -void LightOccluder2DEditor::_menu_option(int p_option) { +Node2D *LightOccluder2DEditor::_get_node() const { - switch (p_option) { - - case MODE_CREATE: { - - mode = MODE_CREATE; - button_create->set_pressed(true); - button_edit->set_pressed(false); - } break; - case MODE_EDIT: { - - mode = MODE_EDIT; - button_create->set_pressed(false); - button_edit->set_pressed(true); - } break; - } + return node; } -void LightOccluder2DEditor::_wip_close(bool p_closed) { - - undo_redo->create_action(TTR("Create Poly")); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", node->get_occluder_polygon()->get_polygon()); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", wip); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_closed", node->get_occluder_polygon()->is_closed()); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_closed", p_closed); +void LightOccluder2DEditor::_set_node(Node *p_polygon) { - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - wip.clear(); - wip_active = false; - mode = MODE_EDIT; - button_edit->set_pressed(true); - button_create->set_pressed(false); - edited_point = -1; + node = Object::cast_to<LightOccluder2D>(p_polygon); } -bool LightOccluder2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { +bool LightOccluder2DEditor::_is_line() const { - if (!node) + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (occluder.is_valid()) + return !occluder->is_closed(); + else return false; - - if (node->get_occluder_polygon().is_null()) { - Ref<InputEventMouseButton> mb = p_event; - if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { - create_poly->set_text(TTR("No OccluderPolygon2D resource on this node.\nCreate and assign one?")); - create_poly->popup_centered_minsize(); - } - return (mb.is_valid() && mb->get_button_index() == 1); - } - - Ref<InputEventMouseButton> mb = p_event; - - if (mb.is_valid()) { - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - - Vector2 gpoint = mb->get_position(); - Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); - - Vector<Vector2> poly = Variant(node->get_occluder_polygon()->get_polygon()); - - //first check if a point is to be added (segment split) - real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - - switch (mode) { - - case MODE_CREATE: { - - if (mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { - - if (!wip_active) { - - wip.clear(); - wip.push_back(cpoint); - wip_active = true; - edited_point_pos = cpoint; - canvas_item_editor->get_viewport_control()->update(); - edited_point = 1; - return true; - } else { - - if (wip.size() > 1 && xform.xform(wip[0]).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(true); - - return true; - } else if (wip.size() > 1 && xform.xform(wip[wip.size() - 1]).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(false); - return true; - - } else { - - wip.push_back(cpoint); - edited_point = wip.size(); - canvas_item_editor->get_viewport_control()->update(); - return true; - - //add wip point - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { - _wip_close(true); - } - - } break; - - case MODE_EDIT: { - - if (mb->get_button_index() == BUTTON_LEFT) { - if (mb->is_pressed()) { - - if (mb->get_control()) { - - if (poly.size() < 3) { - - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - poly.push_back(cpoint); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - return true; - } - - //search edges - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 points[2] = { xform.xform(poly[i]), - xform.xform(poly[(i + 1) % poly.size()]) }; - - Vector2 cp = Geometry::get_closest_point_to_segment_2d(gpoint, points); - if (cp.distance_squared_to(points[0]) < CMP_EPSILON2 || cp.distance_squared_to(points[1]) < CMP_EPSILON2) - continue; //not valid to reuse point - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - poly.insert(closest_idx + 1, xform.affine_inverse().xform(closest_pos)); - edited_point = closest_idx + 1; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - node->get_occluder_polygon()->set_polygon(Variant(poly)); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } else { - - //look for points to move - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - edited_point = closest_idx; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - canvas_item_editor->get_viewport_control()->update(); - return true; - } - } - } else { - - if (edited_point != -1) { - - //apply - - ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly.write[edited_point] = edited_point_pos; - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", pre_move_edit); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - - edited_point = -1; - return true; - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) { - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - poly.remove(closest_idx); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->commit_action(); - return true; - } - } - - } break; - } - } - - Ref<InputEventMouseMotion> mm = p_event; - - if (mm.is_valid()) { - - if (edited_point != -1 && (wip_active || mm->get_button_mask() & BUTTON_MASK_LEFT)) { - - Vector2 gpoint = mm->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - edited_point_pos = node->get_global_transform().affine_inverse().xform(cpoint); - - canvas_item_editor->get_viewport_control()->update(); - } - } - - return false; } -void LightOccluder2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { - - if (!node || !node->get_occluder_polygon().is_valid()) - return; - - Vector<Vector2> poly; +int LightOccluder2DEditor::_get_polygon_count() const { - if (wip_active) - poly = wip; + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (occluder.is_valid()) + return occluder->get_polygon().size(); else - poly = Variant(node->get_occluder_polygon()->get_polygon()); - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); - - for (int i = 0; i < poly.size(); i++) { - - Vector2 p, p2; - p = i == edited_point ? edited_point_pos : poly[i]; - if ((wip_active && i == poly.size() - 1) || (((i + 1) % poly.size()) == edited_point)) - p2 = edited_point_pos; - else - p2 = poly[(i + 1) % poly.size()]; + return 0; +} - Vector2 point = xform.xform(p); - Vector2 next_point = xform.xform(p2); +Variant LightOccluder2DEditor::_get_polygon(int p_idx) const { - Color col = Color(1, 0.3, 0.1, 0.8); + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (occluder.is_valid()) + return occluder->get_polygon(); + else + return Variant(Vector<Vector2>()); +} - if (i == poly.size() - 1 && (!node->get_occluder_polygon()->is_closed() || wip_active)) { +void LightOccluder2DEditor::_set_polygon(int p_idx, const Variant &p_polygon) const { - } else { - p_overlay->draw_line(point, next_point, col, 2); - } - p_overlay->draw_texture(handle, point - handle->get_size() * 0.5); - } + Ref<OccluderPolygon2D> occluder = _ensure_occluder(); + occluder->set_polygon(p_polygon); } -void LightOccluder2DEditor::edit(Node *p_collision_polygon) { +void LightOccluder2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) { - if (!canvas_item_editor) { - canvas_item_editor = CanvasItemEditor::get_singleton(); - } + Ref<OccluderPolygon2D> occluder = _ensure_occluder(); + undo_redo->add_do_method(occluder.ptr(), "set_polygon", p_polygon); + undo_redo->add_undo_method(occluder.ptr(), "set_polygon", p_previous); +} - if (p_collision_polygon) { +bool LightOccluder2DEditor::_has_resource() const { - node = Object::cast_to<LightOccluder2D>(p_collision_polygon); - wip.clear(); - wip_active = false; - edited_point = -1; - canvas_item_editor->get_viewport_control()->update(); - } else { - node = NULL; - } + return node && node->get_occluder_polygon().is_valid(); } -void LightOccluder2DEditor::_create_poly() { +void LightOccluder2DEditor::_create_resource() { if (!node) return; + undo_redo->create_action(TTR("Create Occluder Polygon")); undo_redo->add_do_method(node, "set_occluder_polygon", Ref<OccluderPolygon2D>(memnew(OccluderPolygon2D))); undo_redo->add_undo_method(node, "set_occluder_polygon", Variant(REF())); undo_redo->commit_action(); -} - -void LightOccluder2DEditor::_bind_methods() { - ClassDB::bind_method(D_METHOD("_menu_option"), &LightOccluder2DEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_node_removed"), &LightOccluder2DEditor::_node_removed); - ClassDB::bind_method(D_METHOD("_create_poly"), &LightOccluder2DEditor::_create_poly); + _menu_option(MODE_CREATE); } -LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) { +LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) : + AbstractPolygon2DEditor(p_editor) { node = NULL; - canvas_item_editor = NULL; - editor = p_editor; - undo_redo = editor->get_undo_redo(); - - add_child(memnew(VSeparator)); - button_create = memnew(ToolButton); - add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); - button_create->set_toggle_mode(true); - button_create->set_tooltip(TTR("Create a new polygon from scratch.")); - - button_edit = memnew(ToolButton); - add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); - button_edit->set_toggle_mode(true); - button_edit->set_tooltip(TTR("Edit existing polygon:") + "\n" + TTR("LMB: Move Point.") + "\n" + TTR("Ctrl+LMB: Split Segment.") + "\n" + TTR("RMB: Erase Point.")); - - create_poly = memnew(ConfirmationDialog); - add_child(create_poly); - create_poly->get_ok()->set_text(TTR("Create")); - - mode = MODE_EDIT; - wip_active = false; -} - -void LightOccluder2DEditorPlugin::edit(Object *p_object) { - - light_occluder_editor->edit(Object::cast_to<Node>(p_object)); -} - -bool LightOccluder2DEditorPlugin::handles(Object *p_object) const { - - return p_object->is_class("LightOccluder2D"); -} - -void LightOccluder2DEditorPlugin::make_visible(bool p_visible) { - - if (p_visible) { - light_occluder_editor->show(); - } else { - - light_occluder_editor->hide(); - light_occluder_editor->edit(NULL); - } -} - -LightOccluder2DEditorPlugin::LightOccluder2DEditorPlugin(EditorNode *p_node) { - - editor = p_node; - light_occluder_editor = memnew(LightOccluder2DEditor(p_node)); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(light_occluder_editor); - - light_occluder_editor->hide(); } -LightOccluder2DEditorPlugin::~LightOccluder2DEditorPlugin() { +LightOccluder2DEditorPlugin::LightOccluder2DEditorPlugin(EditorNode *p_node) : + AbstractPolygon2DEditorPlugin(p_node, memnew(LightOccluder2DEditor(p_node)), "LightOccluder2D") { } diff --git a/editor/plugins/light_occluder_2d_editor_plugin.h b/editor/plugins/light_occluder_2d_editor_plugin.h index a1962892ee..6117d50e89 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.h +++ b/editor/plugins/light_occluder_2d_editor_plugin.h @@ -31,83 +31,44 @@ #ifndef LIGHT_OCCLUDER_2D_EDITOR_PLUGIN_H #define LIGHT_OCCLUDER_2D_EDITOR_PLUGIN_H -#include "editor/editor_node.h" -#include "editor/editor_plugin.h" +#include "editor/plugins/abstract_polygon_2d_editor.h" #include "scene/2d/light_occluder_2d.h" -#include "scene/gui/tool_button.h" /** @author Juan Linietsky <reduzio@gmail.com> */ -class CanvasItemEditor; +class LightOccluder2DEditor : public AbstractPolygon2DEditor { -class LightOccluder2DEditor : public HBoxContainer { + GDCLASS(LightOccluder2DEditor, AbstractPolygon2DEditor); - GDCLASS(LightOccluder2DEditor, HBoxContainer); - - UndoRedo *undo_redo; - enum Mode { - - MODE_CREATE, - MODE_EDIT, - - }; - - Mode mode; - - ToolButton *button_create; - ToolButton *button_edit; - - CanvasItemEditor *canvas_item_editor; - EditorNode *editor; - Panel *panel; LightOccluder2D *node; - MenuButton *options; - int edited_point; - Vector2 edited_point_pos; - Vector<Vector2> pre_move_edit; - Vector<Vector2> wip; - bool wip_active; + Ref<OccluderPolygon2D> _ensure_occluder() const; - ConfirmationDialog *create_poly; +protected: + virtual Node2D *_get_node() const; + virtual void _set_node(Node *p_polygon); - void _wip_close(bool p_closed); - void _menu_option(int p_option); - void _create_poly(); + virtual bool _is_line() const; + virtual int _get_polygon_count() const; + virtual Variant _get_polygon(int p_idx) const; + virtual void _set_polygon(int p_idx, const Variant &p_polygon) const; -protected: - void _notification(int p_what); - void _node_removed(Node *p_node); - static void _bind_methods(); + virtual void _action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon); + + virtual bool _has_resource() const; + virtual void _create_resource(); public: - Vector2 snap_point(const Vector2 &p_point) const; - void forward_canvas_draw_over_viewport(Control *p_overlay); - bool forward_gui_input(const Ref<InputEvent> &p_event); - void edit(Node *p_collision_polygon); LightOccluder2DEditor(EditorNode *p_editor); }; -class LightOccluder2DEditorPlugin : public EditorPlugin { +class LightOccluder2DEditorPlugin : public AbstractPolygon2DEditorPlugin { - GDCLASS(LightOccluder2DEditorPlugin, EditorPlugin); - - LightOccluder2DEditor *light_occluder_editor; - EditorNode *editor; + GDCLASS(LightOccluder2DEditorPlugin, AbstractPolygon2DEditorPlugin); public: - virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return light_occluder_editor->forward_gui_input(p_event); } - virtual void forward_canvas_draw_over_viewport(Control *p_overlay) { return light_occluder_editor->forward_canvas_draw_over_viewport(p_overlay); } - - virtual String get_name() const { return "LightOccluder2D"; } - bool has_main_screen() const { return false; } - virtual void edit(Object *p_object); - virtual bool handles(Object *p_object) const; - virtual void make_visible(bool p_visible); - LightOccluder2DEditorPlugin(EditorNode *p_node); - ~LightOccluder2DEditorPlugin(); }; #endif // LIGHT_OCCLUDER_2D_EDITOR_PLUGIN_H diff --git a/editor/plugins/particles_2d_editor_plugin.cpp b/editor/plugins/particles_2d_editor_plugin.cpp index 5dcbca2ed6..ab94258c44 100644 --- a/editor/plugins/particles_2d_editor_plugin.cpp +++ b/editor/plugins/particles_2d_editor_plugin.cpp @@ -32,6 +32,7 @@ #include "canvas_item_editor_plugin.h" #include "core/io/image_loader.h" +#include "scene/2d/cpu_particles_2d.h" #include "scene/gui/separator.h" #include "scene/resources/particles_material.h" @@ -82,6 +83,25 @@ void Particles2DEditorPlugin::_menu_callback(int p_idx) { emission_mask->popup_centered_minsize(); } break; + case MENU_OPTION_CONVERT_TO_CPU_PARTICLES: { + + UndoRedo *undo_redo = EditorNode::get_singleton()->get_undo_redo(); + + CPUParticles2D *cpu_particles = memnew(CPUParticles2D); + cpu_particles->convert_from_particles(particles); + cpu_particles->set_name(particles->get_name()); + cpu_particles->set_transform(particles->get_transform()); + cpu_particles->set_visible(particles->is_visible()); + cpu_particles->set_pause_mode(particles->get_pause_mode()); + + undo_redo->create_action("Replace Particles by CPUParticles"); + undo_redo->add_do_method(particles, "replace_by", cpu_particles); + undo_redo->add_undo_method(cpu_particles, "replace_by", particles); + undo_redo->add_do_reference(cpu_particles); + undo_redo->add_undo_reference(particles); + undo_redo->commit_action(); + + } break; } } @@ -355,6 +375,8 @@ Particles2DEditorPlugin::Particles2DEditorPlugin(EditorNode *p_node) { menu->get_popup()->add_separator(); menu->get_popup()->add_item(TTR("Load Emission Mask"), MENU_LOAD_EMISSION_MASK); // menu->get_popup()->add_item(TTR("Clear Emission Mask"), MENU_CLEAR_EMISSION_MASK); + menu->get_popup()->add_separator(); + menu->get_popup()->add_item(TTR("Convert to CPUParticles"), MENU_OPTION_CONVERT_TO_CPU_PARTICLES); menu->set_text(TTR("Particles")); toolbar->add_child(menu); diff --git a/editor/plugins/particles_2d_editor_plugin.h b/editor/plugins/particles_2d_editor_plugin.h index 71ca8ef499..eaa96d84e9 100644 --- a/editor/plugins/particles_2d_editor_plugin.h +++ b/editor/plugins/particles_2d_editor_plugin.h @@ -46,7 +46,8 @@ class Particles2DEditorPlugin : public EditorPlugin { MENU_GENERATE_VISIBILITY_RECT, MENU_LOAD_EMISSION_MASK, - MENU_CLEAR_EMISSION_MASK + MENU_CLEAR_EMISSION_MASK, + MENU_OPTION_CONVERT_TO_CPU_PARTICLES }; enum EmissionMode { diff --git a/editor/plugins/particles_editor_plugin.cpp b/editor/plugins/particles_editor_plugin.cpp index 6b41946918..f2dfae7a9f 100644 --- a/editor/plugins/particles_editor_plugin.cpp +++ b/editor/plugins/particles_editor_plugin.cpp @@ -453,6 +453,7 @@ void ParticlesEditor::_bind_methods() { ParticlesEditor::ParticlesEditor() { + node = NULL; particles_editor_hb = memnew(HBoxContainer); SpatialEditor::get_singleton()->add_control_to_menu_panel(particles_editor_hb); options = memnew(MenuButton); diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp index 88b3194490..c67c96798a 100644 --- a/editor/plugins/path_2d_editor_plugin.cpp +++ b/editor/plugins/path_2d_editor_plugin.cpp @@ -130,8 +130,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->create_action(TTR("Remove Point from Curve")); undo_redo->add_do_method(curve.ptr(), "remove_point", i); undo_redo->add_undo_method(curve.ptr(), "add_point", curve->get_point_position(i), curve->get_point_in(i), curve->get_point_out(i), i); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); return true; } else if (dist_to_p_out < grab_threshold) { @@ -139,8 +139,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->create_action(TTR("Remove Out-Control from Curve")); undo_redo->add_do_method(curve.ptr(), "set_point_out", i, Vector2()); undo_redo->add_undo_method(curve.ptr(), "set_point_out", i, curve->get_point_out(i)); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); return true; } else if (dist_to_p_in < grab_threshold) { @@ -148,8 +148,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->create_action(TTR("Remove In-Control from Curve")); undo_redo->add_do_method(curve.ptr(), "set_point_in", i, Vector2()); undo_redo->add_undo_method(curve.ptr(), "set_point_in", i, curve->get_point_in(i)); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); return true; } @@ -165,8 +165,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->create_action(TTR("Add Point to Curve")); undo_redo->add_do_method(curve.ptr(), "add_point", cpoint); undo_redo->add_undo_method(curve.ptr(), "remove_point", curve->get_point_count()); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); action = ACTION_MOVING_POINT; @@ -174,7 +174,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { moving_from = curve->get_point_position(action_point); moving_screen_from = gpoint; - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); return true; } @@ -196,8 +196,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->create_action(TTR("Move Point in Curve")); undo_redo->add_do_method(curve.ptr(), "set_point_position", action_point, cpoint); undo_redo->add_undo_method(curve.ptr(), "set_point_position", action_point, moving_from); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); } break; @@ -212,8 +212,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->add_do_method(curve.ptr(), "set_point_out", action_point, mirror_handle_length ? -new_pos : (-new_pos.normalized() * orig_out_length)); undo_redo->add_undo_method(curve.ptr(), "set_point_out", action_point, mirror_handle_length ? -moving_from : (-moving_from.normalized() * orig_out_length)); } - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); } break; @@ -228,8 +228,8 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { undo_redo->add_do_method(curve.ptr(), "set_point_in", action_point, mirror_handle_length ? -new_pos : (-new_pos.normalized() * orig_in_length)); undo_redo->add_undo_method(curve.ptr(), "set_point_in", action_point, mirror_handle_length ? -moving_from : (-moving_from.normalized() * orig_in_length)); } - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); } break; @@ -280,7 +280,7 @@ bool Path2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } break; } - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); return true; } } @@ -331,7 +331,7 @@ void Path2DEditor::_node_visibility_changed() { if (!node) return; - canvas_item_editor->get_viewport_control()->update(); + canvas_item_editor->update_viewport(); } void Path2DEditor::edit(Node *p_path2d) { @@ -406,8 +406,8 @@ void Path2DEditor::_mode_selected(int p_mode) { undo_redo->create_action(TTR("Remove Point from Curve")); undo_redo->add_do_method(node->get_curve().ptr(), "add_point", begin); undo_redo->add_undo_method(node->get_curve().ptr(), "remove_point", node->get_curve()->get_point_count()); - undo_redo->add_do_method(canvas_item_editor->get_viewport_control(), "update"); - undo_redo->add_undo_method(canvas_item_editor->get_viewport_control(), "update"); + undo_redo->add_do_method(canvas_item_editor, "update_viewport"); + undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); undo_redo->commit_action(); return; } diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index f937744d45..97448f3f88 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -56,6 +56,12 @@ void Polygon2DEditor::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_THEME_CHANGED: { + + uv_edit_draw->add_style_override("panel", get_stylebox("bg", "Tree")); + bone_scroll->add_style_override("bg", get_stylebox("bg", "Tree")); + } break; case NOTIFICATION_READY: { button_uv->set_icon(get_icon("Uv", "EditorIcons")); @@ -73,66 +79,68 @@ void Polygon2DEditor::_notification(int p_what) { b_snap_grid->set_icon(get_icon("Grid", "EditorIcons")); b_snap_enable->set_icon(get_icon("SnapGrid", "EditorIcons")); uv_icon_zoom->set_texture(get_icon("Zoom", "EditorIcons")); - } break; - case NOTIFICATION_PHYSICS_PROCESS: { + case NOTIFICATION_VISIBILITY_CHANGED: { + if (!is_visible()) { + uv_edit->hide(); + } } break; } } void Polygon2DEditor::_sync_bones() { + Skeleton2D *skeleton; if (!node->has_node(node->get_skeleton())) { error->set_text(TTR("The skeleton property of the Polygon2D does not point to a Skeleton2D node")); error->popup_centered_minsize(); - return; + } else { + Node *sn = node->get_node(node->get_skeleton()); + skeleton = Object::cast_to<Skeleton2D>(sn); } - Node *sn = node->get_node(node->get_skeleton()); - Skeleton2D *skeleton = Object::cast_to<Skeleton2D>(sn); + Array prev_bones = node->call("_get_bones"); + node->clear_bones(); if (!skeleton) { error->set_text(TTR("The skeleton property of the Polygon2D does not point to a Skeleton2D node")); error->popup_centered_minsize(); - return; - } - - Array prev_bones = node->call("_get_bones"); - node->clear_bones(); - - for (int i = 0; i < skeleton->get_bone_count(); i++) { - NodePath path = skeleton->get_path_to(skeleton->get_bone(i)); - PoolVector<float> weights; - int wc = node->get_polygon().size(); - - for (int j = 0; j < prev_bones.size(); j += 2) { - NodePath pvp = prev_bones[j]; - PoolVector<float> pv = prev_bones[j + 1]; - if (pvp == path && pv.size() == wc) { - weights = pv; + } else { + for (int i = 0; i < skeleton->get_bone_count(); i++) { + NodePath path = skeleton->get_path_to(skeleton->get_bone(i)); + PoolVector<float> weights; + int wc = node->get_polygon().size(); + + for (int j = 0; j < prev_bones.size(); j += 2) { + NodePath pvp = prev_bones[j]; + PoolVector<float> pv = prev_bones[j + 1]; + if (pvp == path && pv.size() == wc) { + weights = pv; + } } - } - if (weights.size() == 0) { //create them - weights.resize(node->get_polygon().size()); - PoolVector<float>::Write w = weights.write(); - for (int j = 0; j < wc; j++) { - w[j] = 0.0; + if (weights.size() == 0) { //create them + weights.resize(node->get_polygon().size()); + PoolVector<float>::Write w = weights.write(); + for (int j = 0; j < wc; j++) { + w[j] = 0.0; + } } - } - node->add_bone(path, weights); + node->add_bone(path, weights); + } } + Array new_bones = node->call("_get_bones"); - undo_redo->create_action(TTR("Sync bones")); + undo_redo->create_action(TTR("Sync Bones")); undo_redo->add_do_method(node, "_set_bones", new_bones); undo_redo->add_undo_method(node, "_set_bones", prev_bones); - undo_redo->add_do_method(uv_edit_draw, "update"); - undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->add_do_method(this, "_update_bone_list"); undo_redo->add_undo_method(this, "_update_bone_list"); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); } @@ -162,9 +170,10 @@ void Polygon2DEditor::_update_bone_list() { cb->set_text(name); cb->set_button_group(bg); cb->set_meta("bone_path", np); + cb->set_focus_mode(FOCUS_NONE); bone_scroll_vb->add_child(cb); - if (np == selected) + if (np == selected || bone_scroll_vb->get_child_count() < 2) cb->set_pressed(true); cb->connect("pressed", this, "_bone_paint_selected", varray(i)); @@ -180,6 +189,7 @@ void Polygon2DEditor::_bone_paint_selected(int p_index) { void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { if (p_mode == 0) { //uv + uv_button[UV_MODE_CREATE]->hide(); for (int i = UV_MODE_MOVE; i <= UV_MODE_SCALE; i++) { uv_button[i]->show(); @@ -194,8 +204,8 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_strength->hide(); bone_paint_radius->hide(); bone_paint_radius_label->hide(); - } else if (p_mode == 1) { //poly + for (int i = 0; i <= UV_MODE_SCALE; i++) { uv_button[i]->show(); } @@ -209,8 +219,8 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_strength->hide(); bone_paint_radius->hide(); bone_paint_radius_label->hide(); - } else if (p_mode == 2) { //splits + for (int i = 0; i <= UV_MODE_SCALE; i++) { uv_button[i]->hide(); } @@ -224,8 +234,8 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_strength->hide(); bone_paint_radius->hide(); bone_paint_radius_label->hide(); - } else if (p_mode == 3) { //bones´ + for (int i = 0; i <= UV_MODE_REMOVE_SPLIT; i++) { uv_button[i]->hide(); } @@ -241,9 +251,17 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_pos = Vector2(-100000, -100000); //send brush away when switching } + uv_edit->set_size(uv_edit->get_size()); // Necessary readjustment of the popup window. uv_edit_draw->update(); } +void Polygon2DEditor::_uv_edit_popup_hide() { + + EditorSettings::get_singleton()->set("interface/dialogs/uv_editor_bounds", uv_edit->get_rect()); + + _cancel_editing(); +} + void Polygon2DEditor::_menu_option(int p_option) { switch (p_option) { @@ -252,7 +270,7 @@ void Polygon2DEditor::_menu_option(int p_option) { if (node->get_texture().is_null()) { - error->set_text("No texture in this polygon.\nSet a texture to be able to edit UV."); + error->set_text(TTR("No texture in this polygon.\nSet a texture to be able to edit UV.")); error->popup_centered_minsize(); return; } @@ -268,7 +286,10 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->commit_action(); } - uv_edit->popup_centered_ratio(0.85); + if (EditorSettings::get_singleton()->has_setting("interface/dialogs/uv_editor_bounds")) + uv_edit->popup(EditorSettings::get_singleton()->get("interface/dialogs/uv_editor_bounds")); + else + uv_edit->popup_centered_ratio(0.85); } break; case UVEDIT_POLYGON_TO_UV: { @@ -282,7 +303,6 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - } break; case UVEDIT_UV_TO_POLYGON: { @@ -291,13 +311,12 @@ void Polygon2DEditor::_menu_option(int p_option) { if (uvs.size() == 0) break; - undo_redo->create_action(TTR("Create UV Map")); + undo_redo->create_action(TTR("Create Polygon")); undo_redo->add_do_method(node, "set_polygon", uvs); undo_redo->add_undo_method(node, "set_polygon", points); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - } break; case UVEDIT_UV_CLEAR: { @@ -310,43 +329,81 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - } break; case UVEDIT_GRID_SETTINGS: { + grid_settings->popup_centered_minsize(); } break; default: { + AbstractPolygon2DEditor::_menu_option(p_option); } break; } } +void Polygon2DEditor::_cancel_editing() { + + if (uv_create) { + uv_drag = false; + uv_create = false; + node->set_uv(uv_create_uv_prev); + node->set_polygon(uv_create_poly_prev); + node->call("_set_bones", uv_create_bones_prev); + node->set_splits(splits_prev); + } else if (uv_drag) { + uv_drag = false; + if (uv_edit_mode[0]->is_pressed()) { // Edit UV. + node->set_uv(points_prev); + } else if (uv_edit_mode[1]->is_pressed()) { // Edit polygon. + node->set_polygon(points_prev); + } + } else if (split_create) { + split_create = false; + } +} + +void Polygon2DEditor::_commit_action() { + + // Makes that undo/redoing actions made outside of the UV editor still affects its polygon. + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->add_do_method(CanvasItemEditor::get_singleton(), "update_viewport"); + undo_redo->add_undo_method(CanvasItemEditor::get_singleton(), "update_viewport"); + undo_redo->commit_action(); +} + void Polygon2DEditor::_set_use_snap(bool p_use) { use_snap = p_use; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_enabled", p_use); } void Polygon2DEditor::_set_show_grid(bool p_show) { snap_show_grid = p_show; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "show_grid", p_show); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_off_x(float p_val) { snap_offset.x = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_offset", snap_offset); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_off_y(float p_val) { snap_offset.y = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_offset", snap_offset); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_step_x(float p_val) { snap_step.x = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_step", snap_step); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_step_y(float p_val) { snap_step.y = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_step", snap_step); uv_edit_draw->update(); } @@ -364,6 +421,9 @@ void Polygon2DEditor::_uv_mode(int p_mode) { void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { + if (!_get_node()) + return; + Transform2D mtx; mtx.elements[2] = -uv_draw_ofs; mtx.scale_basis(Vector2(uv_draw_zoom, uv_draw_zoom)); @@ -376,7 +436,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { if (mb->is_pressed()) { - uv_drag_from = Vector2(mb->get_position().x, mb->get_position().y); + uv_drag_from = snap_point(Vector2(mb->get_position().x, mb->get_position().y)); uv_drag = true; points_prev = node->get_uv(); @@ -390,8 +450,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { if (uv_move_current == UV_MODE_CREATE) { if (!uv_create) { + points_prev.resize(0); - Vector2 tuv = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); + Vector2 tuv = mtx.affine_inverse().xform(snap_point(Vector2(mb->get_position().x, mb->get_position().y))); points_prev.push_back(tuv); uv_create_to = tuv; point_drag_index = 0; @@ -405,23 +466,27 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_polygon(points_prev); node->set_uv(points_prev); + uv_edit_draw->update(); } else { - Vector2 tuv = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); - if (points_prev.size() > 3 && tuv.distance_to(points_prev[0]) < 8) { + Vector2 tuv = mtx.affine_inverse().xform(snap_point(Vector2(mb->get_position().x, mb->get_position().y))); + + if (points_prev.size() > 2 && tuv.distance_to(points_prev[0]) < 8) { undo_redo->create_action(TTR("Create Polygon & UV")); undo_redo->add_do_method(node, "set_uv", node->get_uv()); - undo_redo->add_undo_method(node, "set_uv", points_prev); + undo_redo->add_undo_method(node, "set_uv", uv_create_uv_prev); undo_redo->add_do_method(node, "set_polygon", node->get_polygon()); - undo_redo->add_undo_method(node, "set_polygon", points_prev); + undo_redo->add_undo_method(node, "set_polygon", uv_create_poly_prev); undo_redo->add_do_method(node, "clear_bones"); - undo_redo->add_undo_method(node, "_set_bones", node->call("_get_bones")); + undo_redo->add_undo_method(node, "_set_bones", uv_create_bones_prev); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); uv_drag = false; uv_create = false; + _uv_mode(UV_MODE_EDIT_POINT); + _menu_option(MODE_EDIT); } else { points_prev.push_back(tuv); point_drag_index = points_prev.size() - 1; @@ -430,6 +495,8 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_polygon(points_prev); node->set_uv(points_prev); } + + CanvasItemEditor::get_singleton()->update_viewport(); } if (uv_move_current == UV_MODE_EDIT_POINT) { @@ -540,7 +607,6 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { splits_prev.push_back(split_to_index); undo_redo->create_action(TTR("Add Split")); - undo_redo->add_do_method(node, "set_splits", splits_prev); undo_redo->add_undo_method(node, "set_splits", node->get_splits()); undo_redo->add_do_method(uv_edit_draw, "update"); @@ -575,13 +641,11 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { splits_prev.remove(i); undo_redo->create_action(TTR("Remove Split")); - undo_redo->add_do_method(node, "set_splits", splits_prev); undo_redo->add_undo_method(node, "set_splits", node->get_splits()); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - break; } } @@ -608,12 +672,12 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_drag && !uv_create) { - undo_redo->create_action(TTR("Transform UV Map")); - if (uv_edit_mode[0]->is_pressed()) { //edit uv + undo_redo->create_action(TTR("Transform UV Map")); undo_redo->add_do_method(node, "set_uv", node->get_uv()); undo_redo->add_undo_method(node, "set_uv", points_prev); } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + undo_redo->create_action(TTR("Transform Polygon")); undo_redo->add_do_method(node, "set_polygon", node->get_polygon()); undo_redo->add_undo_method(node, "set_polygon", points_prev); } @@ -624,7 +688,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { uv_drag = false; } else if (bone_painting) { - undo_redo->create_action(TTR("Paint bone weights")); + undo_redo->create_action(TTR("Paint Bone Weights")); undo_redo->add_do_method(node, "set_bone_weights", bone_painting_bone, node->get_bone_weights(bone_painting_bone)); undo_redo->add_undo_method(node, "set_bone_weights", bone_painting_bone, prev_weights); undo_redo->add_do_method(uv_edit_draw, "update"); @@ -635,30 +699,12 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { - if (uv_create) { + _cancel_editing(); - uv_drag = false; - uv_create = false; - node->set_uv(uv_create_uv_prev); - node->set_polygon(uv_create_poly_prev); - node->call("_set_bones", uv_create_bones_prev); - node->set_splits(splits_prev); - uv_edit_draw->update(); - } else if (uv_drag) { - - uv_drag = false; - if (uv_edit_mode[0]->is_pressed()) { //edit uv - node->set_uv(points_prev); - } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon - node->set_polygon(points_prev); - } - uv_edit_draw->update(); - } else if (split_create) { - split_create = false; - uv_edit_draw->update(); - } else if (bone_painting) { + if (bone_painting) node->set_bone_weights(bone_painting_bone, prev_weights); - } + + uv_edit_draw->update(); } else if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed()) { @@ -682,13 +728,15 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_drag) { Vector2 uv_drag_to = mm->get_position(); + uv_drag_to = snap_point(uv_drag_to); // FIXME: Only works correctly with 'UV_MODE_EDIT_POINT', it's imprecise with the rest. Vector2 drag = mtx.affine_inverse().xform(uv_drag_to) - mtx.affine_inverse().xform(uv_drag_from); switch (uv_move_current) { case UV_MODE_CREATE: { + if (uv_create) { - uv_create_to = mtx.affine_inverse().xform(Vector2(mm->get_position().x, mm->get_position().y)); + uv_create_to = mtx.affine_inverse().xform(snap_point(Vector2(mm->get_position().x, mm->get_position().y))); } } break; case UV_MODE_EDIT_POINT: { @@ -713,7 +761,6 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon node->set_polygon(uv_new); } - } break; case UV_MODE_ROTATE: { @@ -737,7 +784,6 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon node->set_polygon(uv_new); } - } break; case UV_MODE_SCALE: { @@ -767,11 +813,15 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_polygon(uv_new); } } break; + case UV_MODE_PAINT_WEIGHT: + case UV_MODE_CLEAR_WEIGHT: { + + bone_paint_pos = Vector2(mm->get_position().x, mm->get_position().y); + } break; default: {} } if (bone_painting) { - bone_paint_pos = Vector2(mm->get_position().x, mm->get_position().y); PoolVector<float> painted_weights = node->get_bone_weights(bone_painting_bone); { @@ -796,7 +846,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_bone_weights(bone_painting_bone, painted_weights); } + uv_edit_draw->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } else if (split_create) { uv_create_to = mtx.affine_inverse().xform(Vector2(mm->get_position().x, mm->get_position().y)); uv_edit_draw->update(); @@ -833,6 +885,9 @@ void Polygon2DEditor::_uv_scroll_changed(float) { void Polygon2DEditor::_uv_draw() { + if (!uv_edit->is_visible() || !_get_node()) + return; + Ref<Texture> base_tex = node->get_texture(); if (base_tex.is_null()) return; @@ -848,6 +903,7 @@ void Polygon2DEditor::_uv_draw() { VS::get_singleton()->canvas_item_add_set_transform(uv_edit_draw->get_canvas_item(), Transform2D()); if (snap_show_grid) { + Color grid_color = Color(1.0, 1.0, 1.0, 0.15); Size2 s = uv_edit_draw->get_size(); int last_cell = 0; @@ -857,7 +913,7 @@ void Polygon2DEditor::_uv_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - uv_edit_draw->draw_line(Point2(i, 0), Point2(i, s.height), Color(0.3, 0.7, 1, 0.3)); + uv_edit_draw->draw_line(Point2(i, 0), Point2(i, s.height), grid_color); last_cell = cell; } } @@ -868,7 +924,7 @@ void Polygon2DEditor::_uv_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - uv_edit_draw->draw_line(Point2(0, i), Point2(s.width, i), Color(0.3, 0.7, 1, 0.3)); + uv_edit_draw->draw_line(Point2(0, i), Point2(s.width, i), grid_color); last_cell = cell; } } @@ -901,19 +957,26 @@ void Polygon2DEditor::_uv_draw() { Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); + Color poly_line_color = Color(0.9, 0.5, 0.5); + Color prev_color = Color(0.5, 0.5, 0.5); Rect2 rect(Point2(), mtx.basis_xform(base_tex->get_size())); rect.expand_to(mtx.basis_xform(uv_edit_draw->get_size())); for (int i = 0; i < uvs.size(); i++) { int next = (i + 1) % uvs.size(); + + if (uv_drag && uv_move_current == UV_MODE_EDIT_POINT && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { + uv_edit_draw->draw_line(mtx.xform(points_prev[i]), mtx.xform(points_prev[next]), prev_color, 2 * EDSCALE); + } + Vector2 next_point = uvs[next]; if (uv_create && i == uvs.size() - 1) { next_point = uv_create_to; } - uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), Color(0.9, 0.5, 0.5), 2); - if (weight_r.ptr()) { + uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, 2 * EDSCALE); + if (weight_r.ptr()) { Vector2 draw_pos = mtx.xform(uvs[i]); float weight = weight_r[i]; uv_edit_draw->draw_rect(Rect2(draw_pos - Vector2(2, 2) * EDSCALE, Vector2(5, 5) * EDSCALE), Color(weight, weight, weight, 1.0)); @@ -926,7 +989,7 @@ void Polygon2DEditor::_uv_draw() { if (split_create) { Vector2 from = uvs[point_drag_index]; Vector2 to = uv_create_to; - uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), Color(0.9, 0.5, 0.5), 2); + uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), poly_line_color, 2); } PoolVector<int> splits = node->get_splits(); @@ -936,7 +999,7 @@ void Polygon2DEditor::_uv_draw() { int idx_to = splits[i + 1]; if (idx_from < 0 || idx_to >= uvs.size()) continue; - uv_edit_draw->draw_line(mtx.xform(uvs[idx_from]), mtx.xform(uvs[idx_to]), Color(0.9, 0.5, 0.5), 2); + uv_edit_draw->draw_line(mtx.xform(uvs[idx_from]), mtx.xform(uvs[idx_to]), poly_line_color, 2); } if (uv_mode == UV_MODE_PAINT_WEIGHT || uv_mode == UV_MODE_CLEAR_WEIGHT) { @@ -963,22 +1026,32 @@ void Polygon2DEditor::_uv_draw() { bool current = bone_path == skeleton->get_path_to(bone); + bool found_child = false; + for (int j = 0; j < bone->get_child_count(); j++) { - Node2D *n = Object::cast_to<Node2D>(bone->get_child(j)); + Bone2D *n = Object::cast_to<Bone2D>(bone->get_child(j)); if (!n) continue; - bool edit_bone = n->has_meta("_edit_bone_") && n->get_meta("_edit_bone_"); - if (edit_bone) { + found_child = true; - Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest()); - Transform2D endpoint_xform = bone_xform * n->get_transform(); + Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest()); + Transform2D endpoint_xform = bone_xform * n->get_transform(); - Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5); - uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4); - uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2); - } + Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5); + uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4); + uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2); + } + + if (!found_child) { + //draw normally + Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest()); + Transform2D endpoint_xform = bone_xform * Transform2D(0, Vector2(bone->get_default_length(), 0)); + + Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5); + uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4); + uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2); } } } @@ -992,15 +1065,23 @@ void Polygon2DEditor::_uv_draw() { updating_uv_scroll = true; uv_hscroll->set_min(rect.position.x); uv_hscroll->set_max(rect.position.x + rect.size.x); - uv_hscroll->set_page(uv_edit_draw->get_size().x); - uv_hscroll->set_value(uv_draw_ofs.x); - uv_hscroll->set_step(0.001); + if (ABS(rect.position.x - (rect.position.x + rect.size.x)) <= uv_edit_draw->get_size().x) { + uv_hscroll->hide(); + } else { + uv_hscroll->show(); + uv_hscroll->set_page(uv_edit_draw->get_size().x); + uv_hscroll->set_value(uv_draw_ofs.x); + } uv_vscroll->set_min(rect.position.y); uv_vscroll->set_max(rect.position.y + rect.size.y); - uv_vscroll->set_page(uv_edit_draw->get_size().y); - uv_vscroll->set_value(uv_draw_ofs.y); - uv_vscroll->set_step(0.001); + if (ABS(rect.position.y - (rect.position.y + rect.size.y)) <= uv_edit_draw->get_size().y) { + uv_vscroll->hide(); + } else { + uv_vscroll->show(); + uv_vscroll->set_page(uv_edit_draw->get_size().y); + uv_vscroll->set_value(uv_draw_ofs.y); + } updating_uv_scroll = false; } @@ -1017,9 +1098,9 @@ void Polygon2DEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_snap_step_x"), &Polygon2DEditor::_set_snap_step_x); ClassDB::bind_method(D_METHOD("_set_snap_step_y"), &Polygon2DEditor::_set_snap_step_y); ClassDB::bind_method(D_METHOD("_uv_edit_mode_select"), &Polygon2DEditor::_uv_edit_mode_select); + ClassDB::bind_method(D_METHOD("_uv_edit_popup_hide"), &Polygon2DEditor::_uv_edit_popup_hide); ClassDB::bind_method(D_METHOD("_sync_bones"), &Polygon2DEditor::_sync_bones); ClassDB::bind_method(D_METHOD("_update_bone_list"), &Polygon2DEditor::_update_bone_list); - ClassDB::bind_method(D_METHOD("_bone_paint_selected"), &Polygon2DEditor::_bone_paint_selected); } @@ -1036,23 +1117,25 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : AbstractPolygon2DEditor(p_editor) { node = NULL; - snap_step = Vector2(10, 10); - use_snap = false; - snap_show_grid = false; + snap_offset = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "snap_offset", Vector2()); + snap_step = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "snap_step", Vector2(10, 10)); + use_snap = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "snap_enabled", false); + snap_show_grid = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "show_grid", false); button_uv = memnew(ToolButton); add_child(button_uv); + button_uv->set_tooltip(TTR("Open Polygon 2D UV editor.")); button_uv->connect("pressed", this, "_menu_option", varray(MODE_EDIT_UV)); uv_mode = UV_MODE_EDIT_POINT; uv_edit = memnew(AcceptDialog); add_child(uv_edit); uv_edit->set_title(TTR("Polygon 2D UV Editor")); - uv_edit->set_self_modulate(Color(1, 1, 1, 0.9)); + uv_edit->set_resizable(true); + uv_edit->connect("popup_hide", this, "_uv_edit_popup_hide"); VBoxContainer *uv_main_vb = memnew(VBoxContainer); uv_edit->add_child(uv_main_vb); - //uv_edit->set_child_rect(uv_main_vb); HBoxContainer *uv_mode_hb = memnew(HBoxContainer); uv_edit_group.instance(); @@ -1099,14 +1182,14 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : } uv_button[0]->set_tooltip(TTR("Create Polygon")); - uv_button[1]->set_tooltip(TTR("Move Point") + "\n" + TTR("Ctrl: Rotate") + "\n" + TTR("Shift: Move All") + "\n" + TTR("Shift+Ctrl: Scale")); + uv_button[1]->set_tooltip(TTR("Move Points") + "\n" + TTR("Ctrl: Rotate") + "\n" + TTR("Shift: Move All") + "\n" + TTR("Shift+Ctrl: Scale")); uv_button[2]->set_tooltip(TTR("Move Polygon")); uv_button[3]->set_tooltip(TTR("Rotate Polygon")); uv_button[4]->set_tooltip(TTR("Scale Polygon")); - uv_button[5]->set_tooltip(TTR("Connect two points to make a split")); - uv_button[6]->set_tooltip(TTR("Select a split to erase it")); - uv_button[7]->set_tooltip(TTR("Paint weights with specified intensity")); - uv_button[8]->set_tooltip(TTR("UnPaint weights with specified intensity")); + uv_button[5]->set_tooltip(TTR("Connect two points to make a split.")); + uv_button[6]->set_tooltip(TTR("Select a split to erase it.")); + uv_button[7]->set_tooltip(TTR("Paint weights with specified intensity.")); + uv_button[8]->set_tooltip(TTR("Unpaint weights with specified intensity.")); uv_button[0]->hide(); uv_button[5]->hide(); @@ -1124,7 +1207,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_paint_strength->set_step(0.01); bone_paint_strength->set_value(0.5); - bone_paint_radius_label = memnew(Label(" " + TTR("Radius:") + " ")); + bone_paint_radius_label = memnew(Label(TTR("Radius:"))); uv_mode_hb->add_child(bone_paint_radius_label); bone_paint_radius = memnew(SpinBox); uv_mode_hb->add_child(bone_paint_radius); @@ -1137,12 +1220,13 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_paint_radius->set_step(1); bone_paint_radius->set_value(32); - HBoxContainer *uv_main_hb = memnew(HBoxContainer); - uv_main_vb->add_child(uv_main_hb); - uv_edit_draw = memnew(Control); - uv_main_hb->add_child(uv_edit_draw); - uv_main_hb->set_v_size_flags(SIZE_EXPAND_FILL); + HSplitContainer *uv_main_hsc = memnew(HSplitContainer); + uv_main_vb->add_child(uv_main_hsc); + uv_main_hsc->set_v_size_flags(SIZE_EXPAND_FILL); + uv_edit_draw = memnew(Panel); + uv_main_hsc->add_child(uv_edit_draw); uv_edit_draw->set_h_size_flags(SIZE_EXPAND_FILL); + uv_edit_draw->set_custom_minimum_size(Size2(200, 200) * EDSCALE); uv_menu = memnew(MenuButton); uv_mode_hb->add_child(uv_menu); uv_menu->set_text(TTR("Edit")); @@ -1218,6 +1302,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_mode_hb->add_child(memnew(VSeparator)); uv_icon_zoom = memnew(TextureRect); + uv_icon_zoom->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); uv_mode_hb->add_child(uv_icon_zoom); uv_zoom = memnew(HSlider); uv_zoom->set_min(0.01); @@ -1235,17 +1320,25 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_zoom->connect("value_changed", this, "_uv_scroll_changed"); uv_vscroll = memnew(VScrollBar); - uv_main_hb->add_child(uv_vscroll); + uv_vscroll->set_step(0.001); + uv_edit_draw->add_child(uv_vscroll); + uv_vscroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); uv_vscroll->connect("value_changed", this, "_uv_scroll_changed"); uv_hscroll = memnew(HScrollBar); - uv_main_vb->add_child(uv_hscroll); + uv_hscroll->set_step(0.001); + uv_edit_draw->add_child(uv_hscroll); + uv_hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + uv_hscroll->set_margin(MARGIN_RIGHT, -uv_vscroll->get_size().x * EDSCALE); uv_hscroll->connect("value_changed", this, "_uv_scroll_changed"); bone_scroll_main_vb = memnew(VBoxContainer); bone_scroll_main_vb->hide(); + bone_scroll_main_vb->set_custom_minimum_size(Size2(150 * EDSCALE, 0)); sync_bones = memnew(Button(TTR("Sync Bones to Polygon"))); bone_scroll_main_vb->add_child(sync_bones); - uv_main_hb->add_child(bone_scroll_main_vb); + sync_bones->set_h_size_flags(0); + sync_bones->connect("pressed", this, "_sync_bones"); + uv_main_hsc->add_child(bone_scroll_main_vb); bone_scroll = memnew(ScrollContainer); bone_scroll->set_v_scroll(true); bone_scroll->set_h_scroll(false); @@ -1253,7 +1346,6 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_scroll->set_v_size_flags(SIZE_EXPAND_FILL); bone_scroll_vb = memnew(VBoxContainer); bone_scroll->add_child(bone_scroll_vb); - sync_bones->connect("pressed", this, "_sync_bones"); uv_edit_draw->connect("draw", this, "_uv_draw"); uv_edit_draw->connect("gui_input", this, "_uv_input"); diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index f9b42a21c2..935f1cfff0 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -41,13 +41,11 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { GDCLASS(Polygon2DEditor, AbstractPolygon2DEditor); enum Mode { - MODE_EDIT_UV = MODE_CONT, UVEDIT_POLYGON_TO_UV, UVEDIT_UV_TO_POLYGON, UVEDIT_UV_CLEAR, UVEDIT_GRID_SETTINGS - }; enum UVMode { @@ -73,7 +71,7 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { ToolButton *uv_button[UV_MODE_MAX]; ToolButton *b_snap_enable; ToolButton *b_snap_grid; - Control *uv_edit_draw; + Panel *uv_edit_draw; HSlider *uv_zoom; SpinBox *uv_zoom_value; HScrollBar *uv_hscroll; @@ -125,6 +123,8 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { virtual void _menu_option(int p_option); + void _cancel_editing(); + void _uv_scroll_changed(float); void _uv_input(const Ref<InputEvent> &p_input); void _uv_draw(); @@ -138,6 +138,7 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { void _set_snap_step_y(float p_val); void _uv_edit_mode_select(int p_mode); + void _uv_edit_popup_hide(); void _bone_paint_selected(int p_index); protected: @@ -146,6 +147,9 @@ protected: virtual Vector2 _get_offset(int p_idx) const; + virtual bool _has_uv() const { return true; }; + virtual void _commit_action(); + void _notification(int p_what); static void _bind_methods(); diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp index dd327d0a2c..bd4a35c9d8 100644 --- a/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/editor/plugins/resource_preloader_editor_plugin.cpp @@ -44,7 +44,6 @@ void ResourcePreloaderEditor::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { load->set_icon(get_icon("Folder", "EditorIcons")); - _delete->set_icon(get_icon("Remove", "EditorIcons")); } if (p_what == NOTIFICATION_READY) { @@ -138,15 +137,11 @@ void ResourcePreloaderEditor::_item_edited() { } } -void ResourcePreloaderEditor::_delete_confirm_pressed() { +void ResourcePreloaderEditor::_remove_resource(const String &p_to_remove) { - if (!tree->get_selected()) - return; - - String to_remove = tree->get_selected()->get_text(0); undo_redo->create_action(TTR("Delete Resource")); - undo_redo->add_do_method(preloader, "remove_resource", to_remove); - undo_redo->add_undo_method(preloader, "add_resource", to_remove, preloader->get_resource(to_remove)); + undo_redo->add_do_method(preloader, "remove_resource", p_to_remove); + undo_redo->add_undo_method(preloader, "add_resource", p_to_remove, preloader->get_resource(p_to_remove)); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -184,21 +179,6 @@ void ResourcePreloaderEditor::_paste_pressed() { undo_redo->commit_action(); } -void ResourcePreloaderEditor::_delete_pressed() { - - if (!tree->get_selected()) - return; - - _delete_confirm_pressed(); //it has undo.. why bother with a dialog.. - /* - dialog->set_title("Confirm..."); - dialog->set_text("Remove Resource '"+tree->get_selected()->get_text(0)+"' ?"); - //dialog->get_cancel()->set_text("Cancel"); - //dialog->get_ok()->show(); - dialog->get_ok()->set_text("Remove"); - dialog->popup_centered(Size2(300,60));*/ -} - void ResourcePreloaderEditor::_update_library() { tree->clear(); @@ -228,17 +208,20 @@ void ResourcePreloaderEditor::_update_library() { ERR_CONTINUE(r.is_null()); - ti->set_tooltip(0, r->get_path()); + String type = r->get_class(); + ti->set_icon(0, EditorNode::get_singleton()->get_class_icon(type, "Object")); + ti->set_tooltip(0, TTR("Instance:") + " " + r->get_path() + "\n" + TTR("Type:") + " " + type); + ti->set_text(1, r->get_path()); - ti->add_button(1, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE, false, TTR("Open in Editor")); - ti->set_tooltip(1, TTR("Instance:") + " " + r->get_path() + "\n" + TTR("Type:") + " " + r->get_class()); ti->set_editable(1, false); ti->set_selectable(1, false); - String type = r->get_class(); - ti->set_text(2, type); - ti->set_selectable(2, false); - ti->set_icon(2, EditorNode::get_singleton()->get_class_icon(type, "")); + if (type == "PackedScene") { + ti->add_button(1, get_icon("InstanceOptions", "EditorIcons"), BUTTON_OPEN_SCENE, false, TTR("Open in Editor")); + } else { + ti->add_button(1, get_icon("Load", "EditorIcons"), BUTTON_EDIT_RESOURCE, false, TTR("Open in Editor")); + } + ti->add_button(1, get_icon("Remove", "EditorIcons"), BUTTON_REMOVE, false, TTR("Remove")); } //player->add_resource("default",resource); @@ -249,10 +232,16 @@ void ResourcePreloaderEditor::_cell_button_pressed(Object *p_item, int p_column, TreeItem *item = Object::cast_to<TreeItem>(p_item); ERR_FAIL_COND(!item); - String rpath = item->get_text(p_column); - - if (p_id == BUTTON_SUBSCENE) { + if (p_id == BUTTON_OPEN_SCENE) { + String rpath = item->get_text(p_column); EditorInterface::get_singleton()->open_scene_from_path(rpath); + + } else if (p_id == BUTTON_EDIT_RESOURCE) { + RES r = preloader->get_resource(item->get_text(0)); + EditorInterface::get_singleton()->edit_resource(r); + + } else if (p_id == BUTTON_REMOVE) { + _remove_resource(item->get_text(0)); } } @@ -365,12 +354,11 @@ void ResourcePreloaderEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &ResourcePreloaderEditor::_gui_input); ClassDB::bind_method(D_METHOD("_load_pressed"), &ResourcePreloaderEditor::_load_pressed); ClassDB::bind_method(D_METHOD("_item_edited"), &ResourcePreloaderEditor::_item_edited); - ClassDB::bind_method(D_METHOD("_delete_pressed"), &ResourcePreloaderEditor::_delete_pressed); ClassDB::bind_method(D_METHOD("_paste_pressed"), &ResourcePreloaderEditor::_paste_pressed); - ClassDB::bind_method(D_METHOD("_delete_confirm_pressed"), &ResourcePreloaderEditor::_delete_confirm_pressed); ClassDB::bind_method(D_METHOD("_files_load_request"), &ResourcePreloaderEditor::_files_load_request); ClassDB::bind_method(D_METHOD("_update_library"), &ResourcePreloaderEditor::_update_library); ClassDB::bind_method(D_METHOD("_cell_button_pressed"), &ResourcePreloaderEditor::_cell_button_pressed); + ClassDB::bind_method(D_METHOD("_remove_resource", "to_remove"), &ResourcePreloaderEditor::_remove_resource); ClassDB::bind_method(D_METHOD("get_drag_data_fw"), &ResourcePreloaderEditor::get_drag_data_fw); ClassDB::bind_method(D_METHOD("can_drop_data_fw"), &ResourcePreloaderEditor::can_drop_data_fw); @@ -391,9 +379,6 @@ ResourcePreloaderEditor::ResourcePreloaderEditor() { load->set_tooltip(TTR("Load Resource")); hbc->add_child(load); - _delete = memnew(Button); - hbc->add_child(_delete); - paste = memnew(Button); paste->set_text(TTR("Paste")); hbc->add_child(paste); @@ -403,13 +388,11 @@ ResourcePreloaderEditor::ResourcePreloaderEditor() { tree = memnew(Tree); tree->connect("button_pressed", this, "_cell_button_pressed"); - tree->set_columns(3); - tree->set_column_min_width(0, 3); - tree->set_column_min_width(1, 1); - tree->set_column_min_width(2, 1); + tree->set_columns(2); + tree->set_column_min_width(0, 2); + tree->set_column_min_width(1, 3); tree->set_column_expand(0, true); tree->set_column_expand(1, true); - tree->set_column_expand(2, true); tree->set_v_size_flags(SIZE_EXPAND_FILL); tree->set_drag_forwarding(this); @@ -419,10 +402,8 @@ ResourcePreloaderEditor::ResourcePreloaderEditor() { add_child(dialog); load->connect("pressed", this, "_load_pressed"); - _delete->connect("pressed", this, "_delete_pressed"); paste->connect("pressed", this, "_paste_pressed"); file->connect("files_selected", this, "_files_load_request"); - //dialog->connect("confirmed", this,"_delete_confirm_pressed"); tree->connect("item_edited", this, "_item_edited"); loading_scene = false; } diff --git a/editor/plugins/resource_preloader_editor_plugin.h b/editor/plugins/resource_preloader_editor_plugin.h index e737157785..0a8238ce18 100644 --- a/editor/plugins/resource_preloader_editor_plugin.h +++ b/editor/plugins/resource_preloader_editor_plugin.h @@ -43,11 +43,12 @@ class ResourcePreloaderEditor : public PanelContainer { GDCLASS(ResourcePreloaderEditor, PanelContainer); enum { - BUTTON_SUBSCENE = 0, + BUTTON_OPEN_SCENE, + BUTTON_EDIT_RESOURCE, + BUTTON_REMOVE }; Button *load; - Button *_delete; Button *paste; Tree *tree; bool loading_scene; @@ -62,8 +63,7 @@ class ResourcePreloaderEditor : public PanelContainer { void _load_scene_pressed(); void _files_load_request(const Vector<String> &p_paths); void _paste_pressed(); - void _delete_pressed(); - void _delete_confirm_pressed(); + void _remove_resource(const String &p_to_remove); void _update_library(); void _cell_button_pressed(Object *p_item, int p_column, int p_id); void _item_edited(); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 7cda15bdc6..75529d6007 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -40,6 +40,7 @@ #include "editor/editor_settings.h" #include "editor/find_in_files.h" #include "editor/node_dock.h" +#include "editor/plugins/shader_editor_plugin.h" #include "editor/script_editor_debugger.h" #include "scene/main/viewport.h" #include "script_text_editor.h" @@ -50,8 +51,7 @@ void ScriptEditorBase::_bind_methods() { ADD_SIGNAL(MethodInfo("name_changed")); ADD_SIGNAL(MethodInfo("edited_script_changed")); - ADD_SIGNAL(MethodInfo("request_help_search", PropertyInfo(Variant::STRING, "topic"))); - ADD_SIGNAL(MethodInfo("request_help_index")); + ADD_SIGNAL(MethodInfo("request_help", PropertyInfo(Variant::STRING, "topic"))); ADD_SIGNAL(MethodInfo("request_open_script_at_line", PropertyInfo(Variant::OBJECT, "script"), PropertyInfo(Variant::INT, "line"))); ADD_SIGNAL(MethodInfo("request_save_history")); ADD_SIGNAL(MethodInfo("go_to_help", PropertyInfo(Variant::STRING, "what"))); @@ -210,6 +210,9 @@ void ScriptEditorQuickOpen::_notification(int p_what) { search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); } break; + case NOTIFICATION_EXIT_TREE: { + disconnect("confirmed", this, "_confirmed"); + } break; } } @@ -490,7 +493,7 @@ void ScriptEditor::_open_recent_script(int p_idx) { edit(text_file, true); return; } - // if it's a path then its most likely a deleted file not help + // if it's a path then it's most likely a deleted file not help } else if (path.find("::") != -1) { // built-in script Ref<Script> script = ResourceLoader::load(path); @@ -972,13 +975,9 @@ void ScriptEditor::_menu_option(int p_option) { help_search_dialog->popup_dialog(); } break; - case SEARCH_CLASSES: { - - help_index->popup_dialog(); - } break; case SEARCH_WEBSITE: { - OS::get_singleton()->shell_open("http://docs.godotengine.org/"); + OS::get_singleton()->shell_open("https://docs.godotengine.org/"); } break; case WINDOW_NEXT: { @@ -1203,12 +1202,6 @@ void ScriptEditor::_menu_option(int p_option) { if (help) { switch (p_option) { - - case SEARCH_CLASSES: { - - help_index->popup_dialog(); - help_index->call_deferred("select_class", help->get_class()); - } break; case HELP_SEARCH_FIND: { help->popup_search(); } break; @@ -1315,7 +1308,6 @@ void ScriptEditor::_notification(int p_what) { EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed"); help_search->set_icon(get_icon("HelpSearch", "EditorIcons")); site_search->set_icon(get_icon("Instance", "EditorIcons")); - class_search->set_icon(get_icon("ClassList", "EditorIcons")); script_forward->set_icon(get_icon("Forward", "EditorIcons")); script_back->set_icon(get_icon("Back", "EditorIcons")); @@ -1327,7 +1319,6 @@ void ScriptEditor::_notification(int p_what) { get_tree()->connect("tree_changed", this, "_tree_changed"); editor->get_inspector_dock()->connect("request_help", this, "_request_help"); editor->connect("request_help_search", this, "_help_search"); - editor->connect("request_help_index", this, "_help_index"); } break; case NOTIFICATION_EXIT_TREE: { @@ -1347,7 +1338,6 @@ void ScriptEditor::_notification(int p_what) { help_search->set_icon(get_icon("HelpSearch", "EditorIcons")); site_search->set_icon(get_icon("Instance", "EditorIcons")); - class_search->set_icon(get_icon("ClassList", "EditorIcons")); script_forward->set_icon(get_icon("Forward", "EditorIcons")); script_back->set_icon(get_icon("Back", "EditorIcons")); @@ -1363,7 +1353,9 @@ void ScriptEditor::_notification(int p_what) { if (is_visible()) { find_in_files_button->show(); } else { - find_in_files->hide(); + if (find_in_files->is_visible_in_tree()) { + editor->hide_bottom_panel(); + } find_in_files_button->hide(); } @@ -1824,6 +1816,10 @@ Ref<TextFile> ScriptEditor::_load_text_file(const String &p_path, Error *r_error text_file->set_file_path(local_path); text_file->set_path(local_path, true); + if (ResourceLoader::get_timestamp_on_load()) { + text_file->set_last_modified_time(FileAccess::get_modified_time(path)); + } + if (r_error) { *r_error = OK; } @@ -1853,6 +1849,10 @@ Error ScriptEditor::_save_text_file(Ref<TextFile> p_text_file, const String &p_p file->close(); memdelete(file); + if (ResourceSaver::get_timestamp_on_save()) { + p_text_file->set_last_modified_time(FileAccess::get_modified_time(p_path)); + } + _res_saved_callback(sqscr); return OK; } @@ -1960,7 +1960,7 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra // doesn't have it, make a new one - ScriptEditorBase *se; + ScriptEditorBase *se = NULL; for (int i = script_editor_func_count - 1; i >= 0; i--) { se = script_editor_funcs[i](p_resource); @@ -2001,7 +2001,7 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra _save_layout(); se->connect("name_changed", this, "_update_script_names"); se->connect("edited_script_changed", this, "_script_changed"); - se->connect("request_help_search", this, "_help_search"); + se->connect("request_help", this, "_help_search"); se->connect("request_open_script_at_line", this, "_goto_script_line"); se->connect("go_to_help", this, "_help_class_goto"); se->connect("request_save_history", this, "_save_history"); @@ -2728,10 +2728,6 @@ void ScriptEditor::set_live_auto_reload_running_scripts(bool p_enabled) { auto_reload_running_scripts = p_enabled; } -void ScriptEditor::_help_index(String p_text) { - help_index->popup_dialog(); -} - void ScriptEditor::_help_search(String p_text) { help_search_dialog->popup_dialog(p_text); } @@ -2783,13 +2779,18 @@ void ScriptEditor::_on_find_in_files_requested(String text) { void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_number, int begin, int end) { RES res = ResourceLoader::load(fpath); - edit(res); - - ScriptEditorBase *seb = _get_current_editor(); + if (fpath.get_extension() == "shader") { + 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); + } else { + edit(res); - ScriptTextEditor *ste = Object::cast_to<ScriptTextEditor>(seb); - if (ste) { - ste->goto_line_selection(line_number - 1, begin, end); + ScriptTextEditor *ste = Object::cast_to<ScriptTextEditor>(_get_current_editor()); + if (ste) { + ste->goto_line_selection(line_number - 1, begin, end); + } } } @@ -2806,8 +2807,7 @@ void ScriptEditor::_start_find_in_files(bool with_replace) { find_in_files->set_with_replace(with_replace); find_in_files->start_search(); - find_in_files_button->set_pressed(true); - find_in_files->show(); + editor->make_bottom_panel_item_visible(find_in_files); } void ScriptEditor::_on_find_in_files_modified_files(PoolStringArray paths) { @@ -2838,7 +2838,6 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_goto_script_line", &ScriptEditor::_goto_script_line); ClassDB::bind_method("_goto_script_line2", &ScriptEditor::_goto_script_line2); ClassDB::bind_method("_help_search", &ScriptEditor::_help_search); - ClassDB::bind_method("_help_index", &ScriptEditor::_help_index); ClassDB::bind_method("_save_history", &ScriptEditor::_save_history); ClassDB::bind_method("_copy_script_path", &ScriptEditor::_copy_script_path); @@ -2891,7 +2890,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { restoring_layout = false; waiting_update_names = false; pending_auto_reload = false; - auto_reload_running_scripts = false; + auto_reload_running_scripts = true; members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/show_members_overview"); help_overview_enabled = EditorSettings::get_singleton()->get("text_editor/help/show_help_index"); editor = p_editor; @@ -2912,7 +2911,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { script_list = memnew(ItemList); list_split->add_child(script_list); - script_list->set_custom_minimum_size(Size2(150 * EDSCALE, 90)); //need to give a bit of limit to avoid it from disappearing + script_list->set_custom_minimum_size(Size2(150, 90) * EDSCALE); //need to give a bit of limit to avoid it from disappearing script_list->set_v_size_flags(SIZE_EXPAND_FILL); script_split->set_split_offset(140); _sort_list_on_update = true; @@ -2951,7 +2950,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { overview_vbox->add_child(members_overview); members_overview->set_allow_reselect(true); - members_overview->set_custom_minimum_size(Size2(0, 90)); //need to give a bit of limit to avoid it from disappearing + members_overview->set_custom_minimum_size(Size2(0, 90) * EDSCALE); //need to give a bit of limit to avoid it from disappearing members_overview->set_v_size_flags(SIZE_EXPAND_FILL); members_overview->set_allow_rmb_select(true); members_overview->set_drag_forwarding(this); @@ -2959,12 +2958,12 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { help_overview = memnew(ItemList); overview_vbox->add_child(help_overview); help_overview->set_allow_reselect(true); - help_overview->set_custom_minimum_size(Size2(0, 90)); //need to give a bit of limit to avoid it from disappearing + help_overview->set_custom_minimum_size(Size2(0, 90) * EDSCALE); //need to give a bit of limit to avoid it from disappearing help_overview->set_v_size_flags(SIZE_EXPAND_FILL); tab_container = memnew(TabContainer); tab_container->set_tabs_visible(false); - tab_container->set_custom_minimum_size(Size2(200 * EDSCALE, 0)); + tab_container->set_custom_minimum_size(Size2(200, 0) * EDSCALE); script_split->add_child(tab_container); tab_container->set_h_size_flags(SIZE_EXPAND_FILL); @@ -2997,7 +2996,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R), FILE_TOOL_RELOAD_SOFT); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/copy_path", TTR("Copy Script Path")), FILE_COPY_PATH); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/show_in_file_system", TTR("Show In File System")), SHOW_IN_FILE_SYSTEM); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/show_in_file_system", TTR("Show in FileSystem")), SHOW_IN_FILE_SYSTEM); file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Previous"), KEY_MASK_ALT | KEY_LEFT), WINDOW_PREV); @@ -3073,12 +3072,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { menu_hb->add_child(site_search); site_search->set_tooltip(TTR("Open Godot online documentation")); - class_search = memnew(ToolButton); - class_search->set_text(TTR("Classes")); - class_search->connect("pressed", this, "_menu_option", varray(SEARCH_CLASSES)); - menu_hb->add_child(class_search); - class_search->set_tooltip(TTR("Search the class hierarchy.")); - help_search = memnew(ToolButton); help_search->set_text(TTR("Search Help")); help_search->connect("pressed", this, "_menu_option", varray(SEARCH_HELP)); @@ -3164,18 +3157,13 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { add_child(help_search_dialog); help_search_dialog->connect("go_to_help", this, "_help_class_goto"); - help_index = memnew(EditorHelpIndex); - add_child(help_index); - help_index->connect("open_class", this, "_help_class_open"); - find_in_files_dialog = memnew(FindInFilesDialog); find_in_files_dialog->connect(FindInFilesDialog::SIGNAL_FIND_REQUESTED, this, "_start_find_in_files", varray(false)); find_in_files_dialog->connect(FindInFilesDialog::SIGNAL_REPLACE_REQUESTED, this, "_start_find_in_files", varray(true)); add_child(find_in_files_dialog); find_in_files = memnew(FindInFilesPanel); - find_in_files_button = editor->add_bottom_panel_item(TTR("Search results"), find_in_files); - find_in_files_button->set_tooltip(TTR("Search in files")); - find_in_files->set_custom_minimum_size(Size2(0, 200)); + find_in_files_button = editor->add_bottom_panel_item(TTR("Search Results"), find_in_files); + find_in_files->set_custom_minimum_size(Size2(0, 200) * EDSCALE); find_in_files->connect(FindInFilesPanel::SIGNAL_RESULT_SELECTED, this, "_on_find_in_files_result_selected"); find_in_files->connect(FindInFilesPanel::SIGNAL_FILES_MODIFIED, this, "_on_find_in_files_modified_files"); find_in_files->hide(); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index 28c07393f7..4be5345aaa 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -34,6 +34,7 @@ #include "core/script_language.h" #include "editor/code_editor.h" #include "editor/editor_help.h" +#include "editor/editor_help_search.h" #include "editor/editor_plugin.h" #include "editor/script_create_dialog.h" #include "scene/gui/item_list.h" @@ -155,7 +156,6 @@ class ScriptEditor : public PanelContainer { DEBUG_SHOW_KEEP_OPEN, DEBUG_WITH_EXTERNAL_EDITOR, SEARCH_HELP, - SEARCH_CLASSES, SEARCH_WEBSITE, HELP_SEARCH_FIND, HELP_SEARCH_FIND_NEXT, @@ -200,7 +200,6 @@ class ScriptEditor : public PanelContainer { Button *help_search; Button *site_search; - Button *class_search; EditorHelpSearch *help_search_dialog; ItemList *script_list; @@ -254,7 +253,7 @@ class ScriptEditor : public PanelContainer { Vector<ScriptHistory> history; int history_pos; - EditorHelpIndex *help_index; + Vector<String> previous_scripts; void _tab_changed(int p_which); void _menu_option(int p_option); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 9b968c3523..e6bb8b24a9 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -179,7 +179,7 @@ void ScriptTextEditor::_load_theme_settings() { text_edit->add_color_override("search_result_border_color", search_result_border_color); text_edit->add_color_override("symbol_color", symbol_color); - text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/theme/line_spacing", 4)); + text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/theme/line_spacing", 6)); colors_cache.symbol_color = symbol_color; colors_cache.keyword_color = keyword_color; @@ -443,6 +443,7 @@ void ScriptTextEditor::_validate_script() { if (!script->get_language()->validate(text, line, col, errortxt, script->get_path(), &fnc, &warnings, &safe_lines)) { String error_text = "error(" + itos(line) + "," + itos(col) + "): " + errortxt; code_editor->set_error(error_text); + code_editor->set_error_pos(line - 1, col - 1); } else { code_editor->set_error(""); line = -1; @@ -773,7 +774,7 @@ void ScriptTextEditor::_edit_option(int p_op) { } break; case EDIT_CLONE_DOWN: { - code_editor->code_lines_down(); + code_editor->clone_lines_down(); } break; case EDIT_TOGGLE_FOLD_LINE: { @@ -817,6 +818,9 @@ void ScriptTextEditor::_edit_option(int p_op) { if (tx->get_selection_to_column() == 0) end -= 1; + int col_to = tx->get_selection_to_column(); + int cursor_pos = tx->cursor_get_column(); + // Check if all lines in the selected block are commented bool is_commented = true; for (int i = begin; i <= end; i++) { @@ -839,19 +843,42 @@ void ScriptTextEditor::_edit_option(int p_op) { } tx->set_line(i, line_text); } + + // Adjust selection & cursor position. + int offset = is_commented ? -1 : 1; + int col_from = tx->get_selection_from_column() > 0 ? tx->get_selection_from_column() + offset : 0; + + if (is_commented && tx->cursor_get_column() == tx->get_line(tx->cursor_get_line()).length() + 1) + cursor_pos += 1; + + if (tx->get_selection_to_column() != 0 && col_to != tx->get_line(tx->get_selection_to_line()).length() + 1) + col_to += offset; + + if (tx->cursor_get_column() != 0) + cursor_pos += offset; + + tx->select(begin, col_from, tx->get_selection_to_line(), col_to); + tx->cursor_set_column(cursor_pos); + } else { int begin = tx->cursor_get_line(); String line_text = tx->get_line(begin); - if (line_text.begins_with(delimiter)) + int col = tx->cursor_get_column(); + if (line_text.begins_with(delimiter)) { line_text = line_text.substr(delimiter.length(), line_text.length()); - else + col -= 1; + } else { line_text = delimiter + line_text; + col += 1; + } + tx->set_line(begin, line_text); + tx->cursor_set_column(col); } tx->end_complex_operation(); tx->update(); - //tx->deselect(); + } break; case EDIT_COMPLETE: { @@ -1023,7 +1050,7 @@ void ScriptTextEditor::_edit_option(int p_op) { if (text == "") text = tx->get_word_under_cursor(); if (text != "") { - emit_signal("request_help_search", text); + emit_signal("request_help", text); } } break; case LOOKUP_SYMBOL: { @@ -1557,8 +1584,8 @@ void ScriptTextEditor::register_editor() { ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD | KEY_SPACE); #endif ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_T); - ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent To Spaces"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Y); - ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent To Tabs"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_I); + ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent to Spaces"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Y); + ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent to Tabs"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_I); ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD | KEY_I); #ifdef OSX_ENABLED diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 17f93b55a1..914901b29a 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -193,6 +193,7 @@ void ShaderTextEditor::_validate_script() { if (err != OK) { String error_text = "error(" + itos(sl.get_error_line()) + "): " + sl.get_error_text(); set_error(error_text); + set_error_pos(sl.get_error_line() - 1, 0); for (int i = 0; i < get_text_edit()->get_line_count(); i++) get_text_edit()->set_line_as_marked(i, false); get_text_edit()->set_line_as_marked(sl.get_error_line() - 1, true); @@ -263,7 +264,7 @@ void ShaderEditor::_menu_option(int p_option) { shader_editor->delete_lines(); } break; case EDIT_CLONE_DOWN: { - shader_editor->code_lines_down(); + shader_editor->clone_lines_down(); } break; case EDIT_TOGGLE_COMMENT: { @@ -349,9 +350,9 @@ void ShaderEditor::_menu_option(int p_option) { void ShaderEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { - } - if (p_what == NOTIFICATION_DRAW) { + if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + if (is_visible_in_tree()) + shader_editor->get_text_edit()->grab_focus(); } } @@ -388,7 +389,6 @@ void ShaderEditor::_bind_methods() { ClassDB::bind_method("_menu_option", &ShaderEditor::_menu_option); ClassDB::bind_method("_params_changed", &ShaderEditor::_params_changed); ClassDB::bind_method("apply_shaders", &ShaderEditor::apply_shaders); - //ClassDB::bind_method("_close_current_tab",&ShaderEditor::_close_current_tab); } void ShaderEditor::ensure_select_current() { @@ -404,6 +404,11 @@ void ShaderEditor::ensure_select_current() { }*/ } +void ShaderEditor::goto_line_selection(int p_line, int p_begin, int p_end) { + + shader_editor->goto_line_selection(p_line, p_begin, p_end); +} + void ShaderEditor::edit(const Ref<Shader> &p_shader) { if (p_shader.is_null() || !p_shader->is_text_shader()) diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h index 2ea1562310..46e3dffdd5 100644 --- a/editor/plugins/shader_editor_plugin.h +++ b/editor/plugins/shader_editor_plugin.h @@ -120,6 +120,8 @@ public: void ensure_select_current(); void edit(const Ref<Shader> &p_shader); + void goto_line_selection(int p_line, int p_begin, int p_end); + virtual Size2 get_minimum_size() const { return Size2(0, 200); } void save_external_data(); @@ -143,6 +145,8 @@ public: virtual void make_visible(bool p_visible); virtual void selected_notify(); + ShaderEditor *get_shader_editor() const { return shader_editor; } + virtual void save_external_data(); virtual void apply_changes(); diff --git a/editor/plugins/skeleton_editor_plugin.cpp b/editor/plugins/skeleton_editor_plugin.cpp index e7d9f1b702..8b0beefb3e 100644 --- a/editor/plugins/skeleton_editor_plugin.cpp +++ b/editor/plugins/skeleton_editor_plugin.cpp @@ -151,6 +151,7 @@ void SkeletonEditor::_bind_methods() { } SkeletonEditor::SkeletonEditor() { + skeleton = NULL; options = memnew(MenuButton); SpatialEditor::get_singleton()->add_control_to_menu_panel(options); diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index 114610c562..cc5f50a834 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -534,9 +534,9 @@ void SpatialEditorViewport::_update_name() { String view_mode = orthogonal ? TTR("Orthogonal") : TTR("Perspective"); if (name != "") - view_menu->set_text("[ " + name + " " + view_mode + " ]"); + view_menu->set_text(name + " " + view_mode); else - view_menu->set_text("[ " + view_mode + " ]"); + view_menu->set_text(view_mode); view_menu->set_size(Vector2(0, 0)); // resets the button size } @@ -952,8 +952,10 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (b->is_pressed()) { int mod = _get_key_modifier(b); - if (mod == _get_key_modifier_setting("editors/3d/freelook/freelook_activation_modifier")) { - set_freelook_active(true); + if (!orthogonal) { + if (mod == _get_key_modifier_setting("editors/3d/freelook/freelook_activation_modifier")) { + set_freelook_active(true); + } } } else { set_freelook_active(false); @@ -1134,7 +1136,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { } if (clicked) { _select_clicked(clicked_wants_append, true); - //clickd processing was deferred + // Processing was deferred. clicked = 0; } @@ -1241,7 +1243,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (!clicked_includes_current) { _select_clicked(clicked_wants_append, true); - //clickd processing was deferred + // Processing was deferred. } _compute_edit(_edit.mouse_pos); @@ -1339,7 +1341,8 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { List<Node *> &selection = editor_selection->get_selected_node_list(); - bool local_coords = (spatial_editor->are_local_coords_enabled() && _edit.plane != TRANSFORM_VIEW); // Disable local transformation for TRANSFORM_VIEW + // Disable local transformation for TRANSFORM_VIEW + bool local_coords = (spatial_editor->are_local_coords_enabled() && _edit.plane != TRANSFORM_VIEW); float snap = 0; if (_edit.snap || spatial_editor->is_snap_enabled()) { @@ -1468,7 +1471,8 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { List<Node *> &selection = editor_selection->get_selected_node_list(); - bool local_coords = (spatial_editor->are_local_coords_enabled() && _edit.plane != TRANSFORM_VIEW); // Disable local transformation for TRANSFORM_VIEW + // Disable local transformation for TRANSFORM_VIEW + bool local_coords = (spatial_editor->are_local_coords_enabled() && _edit.plane != TRANSFORM_VIEW); float snap = 0; if (_edit.snap || spatial_editor->is_snap_enabled()) { @@ -1643,6 +1647,8 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { nav_mode = NAVIGATION_ZOOM; } else if (freelook_active) { nav_mode = NAVIGATION_LOOK; + } else if (orthogonal) { + nav_mode = NAVIGATION_PAN; } } else if (m->get_button_mask() & BUTTON_MASK_MIDDLE) { @@ -1793,7 +1799,8 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (ED_IS_SHORTCUT("spatial_editor/focus_selection", p_event)) { _menu_option(VIEW_CENTER_TO_SELECTION); } - if (ED_IS_SHORTCUT("spatial_editor/switch_perspective_orthogonal", p_event)) { + // Orthgonal mode doesn't work in freelook. + if (!freelook_active && ED_IS_SHORTCUT("spatial_editor/switch_perspective_orthogonal", p_event)) { _menu_option(orthogonal ? VIEW_PERSPECTIVE : VIEW_ORTHOGONAL); _update_name(); } @@ -1823,7 +1830,8 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { set_message(TTR("Animation Key Inserted.")); } - if (ED_IS_SHORTCUT("spatial_editor/freelook_toggle", p_event)) { + // Freelook doesn't work in orthogonal mode. + if (!orthogonal && ED_IS_SHORTCUT("spatial_editor/freelook_toggle", p_event)) { set_freelook_active(!is_freelook_active()); } else if (k->get_scancode() == KEY_ESCAPE) { @@ -1893,7 +1901,7 @@ void SpatialEditorViewport::_nav_orbit(Ref<InputEventWithModifiers> p_event, con real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); - bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y-axis"); + bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y_axis"); if (invert_y_axis) { cursor.x_rot -= p_relative.y * radians_per_pixel; @@ -1911,37 +1919,38 @@ void SpatialEditorViewport::_nav_orbit(Ref<InputEventWithModifiers> p_event, con void SpatialEditorViewport::_nav_look(Ref<InputEventWithModifiers> p_event, const Vector2 &p_relative) { - // Freelook only works properly in perspective. - // It could technically work in ortho, but it's terrible for a user due to FOV being a fixed width. - if (!orthogonal) { - real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); - real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); - bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y-axis"); - - // Note: do NOT assume the camera has the "current" transform, because it is interpolated and may have "lag". - Transform prev_camera_transform = to_camera_transform(cursor); + if (orthogonal) { + _nav_pan(p_event, p_relative); + return; + } - if (invert_y_axis) { - cursor.x_rot -= p_relative.y * radians_per_pixel; - } else { - cursor.x_rot += p_relative.y * radians_per_pixel; - } - cursor.y_rot += p_relative.x * radians_per_pixel; - if (cursor.x_rot > Math_PI / 2.0) - cursor.x_rot = Math_PI / 2.0; - if (cursor.x_rot < -Math_PI / 2.0) - cursor.x_rot = -Math_PI / 2.0; + real_t degrees_per_pixel = EditorSettings::get_singleton()->get("editors/3d/navigation_feel/orbit_sensitivity"); + real_t radians_per_pixel = Math::deg2rad(degrees_per_pixel); + bool invert_y_axis = EditorSettings::get_singleton()->get("editors/3d/navigation/invert_y_axis"); - // Look is like the opposite of Orbit: the focus point rotates around the camera - Transform camera_transform = to_camera_transform(cursor); - Vector3 pos = camera_transform.xform(Vector3(0, 0, 0)); - Vector3 prev_pos = prev_camera_transform.xform(Vector3(0, 0, 0)); - Vector3 diff = prev_pos - pos; - cursor.pos += diff; + // Note: do NOT assume the camera has the "current" transform, because it is interpolated and may have "lag". + Transform prev_camera_transform = to_camera_transform(cursor); - name = ""; - _update_name(); + if (invert_y_axis) { + cursor.x_rot -= p_relative.y * radians_per_pixel; + } else { + cursor.x_rot += p_relative.y * radians_per_pixel; } + cursor.y_rot += p_relative.x * radians_per_pixel; + if (cursor.x_rot > Math_PI / 2.0) + cursor.x_rot = Math_PI / 2.0; + if (cursor.x_rot < -Math_PI / 2.0) + cursor.x_rot = -Math_PI / 2.0; + + // Look is like the opposite of Orbit: the focus point rotates around the camera + Transform camera_transform = to_camera_transform(cursor); + Vector3 pos = camera_transform.xform(Vector3(0, 0, 0)); + Vector3 prev_pos = prev_camera_transform.xform(Vector3(0, 0, 0)); + Vector3 diff = prev_pos - pos; + cursor.pos += diff; + + name = ""; + _update_name(); } void SpatialEditorViewport::set_freelook_active(bool active_now) { @@ -2124,7 +2133,7 @@ void SpatialEditorViewport::_notification(int p_what) { _update_freelook(delta); Node *scene_root = editor->get_scene_tree_dock()->get_editor_data()->get_edited_scene_root(); - if (previewing_cinema == true && scene_root != NULL) { + if (previewing_cinema && scene_root != NULL) { Camera *cam = scene_root->get_viewport()->get_camera(); if (cam != NULL && cam != previewing) { //then switch the viewport's camera to the scene's viewport camera @@ -2222,8 +2231,21 @@ void SpatialEditorViewport::_notification(int p_what) { bool show_info = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION)); info_label->set_visible(show_info); + Camera *current_camera; + + if (previewing) { + current_camera = previewing; + } else { + current_camera = camera; + } + if (show_info) { String text; + text += "X: " + rtos(current_camera->get_translation().x).pad_decimals(1) + "\n"; + text += "Y: " + rtos(current_camera->get_translation().y).pad_decimals(1) + "\n"; + text += "Z: " + rtos(current_camera->get_translation().z).pad_decimals(1) + "\n"; + text += TTR("Pitch") + ": " + itos(Math::round(current_camera->get_rotation_degrees().x)) + "\n"; + text += TTR("Yaw") + ": " + itos(Math::round(current_camera->get_rotation_degrees().y)) + "\n\n"; text += TTR("Objects Drawn") + ": " + itos(viewport->get_render_info(Viewport::RENDER_INFO_OBJECTS_IN_FRAME)) + "\n"; text += TTR("Material Changes") + ": " + itos(viewport->get_render_info(Viewport::RENDER_INFO_MATERIAL_CHANGES_IN_FRAME)) + "\n"; text += TTR("Shader Changes") + ": " + itos(viewport->get_render_info(Viewport::RENDER_INFO_SHADER_CHANGES_IN_FRAME)) + "\n"; @@ -2250,6 +2272,11 @@ void SpatialEditorViewport::_notification(int p_what) { float cinema_half_width = cinema_label->get_size().width / 2.0f; cinema_label->set_anchor_and_margin(MARGIN_LEFT, 0.5f, -cinema_half_width); } + + if (lock_rotation) { + float locked_half_width = locked_label->get_size().width / 2.0f; + locked_label->set_anchor_and_margin(MARGIN_LEFT, 0.5f, -locked_half_width); + } } if (p_what == NOTIFICATION_ENTER_TREE) { @@ -2260,21 +2287,36 @@ void SpatialEditorViewport::_notification(int p_what) { surface->connect("mouse_exited", this, "_surface_mouse_exit"); surface->connect("focus_entered", this, "_surface_focus_enter"); surface->connect("focus_exited", this, "_surface_focus_exit"); - info_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); - fps_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); - cinema_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); - preview_camera->set_icon(get_icon("Camera", "EditorIcons")); + _init_gizmo_instance(index); } + if (p_what == NOTIFICATION_EXIT_TREE) { _finish_gizmo_instances(); } - if (p_what == NOTIFICATION_MOUSE_ENTER) { - } + if (p_what == NOTIFICATION_THEME_CHANGED) { + + view_menu->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + preview_camera->set_icon(get_icon("Camera", "EditorIcons")); + + view_menu->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + view_menu->add_style_override("hover", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + view_menu->add_style_override("pressed", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + view_menu->add_style_override("focus", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + view_menu->add_style_override("disabled", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); - if (p_what == NOTIFICATION_DRAW) { + preview_camera->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + preview_camera->add_style_override("hover", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + preview_camera->add_style_override("pressed", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + preview_camera->add_style_override("focus", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + preview_camera->add_style_override("disabled", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + + info_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + fps_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + cinema_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + locked_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); } } @@ -2515,8 +2557,14 @@ void SpatialEditorViewport::_menu_option(int p_option) { if (!se) continue; - Transform xform = camera_transform; - xform.scale_basis(sp->get_scale()); + Transform xform; + if (orthogonal) { + xform = sp->get_global_transform(); + xform.basis.set_euler(camera_transform.basis.get_euler()); + } else { + xform = camera_transform; + xform.scale_basis(sp->get_scale()); + } undo_redo->add_do_method(sp, "set_global_transform", xform); undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_gizmo_transform()); @@ -2564,9 +2612,9 @@ void SpatialEditorViewport::_menu_option(int p_option) { lock_rotation = !current; view_menu->get_popup()->set_item_checked(idx, !current); if (lock_rotation) { - view_menu->set_icon(get_icon("Lock", "EditorIcons")); + locked_label->show(); } else { - view_menu->set_icon(Ref<Texture>()); + locked_label->hide(); } } break; @@ -2636,11 +2684,6 @@ void SpatialEditorViewport::_menu_option(int p_option) { bool current = view_menu->get_popup()->is_item_checked(idx); view_menu->get_popup()->set_item_checked(idx, !current); - if (current) - preview_camera->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); - else - preview_camera->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 15 * EDSCALE + fps_label->get_size().height); - } break; case VIEW_DISPLAY_NORMAL: { @@ -2754,7 +2797,7 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) { VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), camera->get_camera()); //restore if (!preview) preview_camera->hide(); - view_menu->show(); + view_menu->set_disabled(false); surface->update(); } else { @@ -2762,7 +2805,7 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) { previewing = preview; previewing->connect("tree_exiting", this, "_preview_exited_scene"); VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), preview->get_camera()); //replace - view_menu->hide(); + view_menu->set_disabled(true); surface->update(); } } @@ -3195,7 +3238,7 @@ bool SpatialEditorViewport::_create_instance(Node *parent, String &path, const P if (mesh != NULL) { MeshInstance *mesh_instance = memnew(MeshInstance); mesh_instance->set_mesh(mesh); - mesh_instance->set_name(mesh->get_name()); + mesh_instance->set_name(path.get_file().get_basename()); instanced_scene = mesh_instance; } else { if (!scene.is_valid()) { // invalid scene @@ -3419,9 +3462,10 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed surface->set_focus_mode(FOCUS_ALL); view_menu = memnew(MenuButton); + view_menu->set_flat(false); surface->add_child(view_menu); - view_menu->set_position(Point2(4, 4) * EDSCALE); - view_menu->set_self_modulate(Color(1, 1, 1, 0.5)); + view_menu->set_position(Point2(10, 10) * EDSCALE); + view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/top_view"), VIEW_TOP); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/bottom_view"), VIEW_BOTTOM); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/left_view"), VIEW_LEFT); @@ -3472,12 +3516,8 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed ED_SHORTCUT("spatial_editor/freelook_down", TTR("Freelook Down"), KEY_Q); ED_SHORTCUT("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), KEY_SHIFT); - preview_camera = memnew(Button); - preview_camera->set_toggle_mode(true); - preview_camera->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE); - preview_camera->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); - preview_camera->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -10 * EDSCALE); - preview_camera->set_h_grow_direction(GROW_DIRECTION_BEGIN); + preview_camera = memnew(CheckBox); + preview_camera->set_position(Point2(10, 38) * EDSCALE); // Below the 'view_menu' MenuButton. preview_camera->set_text(TTR("Preview")); surface->add_child(preview_camera); preview_camera->hide(); @@ -3497,7 +3537,6 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed surface->add_child(info_label); info_label->hide(); - // FPS Counter. fps_label = memnew(Label); fps_label->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE); fps_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); @@ -3515,6 +3554,16 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed cinema_label->hide(); previewing_cinema = false; + locked_label = memnew(Label); + locked_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_END, -20 * EDSCALE); + locked_label->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, -10 * EDSCALE); + locked_label->set_h_grow_direction(GROW_DIRECTION_END); + locked_label->set_v_grow_direction(GROW_DIRECTION_BEGIN); + locked_label->set_align(Label::ALIGN_CENTER); + surface->add_child(locked_label); + locked_label->set_text(TTR("View Rotation Locked")); + locked_label->hide(); + accept = NULL; freelook_active = false; @@ -4155,10 +4204,10 @@ void SpatialEditor::set_state(const Dictionary &p_state) { gizmo_plugins.write[j]->set_state(state); switch (state) { - case EditorSpatialGizmoPlugin::ON_TOP: + case EditorSpatialGizmoPlugin::VISIBLE: gizmos_menu->set_item_icon(idx, gizmos_menu->get_icon("visibility_visible")); break; - case EditorSpatialGizmoPlugin::VISIBLE: + case EditorSpatialGizmoPlugin::ON_TOP: gizmos_menu->set_item_icon(idx, gizmos_menu->get_icon("visibility_xray")); break; case EditorSpatialGizmoPlugin::HIDDEN: @@ -4268,10 +4317,10 @@ void SpatialEditor::_menu_gizmo_toggled(int p_option) { // Change icon const int state = gizmos_menu->get_item_state(idx); switch (state) { - case EditorSpatialGizmoPlugin::ON_TOP: + case EditorSpatialGizmoPlugin::VISIBLE: gizmos_menu->set_item_icon(idx, view_menu->get_popup()->get_icon("visibility_visible")); break; - case EditorSpatialGizmoPlugin::VISIBLE: + case EditorSpatialGizmoPlugin::ON_TOP: gizmos_menu->set_item_icon(idx, view_menu->get_popup()->get_icon("visibility_xray")); break; case EditorSpatialGizmoPlugin::HIDDEN: @@ -4790,7 +4839,7 @@ void SpatialEditor::_init_gizmos_menu() { for (int i = 0; i < gizmo_plugins.size(); ++i) { if (!gizmo_plugins[i]->can_be_hidden()) continue; String plugin_name = gizmo_plugins[i]->get_name(); - gizmos_menu->add_multistate_item(TTR(plugin_name), 3, EditorSpatialGizmoPlugin::ON_TOP, i); + gizmos_menu->add_multistate_item(TTR(plugin_name), 3, EditorSpatialGizmoPlugin::VISIBLE, i); gizmos_menu->set_item_icon(gizmos_menu->get_item_index(i), gizmos_menu->get_icon("visibility_visible")); } } @@ -5438,7 +5487,6 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { view_menu = memnew(MenuButton); view_menu->set_text(TTR("View")); - view_menu->set_position(Point2(212, 0)); hbc_menu->add_child(view_menu); p = view_menu->get_popup(); @@ -5871,7 +5919,7 @@ void EditorSpatialGizmoPlugin::unregister_gizmo(EditorSpatialGizmo *p_gizmo) { } EditorSpatialGizmoPlugin::EditorSpatialGizmoPlugin() { - current_state = ON_TOP; + current_state = VISIBLE; } EditorSpatialGizmoPlugin::~EditorSpatialGizmoPlugin() { diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index c552f21e39..c515a4aaf9 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -192,7 +192,7 @@ private: EditorSelection *editor_selection; UndoRedo *undo_redo; - Button *preview_camera; + CheckBox *preview_camera; ViewportContainer *viewport_container; MenuButton *view_menu; @@ -211,6 +211,7 @@ private: Label *info_label; Label *fps_label; Label *cinema_label; + Label *locked_label; struct _RayResult { @@ -753,9 +754,9 @@ class EditorSpatialGizmoPlugin : public Resource { GDCLASS(EditorSpatialGizmoPlugin, Resource); public: - static const int ON_TOP = 0; - static const int VISIBLE = 1; - static const int HIDDEN = 2; + static const int VISIBLE = 0; + static const int HIDDEN = 1; + static const int ON_TOP = 2; private: int current_state; diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 30246147c2..82936d63d2 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -548,7 +548,6 @@ void SpriteFramesEditor::edit(SpriteFrames *p_frames) { } else { hide(); - //set_physics_process(false); } } @@ -599,7 +598,7 @@ bool SpriteFramesEditor::can_drop_data_fw(const Point2 &p_point, const Variant & return false; for (int i = 0; i < files.size(); i++) { - String file = files[0]; + String file = files[i]; String ftype = EditorFileSystem::get_singleton()->get_file_type(file); if (!ClassDB::is_parent_class(ftype, "Texture")) { @@ -816,16 +815,26 @@ SpriteFramesEditor::SpriteFramesEditor() { void SpriteFramesEditorPlugin::edit(Object *p_object) { frames_editor->set_undo_redo(&get_undo_redo()); - SpriteFrames *s = Object::cast_to<SpriteFrames>(p_object); - if (!s) - return; + + SpriteFrames *s; + AnimatedSprite *animated_sprite = Object::cast_to<AnimatedSprite>(p_object); + if (animated_sprite) { + s = *animated_sprite->get_sprite_frames(); + } else { + s = Object::cast_to<SpriteFrames>(p_object); + } frames_editor->edit(s); } bool SpriteFramesEditorPlugin::handles(Object *p_object) const { - return p_object->is_class("SpriteFrames"); + AnimatedSprite *animated_sprite = Object::cast_to<AnimatedSprite>(p_object); + if (animated_sprite && *animated_sprite->get_sprite_frames()) { + return true; + } else { + return p_object->is_class("SpriteFrames"); + } } void SpriteFramesEditorPlugin::make_visible(bool p_visible) { @@ -833,14 +842,11 @@ void SpriteFramesEditorPlugin::make_visible(bool p_visible) { if (p_visible) { button->show(); editor->make_bottom_panel_item_visible(frames_editor); - //frames_editor->set_process(true); } else { button->hide(); if (frames_editor->is_visible_in_tree()) editor->hide_bottom_panel(); - - //frames_editor->set_process(false); } } diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 4ff7046a35..4a8eae1ba4 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -131,7 +131,7 @@ void TextEditor::_load_theme_settings() { text_edit->add_color_override("search_result_border_color", search_result_border_color); text_edit->add_color_override("symbol_color", symbol_color); - text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/theme/line_spacing", 4)); + text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/theme/line_spacing", 6)); colors_cache.font_color = text_color; colors_cache.symbol_color = symbol_color; @@ -360,7 +360,7 @@ void TextEditor::_edit_option(int p_op) { } break; case EDIT_CLONE_DOWN: { - code_editor->code_lines_down(); + code_editor->clone_lines_down(); } break; case EDIT_TOGGLE_FOLD_LINE: { diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index 33e1f7c6a3..aed3a7d503 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -169,15 +169,24 @@ void TextureRegionEditor::_region_draw() { updating_scroll = true; hscroll->set_min(scroll_rect.position.x); hscroll->set_max(scroll_rect.position.x + scroll_rect.size.x); - hscroll->set_page(edit_draw->get_size().x); - hscroll->set_value(draw_ofs.x); - hscroll->set_step(0.001); + if (ABS(scroll_rect.position.x - (scroll_rect.position.x + scroll_rect.size.x)) <= edit_draw->get_size().x) { + hscroll->hide(); + } else { + hscroll->show(); + hscroll->set_page(edit_draw->get_size().x); + hscroll->set_value(draw_ofs.x); + } vscroll->set_min(scroll_rect.position.y); vscroll->set_max(scroll_rect.position.y + scroll_rect.size.y); - vscroll->set_page(edit_draw->get_size().y); - vscroll->set_value(draw_ofs.y); - vscroll->set_step(0.001); + if (ABS(scroll_rect.position.y - (scroll_rect.position.y + scroll_rect.size.y)) <= edit_draw->get_size().y) { + vscroll->hide(); + draw_ofs.y = scroll_rect.position.y; + } else { + vscroll->show(); + vscroll->set_page(edit_draw->get_size().y); + vscroll->set_value(draw_ofs.y); + } updating_scroll = false; float margins[4]; @@ -299,6 +308,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { undo_redo->add_do_method(atlas_tex.ptr(), "set_region", rect); undo_redo->add_undo_method(atlas_tex.ptr(), "set_region", atlas_tex->get_region()); } + undo_redo->add_do_method(this, "_update_rect"); + undo_redo->add_undo_method(this, "_update_rect"); undo_redo->add_do_method(edit_draw, "update"); undo_redo->add_undo_method(edit_draw, "update"); undo_redo->commit_action(); @@ -336,7 +347,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } else if (drag) { if (edited_margin >= 0) { - undo_redo->create_action("Set Margin"); + undo_redo->create_action(TTR("Set Margin")); static Margin m[4] = { MARGIN_TOP, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT }; if (node_ninepatch) { undo_redo->add_do_method(node_ninepatch, "set_patch_margin", m[edited_margin], node_ninepatch->get_patch_margin(m[edited_margin])); @@ -348,7 +359,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } edited_margin = -1; } else { - undo_redo->create_action("Set Region Rect"); + undo_redo->create_action(TTR("Set Region Rect")); if (node_sprite) { undo_redo->add_do_method(node_sprite, "set_region_rect", node_sprite->get_region_rect()); undo_redo->add_undo_method(node_sprite, "set_region_rect", rect_prev); @@ -364,6 +375,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } drag_index = -1; } + undo_redo->add_do_method(this, "_update_rect"); + undo_redo->add_undo_method(this, "_update_rect"); undo_redo->add_do_method(edit_draw, "update"); undo_redo->add_undo_method(edit_draw, "update"); undo_redo->commit_action(); @@ -509,10 +522,7 @@ void TextureRegionEditor::_scroll_changed(float) { } void TextureRegionEditor::_set_snap_mode(int p_mode) { - snap_mode_button->get_popup()->set_item_checked(snap_mode, false); snap_mode = p_mode; - snap_mode_button->set_text(snap_mode_button->get_popup()->get_item_text(p_mode)); - snap_mode_button->get_popup()->set_item_checked(snap_mode, true); if (snap_mode == SNAP_GRID) hb_grid->show(); @@ -577,15 +587,26 @@ void TextureRegionEditor::_zoom_out() { } } -void TextureRegionEditor::apply_rect(const Rect2 &rect) { +void TextureRegionEditor::apply_rect(const Rect2 &p_rect) { + if (node_sprite) + node_sprite->set_region_rect(p_rect); + else if (node_ninepatch) + node_ninepatch->set_region_rect(p_rect); + else if (obj_styleBox.is_valid()) + obj_styleBox->set_region_rect(p_rect); + else if (atlas_tex.is_valid()) + atlas_tex->set_region(p_rect); +} + +void TextureRegionEditor::_update_rect() { if (node_sprite) - node_sprite->set_region_rect(rect); + rect = node_sprite->get_region_rect(); else if (node_ninepatch) - node_ninepatch->set_region_rect(rect); + rect = node_ninepatch->get_region_rect(); else if (obj_styleBox.is_valid()) - obj_styleBox->set_region_rect(rect); + rect = obj_styleBox->get_region_rect(); else if (atlas_tex.is_valid()) - atlas_tex->set_region(rect); + rect = atlas_tex->get_region(); } void TextureRegionEditor::_update_autoslice() { @@ -657,6 +678,10 @@ void TextureRegionEditor::_update_autoslice() { void TextureRegionEditor::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_THEME_CHANGED: { + edit_draw->add_style_override("panel", get_stylebox("bg", "Tree")); + } break; case NOTIFICATION_READY: { zoom_out->set_icon(get_icon("ZoomLess", "EditorIcons")); zoom_reset->set_icon(get_icon("ZoomReset", "EditorIcons")); @@ -669,7 +694,7 @@ void TextureRegionEditor::_notification(int p_what) { } break; case MainLoop::NOTIFICATION_WM_FOCUS_IN: { // This happens when the user leaves the Editor and returns, - // he/she could have changed the textures, so the cache is cleared + // they could have changed the textures, so the cache is cleared. cache_map.clear(); _edit_region(); } break; @@ -702,6 +727,7 @@ void TextureRegionEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_zoom_in"), &TextureRegionEditor::_zoom_in); ClassDB::bind_method(D_METHOD("_zoom_reset"), &TextureRegionEditor::_zoom_reset); ClassDB::bind_method(D_METHOD("_zoom_out"), &TextureRegionEditor::_zoom_out); + ClassDB::bind_method(D_METHOD("_update_rect"), &TextureRegionEditor::_update_rect); } bool TextureRegionEditor::is_stylebox() { @@ -774,6 +800,9 @@ void TextureRegionEditor::_edit_region() { texture = atlas_tex->get_atlas(); if (texture.is_null()) { + _zoom_reset(); + hscroll->hide(); + vscroll->hide(); edit_draw->update(); return; } @@ -790,15 +819,7 @@ void TextureRegionEditor::_edit_region() { } } - if (node_sprite) - rect = node_sprite->get_region_rect(); - else if (node_ninepatch) - rect = node_ninepatch->get_region_rect(); - else if (obj_styleBox.is_valid()) - rect = obj_styleBox->get_region_rect(); - else if (atlas_tex.is_valid()) - rect = atlas_tex->get_region(); - + _update_rect(); edit_draw->update(); } @@ -826,29 +847,23 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { drag_index = -1; drag = false; - VBoxContainer *main_vb = memnew(VBoxContainer); - add_child(main_vb); - main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE); HBoxContainer *hb_tools = memnew(HBoxContainer); - main_vb->add_child(hb_tools); - + add_child(hb_tools); hb_tools->add_child(memnew(Label(TTR("Snap Mode:")))); - snap_mode_button = memnew(MenuButton); + snap_mode_button = memnew(OptionButton); hb_tools->add_child(snap_mode_button); - snap_mode_button->set_text(TTR("<None>")); - PopupMenu *p = snap_mode_button->get_popup(); - p->set_hide_on_checkable_item_selection(false); - p->add_radio_check_item(TTR("<None>"), 0); - p->add_radio_check_item(TTR("Pixel Snap"), 1); - p->add_radio_check_item(TTR("Grid Snap"), 2); - p->add_radio_check_item(TTR("Auto Slice"), 3); - p->set_item_checked(0, true); - p->connect("id_pressed", this, "_set_snap_mode"); + snap_mode_button->add_item(TTR("None"), 0); + snap_mode_button->add_item(TTR("Pixel Snap"), 1); + snap_mode_button->add_item(TTR("Grid Snap"), 2); + snap_mode_button->add_item(TTR("Auto Slice"), 3); + snap_mode_button->select(0); + snap_mode_button->connect("item_selected", this, "_set_snap_mode"); + hb_grid = memnew(HBoxContainer); hb_tools->add_child(hb_grid); - hb_grid->add_child(memnew(VSeparator)); + hb_grid->add_child(memnew(VSeparator)); hb_grid->add_child(memnew(Label(TTR("Offset:")))); sb_off_x = memnew(SpinBox); @@ -913,42 +928,47 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { hb_grid->hide(); - HBoxContainer *main_hb = memnew(HBoxContainer); - main_vb->add_child(main_hb); - edit_draw = memnew(Control); - main_hb->add_child(edit_draw); - main_hb->set_v_size_flags(SIZE_EXPAND_FILL); - edit_draw->set_h_size_flags(SIZE_EXPAND_FILL); + edit_draw = memnew(Panel); + add_child(edit_draw); + edit_draw->set_v_size_flags(SIZE_EXPAND_FILL); + edit_draw->connect("draw", this, "_region_draw"); + edit_draw->connect("gui_input", this, "_region_input"); + + draw_zoom = 1.0; + edit_draw->set_clip_contents(true); - Control *separator = memnew(Control); - separator->set_h_size_flags(Control::SIZE_EXPAND_FILL); - hb_tools->add_child(separator); + HBoxContainer *zoom_hb = memnew(HBoxContainer); + edit_draw->add_child(zoom_hb); + zoom_hb->set_begin(Point2(5, 5)); zoom_out = memnew(ToolButton); + zoom_out->set_tooltip(TTR("Zoom Out")); zoom_out->connect("pressed", this, "_zoom_out"); - hb_tools->add_child(zoom_out); + zoom_hb->add_child(zoom_out); zoom_reset = memnew(ToolButton); + zoom_out->set_tooltip(TTR("Zoom Reset")); zoom_reset->connect("pressed", this, "_zoom_reset"); - hb_tools->add_child(zoom_reset); + zoom_hb->add_child(zoom_reset); zoom_in = memnew(ToolButton); + zoom_out->set_tooltip(TTR("Zoom In")); zoom_in->connect("pressed", this, "_zoom_in"); - hb_tools->add_child(zoom_in); + zoom_hb->add_child(zoom_in); vscroll = memnew(VScrollBar); - main_hb->add_child(vscroll); + vscroll->set_step(0.001); + edit_draw->add_child(vscroll); + vscroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); vscroll->connect("value_changed", this, "_scroll_changed"); hscroll = memnew(HScrollBar); - main_vb->add_child(hscroll); + hscroll->set_step(0.001); + edit_draw->add_child(hscroll); + hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + hscroll->set_margin(MARGIN_RIGHT, -vscroll->get_size().x * EDSCALE); hscroll->connect("value_changed", this, "_scroll_changed"); - edit_draw->connect("draw", this, "_region_draw"); - edit_draw->connect("gui_input", this, "_region_input"); - draw_zoom = 1.0; updating_scroll = false; - - edit_draw->set_clip_contents(true); } void TextureRegionEditorPlugin::edit(Object *p_object) { @@ -977,7 +997,6 @@ void TextureRegionEditorPlugin::make_visible(bool p_visible) { Dictionary TextureRegionEditorPlugin::get_state() const { Dictionary state; - state["zoom"] = region_editor->draw_zoom; state["snap_offset"] = region_editor->snap_offset; state["snap_step"] = region_editor->snap_step; state["snap_separation"] = region_editor->snap_separation; @@ -988,10 +1007,6 @@ Dictionary TextureRegionEditorPlugin::get_state() const { void TextureRegionEditorPlugin::set_state(const Dictionary &p_state) { Dictionary state = p_state; - if (state.has("zoom")) { - region_editor->draw_zoom = p_state["zoom"]; - } - if (state.has("snap_step")) { Vector2 s = state["snap_step"]; region_editor->sb_step_x->set_value(s.x); @@ -1015,6 +1030,7 @@ void TextureRegionEditorPlugin::set_state(const Dictionary &p_state) { if (state.has("snap_mode")) { region_editor->_set_snap_mode(state["snap_mode"]); + region_editor->snap_mode_button->select(state["snap_mode"]); } } diff --git a/editor/plugins/texture_region_editor_plugin.h b/editor/plugins/texture_region_editor_plugin.h index 61ef769f89..4f301ea916 100644 --- a/editor/plugins/texture_region_editor_plugin.h +++ b/editor/plugins/texture_region_editor_plugin.h @@ -43,9 +43,9 @@ @author Mariano Suligoy */ -class TextureRegionEditor : public Control { +class TextureRegionEditor : public VBoxContainer { - GDCLASS(TextureRegionEditor, Control); + GDCLASS(TextureRegionEditor, VBoxContainer); enum SnapMode { SNAP_NONE, @@ -55,7 +55,7 @@ class TextureRegionEditor : public Control { }; friend class TextureRegionEditorPlugin; - MenuButton *snap_mode_button; + OptionButton *snap_mode_button; ToolButton *zoom_in; ToolButton *zoom_reset; ToolButton *zoom_out; @@ -66,7 +66,7 @@ class TextureRegionEditor : public Control { SpinBox *sb_off_x; SpinBox *sb_sep_y; SpinBox *sb_sep_x; - Control *edit_draw; + Panel *edit_draw; VScrollBar *vscroll; HScrollBar *hscroll; @@ -111,7 +111,8 @@ class TextureRegionEditor : public Control { void _zoom_in(); void _zoom_reset(); void _zoom_out(); - void apply_rect(const Rect2 &rect); + void apply_rect(const Rect2 &p_rect); + void _update_rect(); void _update_autoslice(); protected: diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index aa4338d775..1d8a80d3f3 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -31,6 +31,7 @@ #include "tile_map_editor_plugin.h" #include "canvas_item_editor_plugin.h" +#include "core/math/math_funcs.h" #include "core/os/input.h" #include "core/os/keyboard.h" #include "editor/editor_scale.h" @@ -43,8 +44,8 @@ void TileMapEditor::_notification(int p_what) { case NOTIFICATION_PROCESS: { - if (bucket_queue.size() && canvas_item_editor) { - canvas_item_editor->update(); + if (bucket_queue.size()) { + CanvasItemEditor::get_singleton()->update_viewport(); } } break; @@ -65,13 +66,11 @@ void TileMapEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { - transp->set_icon(get_icon("Transpose", "EditorIcons")); - mirror_x->set_icon(get_icon("MirrorX", "EditorIcons")); - mirror_y->set_icon(get_icon("MirrorY", "EditorIcons")); - rotate_0->set_icon(get_icon("Rotate0", "EditorIcons")); - rotate_90->set_icon(get_icon("Rotate90", "EditorIcons")); - rotate_180->set_icon(get_icon("Rotate180", "EditorIcons")); - rotate_270->set_icon(get_icon("Rotate270", "EditorIcons")); + rotate_left_button->set_icon(get_icon("Rotate270", "EditorIcons")); + rotate_right_button->set_icon(get_icon("Rotate90", "EditorIcons")); + flip_horizontal_button->set_icon(get_icon("MirrorX", "EditorIcons")); + flip_vertical_button->set_icon(get_icon("MirrorY", "EditorIcons")); + clear_transform_button->set_icon(get_icon("Clear", "EditorIcons")); search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); @@ -97,27 +96,27 @@ void TileMapEditor::_menu_option(int p_option) { // immediately without pressing the left mouse button first tool = TOOL_NONE; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } break; case OPTION_BUCKET: { tool = TOOL_BUCKET; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } break; case OPTION_PICK_TILE: { tool = TOOL_PICKING; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } break; case OPTION_SELECT: { tool = TOOL_SELECTING; selection_active = false; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } break; case OPTION_COPY: { @@ -126,7 +125,7 @@ void TileMapEditor::_menu_option(int p_option) { if (selection_active) { tool = TOOL_PASTING; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } } break; case OPTION_ERASE_SELECTION: { @@ -141,7 +140,7 @@ void TileMapEditor::_menu_option(int p_option) { selection_active = false; copydata.clear(); - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } break; case OPTION_FIX_INVALID: { @@ -165,7 +164,7 @@ void TileMapEditor::_menu_option(int p_option) { tool = TOOL_PASTING; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } } break; } @@ -182,13 +181,13 @@ void TileMapEditor::_palette_multi_selected(int index, bool selected) { void TileMapEditor::_canvas_mouse_enter() { mouse_over = true; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } void TileMapEditor::_canvas_mouse_exit() { mouse_over = false; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } Vector<int> TileMapEditor::get_selected_tiles() const { @@ -301,7 +300,7 @@ void TileMapEditor::_set_cell(const Point2i &p_pos, Vector<int> p_values, bool p } node->set_cell(p_pos.x, p_pos.y, p_value, p_flip_h, p_flip_v, p_transpose); - if (manual_autotile || node->get_tileset()->tile_get_tile_mode(p_value) == TileSet::ATLAS_TILE) { + if (manual_autotile || (p_value != -1 && node->get_tileset()->tile_get_tile_mode(p_value) == TileSet::ATLAS_TILE)) { if (current != -1) { node->set_cell_autotile_coord(p_pos.x, p_pos.y, position); } @@ -318,7 +317,7 @@ void TileMapEditor::_manual_toggled(bool p_enabled) { void TileMapEditor::_text_entered(const String &p_text) { - canvas_item_editor->grab_focus(); + canvas_item_editor_viewport->grab_focus(); } void TileMapEditor::_text_changed(const String &p_text) { @@ -357,6 +356,10 @@ void TileMapEditor::_update_palette() { if (!node) return; + // Update the clear button + clear_transform_button->set_disabled(!flip_h && !flip_v && !transpose); + + // Update the palette Vector<int> selected = get_selected_tiles(); palette->clear(); manual_palette->clear(); @@ -429,9 +432,6 @@ void TileMapEditor::_update_palette() { Ref<Texture> tex = tileset->tile_get_texture(entries[i].id); if (tex.is_valid()) { - Color color = tileset->tile_get_modulate(entries[i].id); - palette->set_item_icon_modulate(palette->get_item_count() - 1, color); - Rect2 region = tileset->tile_get_region(entries[i].id); if (tileset->tile_get_tile_mode(entries[i].id) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(entries[i].id) == TileSet::ATLAS_TILE) { @@ -440,10 +440,25 @@ void TileMapEditor::_update_palette() { region.position += (region.size + Vector2(spacing, spacing)) * tileset->autotile_get_icon_coordinate(entries[i].id); } - if (!region.has_no_area()) + // Transpose and flip + palette->set_item_icon_transposed(palette->get_item_count() - 1, transpose); + if (flip_h) { + region.size.x = -region.size.x; + } + if (flip_v) { + region.size.y = -region.size.y; + } + + // Set region + if (region.size != Size2()) palette->set_item_icon_region(palette->get_item_count() - 1, region); + // Set icon palette->set_item_icon(palette->get_item_count() - 1, tex); + + // Modulation + Color color = tileset->tile_get_modulate(entries[i].id); + palette->set_item_icon_modulate(palette->get_item_count() - 1, color); } palette->set_item_metadata(palette->get_item_count() - 1, entries[i].id); @@ -519,12 +534,12 @@ void TileMapEditor::_pick_tile(const Point2 &p_pos) { selected.push_back(id); set_selected_tiles(selected); - mirror_x->set_pressed(node->is_cell_x_flipped(p_pos.x, p_pos.y)); - mirror_y->set_pressed(node->is_cell_y_flipped(p_pos.x, p_pos.y)); - transp->set_pressed(node->is_cell_transposed(p_pos.x, p_pos.y)); + flip_h = node->is_cell_x_flipped(p_pos.x, p_pos.y); + flip_v = node->is_cell_y_flipped(p_pos.x, p_pos.y); + transpose = node->is_cell_transposed(p_pos.x, p_pos.y); - _update_transform_buttons(); - canvas_item_editor->update(); + _update_palette(); + CanvasItemEditor::get_singleton()->update_viewport(); } PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool erase, bool preview) { @@ -671,7 +686,7 @@ void TileMapEditor::_select(const Point2i &p_from, const Point2i &p_to) { rectangle.position = begin; rectangle.size = end - begin; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } void TileMapEditor::_erase_selection() { @@ -978,7 +993,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { paint_undo.clear(); - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } } else if (tool == TOOL_RECTANGLE_PAINT) { @@ -995,7 +1010,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } _finish_undo(); - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } } else if (tool == TOOL_PASTING) { @@ -1011,12 +1026,12 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } _finish_undo(); - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; // We want to keep the Pasting tool } else if (tool == TOOL_SELECTING) { - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } else if (tool == TOOL_BUCKET) { @@ -1055,7 +1070,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { tool = TOOL_NONE; selection_active = false; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } @@ -1065,7 +1080,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { tool = TOOL_NONE; copydata.clear(); - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } @@ -1106,7 +1121,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { _finish_undo(); if (tool == TOOL_RECTANGLE_ERASE || tool == TOOL_LINE_ERASE) { - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } tool = TOOL_NONE; @@ -1149,7 +1164,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (new_over_tile != over_tile) { over_tile = new_over_tile; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } if (show_tile_info) { @@ -1235,7 +1250,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { _set_cell(points[i], invalid_cell); } - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } return true; @@ -1294,7 +1309,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { tool = TOOL_NONE; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } @@ -1308,13 +1323,13 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { // NOTE: We do not set tool = TOOL_PAINTING as this begins painting // immediately without pressing the left mouse button first tool = TOOL_NONE; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } if (ED_IS_SHORTCUT("tile_map_editor/bucket_fill", p_event)) { tool = TOOL_BUCKET; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } @@ -1327,7 +1342,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { tool = TOOL_SELECTING; selection_active = false; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } @@ -1337,7 +1352,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (selection_active) { tool = TOOL_PASTING; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } @@ -1354,7 +1369,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { tool = TOOL_PASTING; - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } } @@ -1366,23 +1381,20 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } if (ED_IS_SHORTCUT("tile_map_editor/mirror_x", p_event)) { flip_h = !flip_h; - mirror_x->set_pressed(flip_h); - _update_transform_buttons(); - canvas_item_editor->update(); + _update_palette(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } if (ED_IS_SHORTCUT("tile_map_editor/mirror_y", p_event)) { flip_v = !flip_v; - mirror_y->set_pressed(flip_v); - _update_transform_buttons(); - canvas_item_editor->update(); + _update_palette(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } if (ED_IS_SHORTCUT("tile_map_editor/transpose", p_event)) { transpose = !transpose; - transp->set_pressed(transpose); - _update_transform_buttons(); - canvas_item_editor->update(); + _update_palette(); + CanvasItemEditor::get_singleton()->update_viewport(); return true; } } @@ -1396,8 +1408,7 @@ void TileMapEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { return; Transform2D cell_xf = node->get_cell_transform(); - - Transform2D xform = p_overlay->get_canvas_transform() * node->get_global_transform(); + Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * node->get_global_transform(); Transform2D xform_inv = xform.affine_inverse(); Size2 screen_size = p_overlay->get_size(); @@ -1608,8 +1619,8 @@ void TileMapEditor::edit(Node *p_tile_map) { search_box->set_text(""); - if (!canvas_item_editor) { - canvas_item_editor = CanvasItemEditor::get_singleton()->get_viewport_control(); + if (!canvas_item_editor_viewport) { + canvas_item_editor_viewport = CanvasItemEditor::get_singleton()->get_viewport_control(); } if (node) @@ -1617,20 +1628,20 @@ void TileMapEditor::edit(Node *p_tile_map) { if (p_tile_map) { node = Object::cast_to<TileMap>(p_tile_map); - if (!canvas_item_editor->is_connected("mouse_entered", this, "_canvas_mouse_enter")) - canvas_item_editor->connect("mouse_entered", this, "_canvas_mouse_enter"); - if (!canvas_item_editor->is_connected("mouse_exited", this, "_canvas_mouse_exit")) - canvas_item_editor->connect("mouse_exited", this, "_canvas_mouse_exit"); + if (!canvas_item_editor_viewport->is_connected("mouse_entered", this, "_canvas_mouse_enter")) + canvas_item_editor_viewport->connect("mouse_entered", this, "_canvas_mouse_enter"); + if (!canvas_item_editor_viewport->is_connected("mouse_exited", this, "_canvas_mouse_exit")) + canvas_item_editor_viewport->connect("mouse_exited", this, "_canvas_mouse_exit"); _update_palette(); } else { node = NULL; - if (canvas_item_editor->is_connected("mouse_entered", this, "_canvas_mouse_enter")) - canvas_item_editor->disconnect("mouse_entered", this, "_canvas_mouse_enter"); - if (canvas_item_editor->is_connected("mouse_exited", this, "_canvas_mouse_exit")) - canvas_item_editor->disconnect("mouse_exited", this, "_canvas_mouse_exit"); + if (canvas_item_editor_viewport->is_connected("mouse_entered", this, "_canvas_mouse_enter")) + canvas_item_editor_viewport->disconnect("mouse_entered", this, "_canvas_mouse_enter"); + if (canvas_item_editor_viewport->is_connected("mouse_exited", this, "_canvas_mouse_exit")) + canvas_item_editor_viewport->disconnect("mouse_exited", this, "_canvas_mouse_exit"); _update_palette(); } @@ -1644,9 +1655,7 @@ void TileMapEditor::edit(Node *p_tile_map) { void TileMapEditor::_tileset_settings_changed() { _update_palette(); - - if (canvas_item_editor) - canvas_item_editor->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } void TileMapEditor::_icon_size_changed(float p_value) { @@ -1667,7 +1676,10 @@ void TileMapEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_canvas_mouse_enter"), &TileMapEditor::_canvas_mouse_enter); ClassDB::bind_method(D_METHOD("_canvas_mouse_exit"), &TileMapEditor::_canvas_mouse_exit); ClassDB::bind_method(D_METHOD("_tileset_settings_changed"), &TileMapEditor::_tileset_settings_changed); - ClassDB::bind_method(D_METHOD("_update_transform_buttons"), &TileMapEditor::_update_transform_buttons); + ClassDB::bind_method(D_METHOD("_rotate"), &TileMapEditor::_rotate); + ClassDB::bind_method(D_METHOD("_flip_horizontal"), &TileMapEditor::_flip_horizontal); + ClassDB::bind_method(D_METHOD("_flip_vertical"), &TileMapEditor::_flip_vertical); + ClassDB::bind_method(D_METHOD("_clear_transform"), &TileMapEditor::_clear_transform); ClassDB::bind_method(D_METHOD("_palette_selected"), &TileMapEditor::_palette_selected); ClassDB::bind_method(D_METHOD("_palette_multi_selected"), &TileMapEditor::_palette_multi_selected); @@ -1692,37 +1704,67 @@ TileMapEditor::CellOp TileMapEditor::_get_op_from_cell(const Point2i &p_pos) { return op; } -void TileMapEditor::_update_transform_buttons(Object *p_button) { - //ERR_FAIL_NULL(p_button); - ToolButton *b = Object::cast_to<ToolButton>(p_button); - //ERR_FAIL_COND(!b); - - if (b == rotate_0) { - mirror_x->set_pressed(false); - mirror_y->set_pressed(false); - transp->set_pressed(false); - } else if (b == rotate_90) { - mirror_x->set_pressed(true); - mirror_y->set_pressed(false); - transp->set_pressed(true); - } else if (b == rotate_180) { - mirror_x->set_pressed(true); - mirror_y->set_pressed(true); - transp->set_pressed(false); - } else if (b == rotate_270) { - mirror_x->set_pressed(false); - mirror_y->set_pressed(true); - transp->set_pressed(true); +void TileMapEditor::_rotate(int steps) { + const bool normal_rotation_matrix[][3] = { + { false, false, false }, + { true, true, false }, + { false, true, true }, + { true, false, true } + }; + + const bool mirrored_rotation_matrix[][3] = { + { false, true, false }, + { true, true, true }, + { false, false, true }, + { true, false, false } + }; + + if (transpose ^ flip_h ^ flip_v) { + // Odd number of flags activated = mirrored rotation + for (int i = 0; i < 4; i++) { + if (transpose == mirrored_rotation_matrix[i][0] && + flip_h == mirrored_rotation_matrix[i][1] && + flip_v == mirrored_rotation_matrix[i][2]) { + int new_id = Math::wrapi(i + steps, 0, 4); + transpose = mirrored_rotation_matrix[new_id][0]; + flip_h = mirrored_rotation_matrix[new_id][1]; + flip_v = mirrored_rotation_matrix[new_id][2]; + break; + } + } + } else { + // Even number of flags activated = normal rotation + for (int i = 0; i < 4; i++) { + if (transpose == normal_rotation_matrix[i][0] && + flip_h == normal_rotation_matrix[i][1] && + flip_v == normal_rotation_matrix[i][2]) { + int new_id = Math::wrapi(i + steps, 0, 4); + transpose = normal_rotation_matrix[new_id][0]; + flip_h = normal_rotation_matrix[new_id][1]; + flip_v = normal_rotation_matrix[new_id][2]; + break; + } + } } - flip_h = mirror_x->is_pressed(); - flip_v = mirror_y->is_pressed(); - transpose = transp->is_pressed(); + _update_palette(); +} - rotate_0->set_pressed(!flip_h && !flip_v && !transpose); - rotate_90->set_pressed(flip_h && !flip_v && transpose); - rotate_180->set_pressed(flip_h && flip_v && !transpose); - rotate_270->set_pressed(!flip_h && flip_v && transpose); +void TileMapEditor::_flip_horizontal() { + flip_h = !flip_h; + _update_palette(); +} + +void TileMapEditor::_flip_vertical() { + flip_v = !flip_v; + _update_palette(); +} + +void TileMapEditor::_clear_transform() { + transpose = false; + flip_h = false; + flip_v = false; + _update_palette(); } TileMapEditor::TileMapEditor(EditorNode *p_editor) { @@ -1730,7 +1772,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { node = NULL; manual_autotile = false; manual_position = Vector2(0, 0); - canvas_item_editor = NULL; + canvas_item_editor_viewport = NULL; editor = p_editor; undo_redo = editor->get_undo_redo(); @@ -1755,10 +1797,8 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { ED_SHORTCUT("tile_map_editor/mirror_x", TTR("Mirror X"), KEY_A); ED_SHORTCUT("tile_map_editor/mirror_y", TTR("Mirror Y"), KEY_S); - HBoxContainer *tool_hb1 = memnew(HBoxContainer); - add_child(tool_hb1); - HBoxContainer *tool_hb2 = memnew(HBoxContainer); - add_child(tool_hb2); + HBoxContainer *tool_hb = memnew(HBoxContainer); + add_child(tool_hb); manual_button = memnew(CheckBox); manual_button->set_text("Disable Autotile"); @@ -1822,7 +1862,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { toolbar->add_child(tile_info); options = memnew(MenuButton); - options->set_text("Tile Map"); + options->set_text("TileMap"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("TileMap", "EditorIcons")); options->set_process_unhandled_key_input(false); @@ -1843,52 +1883,37 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { p->connect("id_pressed", this, "_menu_option"); toolbar->add_child(options); - - transp = memnew(ToolButton); - transp->set_toggle_mode(true); - transp->set_tooltip(TTR("Transpose") + " (" + ED_GET_SHORTCUT("tile_map_editor/transpose")->get_as_text() + ")"); - transp->set_focus_mode(FOCUS_NONE); - transp->connect("pressed", this, "_update_transform_buttons", make_binds(transp)); - tool_hb1->add_child(transp); - mirror_x = memnew(ToolButton); - mirror_x->set_toggle_mode(true); - mirror_x->set_tooltip(TTR("Mirror X") + " (" + ED_GET_SHORTCUT("tile_map_editor/mirror_x")->get_as_text() + ")"); - mirror_x->set_focus_mode(FOCUS_NONE); - mirror_x->connect("pressed", this, "_update_transform_buttons", make_binds(mirror_x)); - tool_hb1->add_child(mirror_x); - mirror_y = memnew(ToolButton); - mirror_y->set_toggle_mode(true); - mirror_y->set_tooltip(TTR("Mirror Y") + " (" + ED_GET_SHORTCUT("tile_map_editor/mirror_y")->get_as_text() + ")"); - mirror_y->set_focus_mode(FOCUS_NONE); - mirror_y->connect("pressed", this, "_update_transform_buttons", make_binds(mirror_y)); - tool_hb1->add_child(mirror_y); - - rotate_0 = memnew(ToolButton); - rotate_0->set_toggle_mode(true); - rotate_0->set_tooltip(TTR("Rotate 0 degrees")); - rotate_0->set_focus_mode(FOCUS_NONE); - rotate_0->connect("pressed", this, "_update_transform_buttons", make_binds(rotate_0)); - tool_hb2->add_child(rotate_0); - rotate_90 = memnew(ToolButton); - rotate_90->set_toggle_mode(true); - rotate_90->set_tooltip(TTR("Rotate 90 degrees")); - rotate_90->set_focus_mode(FOCUS_NONE); - rotate_90->connect("pressed", this, "_update_transform_buttons", make_binds(rotate_90)); - tool_hb2->add_child(rotate_90); - rotate_180 = memnew(ToolButton); - rotate_180->set_toggle_mode(true); - rotate_180->set_tooltip(TTR("Rotate 180 degrees")); - rotate_180->set_focus_mode(FOCUS_NONE); - rotate_180->connect("pressed", this, "_update_transform_buttons", make_binds(rotate_180)); - tool_hb2->add_child(rotate_180); - rotate_270 = memnew(ToolButton); - rotate_270->set_toggle_mode(true); - rotate_270->set_tooltip(TTR("Rotate 270 degrees")); - rotate_270->set_focus_mode(FOCUS_NONE); - rotate_270->connect("pressed", this, "_update_transform_buttons", make_binds(rotate_270)); - tool_hb2->add_child(rotate_270); - - rotate_0->set_pressed(true); + rotate_left_button = memnew(ToolButton); + rotate_left_button->set_tooltip(TTR("Rotate left")); + rotate_left_button->set_focus_mode(FOCUS_NONE); + rotate_left_button->connect("pressed", this, "_rotate", varray(-1)); + tool_hb->add_child(rotate_left_button); + + rotate_right_button = memnew(ToolButton); + rotate_right_button->set_tooltip(TTR("Rotate right")); + rotate_right_button->set_focus_mode(FOCUS_NONE); + rotate_right_button->connect("pressed", this, "_rotate", varray(1)); + tool_hb->add_child(rotate_right_button); + + flip_horizontal_button = memnew(ToolButton); + flip_horizontal_button->set_tooltip(TTR("Flip horizontally")); + flip_horizontal_button->set_focus_mode(FOCUS_NONE); + flip_horizontal_button->connect("pressed", this, "_flip_horizontal"); + tool_hb->add_child(flip_horizontal_button); + + flip_vertical_button = memnew(ToolButton); + flip_vertical_button->set_tooltip(TTR("Flip vertically")); + flip_vertical_button->set_focus_mode(FOCUS_NONE); + flip_vertical_button->connect("pressed", this, "_flip_vertical"); + tool_hb->add_child(flip_vertical_button); + + clear_transform_button = memnew(ToolButton); + clear_transform_button->set_tooltip(TTR("Clear transform")); + clear_transform_button->set_focus_mode(FOCUS_NONE); + clear_transform_button->connect("pressed", this, "_clear_transform"); + tool_hb->add_child(clear_transform_button); + + clear_transform_button->set_disabled(true); } TileMapEditor::~TileMapEditor() { diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index 74aece6f47..68e5806ee5 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -82,7 +82,7 @@ class TileMapEditor : public VBoxContainer { EditorNode *editor; UndoRedo *undo_redo; - Control *canvas_item_editor; + Control *canvas_item_editor_viewport; LineEdit *search_box; HSlider *size_slider; @@ -93,13 +93,13 @@ class TileMapEditor : public VBoxContainer { Label *tile_info; MenuButton *options; - ToolButton *transp; - ToolButton *mirror_x; - ToolButton *mirror_y; - ToolButton *rotate_0; - ToolButton *rotate_90; - ToolButton *rotate_180; - ToolButton *rotate_270; + + ToolButton *flip_horizontal_button; + ToolButton *flip_vertical_button; + ToolButton *rotate_left_button; + ToolButton *rotate_right_button; + ToolButton *clear_transform_button; + CheckBox *manual_button; Tool tool; @@ -196,11 +196,15 @@ class TileMapEditor : public VBoxContainer { void _tileset_settings_changed(); void _icon_size_changed(float p_value); + void _clear_transform(); + void _flip_horizontal(); + void _flip_vertical(); + void _rotate(int steps); + protected: void _notification(int p_what); static void _bind_methods(); CellOp _get_op_from_cell(const Point2i &p_pos); - void _update_transform_buttons(Object *p_button = NULL); public: HBoxContainer *get_toolbar() const { return toolbar; } diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 3de2284cea..cab9a4297d 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -172,6 +172,7 @@ Error TileSetEditor::update_library_file(Node *p_base_scene, Ref<TileSet> ml, bo } void TileSetEditor::_bind_methods() { + ClassDB::bind_method("_on_tileset_toolbar_button_pressed", &TileSetEditor::_on_tileset_toolbar_button_pressed); ClassDB::bind_method("_on_textures_added", &TileSetEditor::_on_textures_added); ClassDB::bind_method("_on_tileset_toolbar_confirm", &TileSetEditor::_on_tileset_toolbar_confirm); @@ -184,58 +185,69 @@ void TileSetEditor::_bind_methods() { ClassDB::bind_method("_on_workspace_input", &TileSetEditor::_on_workspace_input); ClassDB::bind_method("_on_tool_clicked", &TileSetEditor::_on_tool_clicked); ClassDB::bind_method("_on_priority_changed", &TileSetEditor::_on_priority_changed); + ClassDB::bind_method("_on_z_index_changed", &TileSetEditor::_on_z_index_changed); ClassDB::bind_method("_on_grid_snap_toggled", &TileSetEditor::_on_grid_snap_toggled); ClassDB::bind_method("_set_snap_step", &TileSetEditor::_set_snap_step); ClassDB::bind_method("_set_snap_off", &TileSetEditor::_set_snap_off); ClassDB::bind_method("_set_snap_sep", &TileSetEditor::_set_snap_sep); + ClassDB::bind_method("_zoom_in", &TileSetEditor::_zoom_in); + ClassDB::bind_method("_zoom_out", &TileSetEditor::_zoom_out); + ClassDB::bind_method("_zoom_reset", &TileSetEditor::_zoom_reset); } void TileSetEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_icon(get_icon("ToolAddNode", "EditorIcons")); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_icon(get_icon("Remove", "EditorIcons")); - tileset_toolbar_tools->set_icon(get_icon("Tools", "EditorIcons")); - - tool_workspacemode[WORKSPACE_EDIT]->set_icon(get_icon("Edit", "EditorIcons")); - tool_workspacemode[WORKSPACE_CREATE_SINGLE]->set_icon(get_icon("AddSingleTile", "EditorIcons")); - tool_workspacemode[WORKSPACE_CREATE_AUTOTILE]->set_icon(get_icon("AddAutotile", "EditorIcons")); - tool_workspacemode[WORKSPACE_CREATE_ATLAS]->set_icon(get_icon("AddAtlasTile", "EditorIcons")); - - tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons")); - tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons")); - tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons")); - tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons")); - tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons")); - tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons")); - tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons")); - tools[TOOL_GRID_SNAP]->set_icon(get_icon("SnapGrid", "EditorIcons")); - tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons")); - tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons")); - tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons")); - tools[VISIBLE_INFO]->set_icon(get_icon("InformationSign", "EditorIcons")); - - tool_editmode[EDITMODE_REGION]->set_icon(get_icon("RegionEdit", "EditorIcons")); - tool_editmode[EDITMODE_COLLISION]->set_icon(get_icon("StaticBody2D", "EditorIcons")); - tool_editmode[EDITMODE_OCCLUSION]->set_icon(get_icon("LightOccluder2D", "EditorIcons")); - tool_editmode[EDITMODE_NAVIGATION]->set_icon(get_icon("Navigation2D", "EditorIcons")); - tool_editmode[EDITMODE_BITMASK]->set_icon(get_icon("PackedDataContainer", "EditorIcons")); - tool_editmode[EDITMODE_PRIORITY]->set_icon(get_icon("MaterialPreviewLight1", "EditorIcons")); - tool_editmode[EDITMODE_ICON]->set_icon(get_icon("LargeTexture", "EditorIcons")); + + switch (p_what) { + case NOTIFICATION_READY: { + + add_constant_override("autohide", 1); // Fixes the dragger always showing up. + } break; + case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_THEME_CHANGED: { + + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_icon(get_icon("ToolAddNode", "EditorIcons")); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_icon(get_icon("Remove", "EditorIcons")); + tileset_toolbar_tools->set_icon(get_icon("Tools", "EditorIcons")); + + tool_workspacemode[WORKSPACE_EDIT]->set_icon(get_icon("Edit", "EditorIcons")); + tool_workspacemode[WORKSPACE_CREATE_SINGLE]->set_icon(get_icon("AddSingleTile", "EditorIcons")); + tool_workspacemode[WORKSPACE_CREATE_AUTOTILE]->set_icon(get_icon("AddAutotile", "EditorIcons")); + tool_workspacemode[WORKSPACE_CREATE_ATLAS]->set_icon(get_icon("AddAtlasTile", "EditorIcons")); + + tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons")); + tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons")); + tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons")); + tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons")); + tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons")); + tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons")); + tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons")); + tools[TOOL_GRID_SNAP]->set_icon(get_icon("SnapGrid", "EditorIcons")); + tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons")); + tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons")); + tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons")); + tools[VISIBLE_INFO]->set_icon(get_icon("InformationSign", "EditorIcons")); + + tool_editmode[EDITMODE_REGION]->set_icon(get_icon("RegionEdit", "EditorIcons")); + tool_editmode[EDITMODE_COLLISION]->set_icon(get_icon("StaticBody2D", "EditorIcons")); + tool_editmode[EDITMODE_OCCLUSION]->set_icon(get_icon("LightOccluder2D", "EditorIcons")); + tool_editmode[EDITMODE_NAVIGATION]->set_icon(get_icon("Navigation2D", "EditorIcons")); + tool_editmode[EDITMODE_BITMASK]->set_icon(get_icon("PackedDataContainer", "EditorIcons")); + tool_editmode[EDITMODE_PRIORITY]->set_icon(get_icon("MaterialPreviewLight1", "EditorIcons")); + tool_editmode[EDITMODE_ICON]->set_icon(get_icon("LargeTexture", "EditorIcons")); + tool_editmode[EDITMODE_Z_INDEX]->set_icon(get_icon("Sort", "EditorIcons")); + + scroll->add_style_override("bg", get_stylebox("bg", "Tree")); + } break; } } TileSetEditor::TileSetEditor(EditorNode *p_editor) { editor = p_editor; - set_name("Tile Set Bottom Editor"); - - HSplitContainer *split = memnew(HSplitContainer); - split->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_MINSIZE, 10); - add_child(split); + current_tile = -1; VBoxContainer *left_container = memnew(VBoxContainer); - split->add_child(left_container); + add_child(left_container); texture_list = memnew(ItemList); left_container->add_child(texture_list); @@ -247,30 +259,22 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { left_container->add_child(tileset_toolbar_container); tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE] = memnew(ToolButton); - Vector<Variant> p; - p.push_back((int)TOOL_TILESET_ADD_TEXTURE); - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", p); + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_ADD_TEXTURE)); tileset_toolbar_container->add_child(tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]); - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_tooltip(TTR("Add Texture(s) to TileSet")); + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_tooltip(TTR("Add Texture(s) to TileSet.")); tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)TOOL_TILESET_REMOVE_TEXTURE); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", p); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_REMOVE_TEXTURE)); tileset_toolbar_container->add_child(tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_tooltip(TTR("Remove current Texture from TileSet")); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_tooltip(TTR("Remove selected Texture from TileSet.")); Control *toolbar_separator = memnew(Control); toolbar_separator->set_h_size_flags(Control::SIZE_EXPAND_FILL); tileset_toolbar_container->add_child(toolbar_separator); tileset_toolbar_tools = memnew(MenuButton); - tileset_toolbar_tools->set_text("Tools"); - p = Vector<Variant>(); - p.push_back((int)TOOL_TILESET_CREATE_SCENE); + tileset_toolbar_tools->set_text(TTR("Tools")); tileset_toolbar_tools->get_popup()->add_item(TTR("Create from Scene"), TOOL_TILESET_CREATE_SCENE); - p = Vector<Variant>(); - p.push_back((int)TOOL_TILESET_MERGE_SCENE); tileset_toolbar_tools->get_popup()->add_item(TTR("Merge from Scene"), TOOL_TILESET_MERGE_SCENE); tileset_toolbar_tools->get_popup()->connect("id_pressed", this, "_on_tileset_toolbar_button_pressed"); @@ -279,7 +283,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { //--------------- VBoxContainer *right_container = memnew(VBoxContainer); right_container->set_v_size_flags(SIZE_EXPAND_FILL); - split->add_child(right_container); + add_child(right_container); dragging_point = -1; creating_shape = false; @@ -296,21 +300,18 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { Ref<ButtonGroup> g(memnew(ButtonGroup)); String workspace_label[WORKSPACE_MODE_MAX] = { "Edit", "New Single Tile", "New Autotile", "New Atlas" }; - for (int i = 0; i < (int)WORKSPACE_MODE_MAX; i++) { tool_workspacemode[i] = memnew(Button); - tool_workspacemode[i]->set_text(workspace_label[i]); + tool_workspacemode[i]->set_text(TTR(workspace_label[i])); tool_workspacemode[i]->set_toggle_mode(true); tool_workspacemode[i]->set_button_group(g); - Vector<Variant> p; - p.push_back(i); - tool_workspacemode[i]->connect("pressed", this, "_on_workspace_mode_changed", p); + tool_workspacemode[i]->connect("pressed", this, "_on_workspace_mode_changed", varray(i)); tool_hb->add_child(tool_workspacemode[i]); } Control *spacer = memnew(Control); spacer->set_h_size_flags(Control::SIZE_EXPAND_FILL); tool_hb->add_child(spacer); - tool_hb->move_child(spacer, (int)WORKSPACE_CREATE_SINGLE); + tool_hb->move_child(spacer, WORKSPACE_CREATE_SINGLE); tool_workspacemode[WORKSPACE_EDIT]->set_pressed(true); workspace_mode = WORKSPACE_EDIT; @@ -321,16 +322,13 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb = memnew(HBoxContainer); g = Ref<ButtonGroup>(memnew(ButtonGroup)); - String label[EDITMODE_MAX] = { "Region", "Collision", "Occlusion", "Navigation", "Bitmask", "Priority", "Icon" }; - + String label[EDITMODE_MAX] = { "Region", "Collision", "Occlusion", "Navigation", "Bitmask", "Priority", "Icon", "Z Index" }; for (int i = 0; i < (int)EDITMODE_MAX; i++) { tool_editmode[i] = memnew(Button); tool_editmode[i]->set_text(label[i]); tool_editmode[i]->set_toggle_mode(true); tool_editmode[i]->set_button_group(g); - Vector<Variant> p; - p.push_back(i); - tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", p); + tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", varray(i)); tool_hb->add_child(tool_editmode[i]); } tool_editmode[EDITMODE_COLLISION]->set_pressed(true); @@ -343,42 +341,38 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { toolbar = memnew(HBoxContainer); Ref<ButtonGroup> tg(memnew(ButtonGroup)); - p = Vector<Variant>(); tools[TOOL_SELECT] = memnew(ToolButton); toolbar->add_child(tools[TOOL_SELECT]); - tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.")); tools[TOOL_SELECT]->set_toggle_mode(true); tools[TOOL_SELECT]->set_button_group(tg); tools[TOOL_SELECT]->set_pressed(true); - p.push_back((int)TOOL_SELECT); - tools[TOOL_SELECT]->connect("pressed", this, "_on_tool_clicked", p); + tools[TOOL_SELECT]->connect("pressed", this, "_on_tool_clicked", varray(TOOL_SELECT)); + separator_bitmask = memnew(VSeparator); + toolbar->add_child(separator_bitmask); tools[BITMASK_COPY] = memnew(ToolButton); - p.push_back((int)BITMASK_COPY); - tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", p); + tools[BITMASK_COPY]->set_tooltip(TTR("Copy bitmask.")); + tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_COPY)); toolbar->add_child(tools[BITMASK_COPY]); tools[BITMASK_PASTE] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)BITMASK_PASTE); - tools[BITMASK_PASTE]->connect("pressed", this, "_on_tool_clicked", p); + tools[BITMASK_PASTE]->set_tooltip(TTR("Paste bitmask.")); + tools[BITMASK_PASTE]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_PASTE)); toolbar->add_child(tools[BITMASK_PASTE]); tools[BITMASK_CLEAR] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)BITMASK_CLEAR); - tools[BITMASK_CLEAR]->connect("pressed", this, "_on_tool_clicked", p); + tools[BITMASK_CLEAR]->set_tooltip(TTR("Erase bitmask.")); + tools[BITMASK_CLEAR]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_CLEAR)); toolbar->add_child(tools[BITMASK_CLEAR]); tools[SHAPE_NEW_POLYGON] = memnew(ToolButton); toolbar->add_child(tools[SHAPE_NEW_POLYGON]); tools[SHAPE_NEW_POLYGON]->set_toggle_mode(true); tools[SHAPE_NEW_POLYGON]->set_button_group(tg); + tools[SHAPE_NEW_POLYGON]->set_tooltip(TTR("Create a new polygon.")); separator_delete = memnew(VSeparator); toolbar->add_child(separator_delete); tools[SHAPE_DELETE] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)SHAPE_DELETE); - tools[SHAPE_DELETE]->connect("pressed", this, "_on_tool_clicked", p); + tools[SHAPE_DELETE]->connect("pressed", this, "_on_tool_clicked", varray(SHAPE_DELETE)); toolbar->add_child(tools[SHAPE_DELETE]); separator_grid = memnew(VSeparator); @@ -386,9 +380,11 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_KEEP_INSIDE_TILE] = memnew(ToolButton); tools[SHAPE_KEEP_INSIDE_TILE]->set_toggle_mode(true); tools[SHAPE_KEEP_INSIDE_TILE]->set_pressed(true); + tools[SHAPE_KEEP_INSIDE_TILE]->set_tooltip(TTR("Keep polygon inside region Rect.")); toolbar->add_child(tools[SHAPE_KEEP_INSIDE_TILE]); tools[TOOL_GRID_SNAP] = memnew(ToolButton); tools[TOOL_GRID_SNAP]->set_toggle_mode(true); + tools[TOOL_GRID_SNAP]->set_tooltip(TTR("Enable snap and show grid (configurable via the Inspector).")); tools[TOOL_GRID_SNAP]->connect("toggled", this, "_on_grid_snap_toggled"); toolbar->add_child(tools[TOOL_GRID_SNAP]); @@ -401,32 +397,35 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { spin_priority->hide(); toolbar->add_child(spin_priority); + spin_z_index = memnew(SpinBox); + spin_z_index->set_min(VS::CANVAS_ITEM_Z_MIN); + spin_z_index->set_max(VS::CANVAS_ITEM_Z_MAX); + spin_z_index->set_step(1); + spin_z_index->set_custom_minimum_size(Size2(100, 0)); + spin_z_index->connect("value_changed", this, "_on_z_index_changed"); + spin_z_index->hide(); + toolbar->add_child(spin_z_index); + Control *separator = memnew(Control); separator->set_h_size_flags(SIZE_EXPAND_FILL); toolbar->add_child(separator); tools[ZOOM_OUT] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)ZOOM_OUT); - tools[ZOOM_OUT]->connect("pressed", this, "_on_tool_clicked", p); + tools[ZOOM_OUT]->connect("pressed", this, "_zoom_out"); toolbar->add_child(tools[ZOOM_OUT]); tools[ZOOM_OUT]->set_tooltip(TTR("Zoom Out")); tools[ZOOM_1] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)ZOOM_1); - tools[ZOOM_1]->connect("pressed", this, "_on_tool_clicked", p); + tools[ZOOM_1]->connect("pressed", this, "_zoom_reset"); toolbar->add_child(tools[ZOOM_1]); - tools[ZOOM_1]->set_tooltip(TTR("Reset Zoom")); + tools[ZOOM_1]->set_tooltip(TTR("Zoom Reset")); tools[ZOOM_IN] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)ZOOM_IN); - tools[ZOOM_IN]->connect("pressed", this, "_on_tool_clicked", p); + tools[ZOOM_IN]->connect("pressed", this, "_zoom_in"); toolbar->add_child(tools[ZOOM_IN]); tools[ZOOM_IN]->set_tooltip(TTR("Zoom In")); tools[VISIBLE_INFO] = memnew(ToolButton); tools[VISIBLE_INFO]->set_toggle_mode(true); - tools[VISIBLE_INFO]->set_tooltip(TTR("Display tile's names (hold Alt Key)")); + tools[VISIBLE_INFO]->set_tooltip(TTR("Display Tile Names (Hold Alt Key)")); toolbar->add_child(tools[VISIBLE_INFO]); main_vb->add_child(toolbar); @@ -483,6 +482,11 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { //--------------- helper = memnew(TilesetEditorContext(this)); tile_names_opacity = 0; + + // config scale + max_scale = 10.0f; + min_scale = 0.1f; + scale_ratio = 1.2f; } TileSetEditor::~TileSetEditor() { @@ -569,6 +573,10 @@ void TileSetEditor::_on_textures_added(const PoolStringArray &p_paths) { int invalid_count = 0; for (int i = 0; i < p_paths.size(); i++) { Ref<Texture> t = Ref<Texture>(ResourceLoader::load(p_paths[i])); + + ERR_EXPLAIN("'" + p_paths[i] + "' is not a valid texture."); + ERR_CONTINUE(!t.is_valid()); + if (texture_map.has(t->get_rid())) { invalid_count++; } else { @@ -577,9 +585,13 @@ void TileSetEditor::_on_textures_added(const PoolStringArray &p_paths) { texture_list->set_item_metadata(texture_list->get_item_count() - 1, t->get_rid()); } } - update_texture_list_icon(); - texture_list->select(texture_list->get_item_count() - 1); - _on_texture_list_selected(texture_list->get_item_count() - 1); + + if (texture_list->get_item_count() > 0) { + update_texture_list_icon(); + texture_list->select(texture_list->get_item_count() - 1); + _on_texture_list_selected(texture_list->get_item_count() - 1); + } + if (invalid_count > 0) { err_dialog->set_text(vformat(TTR("%s file(s) were not added because was already on the list."), String::num(invalid_count, 0))); err_dialog->popup_centered(Size2(300, 60)); @@ -587,10 +599,14 @@ void TileSetEditor::_on_textures_added(const PoolStringArray &p_paths) { } void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { + draw_handles = false; + creating_shape = false; edit_mode = (EditMode)p_edit_mode; switch (edit_mode) { case EDITMODE_REGION: { tools[TOOL_SELECT]->show(); + + separator_bitmask->hide(); tools[BITMASK_COPY]->hide(); tools[BITMASK_PASTE]->hide(); tools[BITMASK_CLEAR]->hide(); @@ -610,30 +626,16 @@ void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { tools[TOOL_SELECT]->set_pressed(true); tools[TOOL_SELECT]->set_tooltip(TTR("Drag handles to edit Rect.\nClick on another Tile to edit it.")); + tools[SHAPE_DELETE]->set_tooltip(TTR("Delete selected Rect.")); spin_priority->hide(); - } break; - case EDITMODE_BITMASK: { - tools[TOOL_SELECT]->show(); - tools[BITMASK_COPY]->show(); - tools[BITMASK_PASTE]->show(); - tools[BITMASK_CLEAR]->show(); - tools[SHAPE_NEW_POLYGON]->hide(); - - separator_delete->hide(); - tools[SHAPE_DELETE]->hide(); - - separator_grid->hide(); - tools[SHAPE_KEEP_INSIDE_TILE]->hide(); - tools[TOOL_GRID_SNAP]->hide(); - - tools[TOOL_SELECT]->set_pressed(true); - tools[TOOL_SELECT]->set_tooltip(TTR("LMB: set bit on.\nRMB: set bit off.\nClick on another Tile to edit it.")); - spin_priority->hide(); + spin_z_index->hide(); } break; case EDITMODE_COLLISION: case EDITMODE_NAVIGATION: case EDITMODE_OCCLUSION: { tools[TOOL_SELECT]->show(); + + separator_bitmask->hide(); tools[BITMASK_COPY]->hide(); tools[BITMASK_PASTE]->hide(); tools[BITMASK_CLEAR]->hide(); @@ -647,11 +649,38 @@ void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { tools[TOOL_GRID_SNAP]->show(); tools[TOOL_SELECT]->set_tooltip(TTR("Select current edited sub-tile.\nClick on another Tile to edit it.")); + tools[SHAPE_DELETE]->set_tooltip(TTR("Delete polygon.")); spin_priority->hide(); + spin_z_index->hide(); + select_coord(edited_shape_coord); } break; - default: { + case EDITMODE_BITMASK: { + tools[TOOL_SELECT]->show(); + + separator_bitmask->show(); + tools[BITMASK_COPY]->show(); + tools[BITMASK_PASTE]->show(); + tools[BITMASK_CLEAR]->show(); + tools[SHAPE_NEW_POLYGON]->hide(); + + separator_delete->hide(); + tools[SHAPE_DELETE]->hide(); + + separator_grid->hide(); + tools[SHAPE_KEEP_INSIDE_TILE]->hide(); + tools[TOOL_GRID_SNAP]->hide(); + + tools[TOOL_SELECT]->set_pressed(true); + tools[TOOL_SELECT]->set_tooltip(TTR("LMB: Set bit on.\nRMB: Set bit off.\nClick on another Tile to edit it.")); + spin_priority->hide(); + } break; + case EDITMODE_Z_INDEX: + case EDITMODE_PRIORITY: + case EDITMODE_ICON: { tools[TOOL_SELECT]->show(); + + separator_bitmask->hide(); tools[BITMASK_COPY]->hide(); tools[BITMASK_PASTE]->hide(); tools[BITMASK_CLEAR]->hide(); @@ -667,11 +696,18 @@ void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { if (edit_mode == EDITMODE_ICON) { tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.\nClick on another Tile to edit it.")); spin_priority->hide(); - } else { + spin_z_index->hide(); + } else if (edit_mode == EDITMODE_PRIORITY) { tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to change its priority.\nClick on another Tile to edit it.")); spin_priority->show(); + spin_z_index->hide(); + } else { + tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to change its z index.\nClick on another Tile to edit it.")); + spin_priority->hide(); + spin_z_index->show(); } } break; + default: {} } workspace->update(); } @@ -693,15 +729,16 @@ void TileSetEditor::_on_workspace_mode_changed(int p_workspace_mode) { void TileSetEditor::_on_workspace_draw() { - const Color COLOR_AUTOTILE = Color(0.266373, 0.565288, 0.988281); - const Color COLOR_SINGLE = Color(0.988281, 0.909323, 0.266373); - const Color COLOR_ATLAS = Color(0.78653, 0.812835, 0.832031); - - if (tileset.is_null()) - return; - if (!get_current_texture().is_valid()) + if (tileset.is_null() || !get_current_texture().is_valid()) return; + const Color COLOR_AUTOTILE = Color(0.3, 0.6, 1); + const Color COLOR_SINGLE = Color(1, 1, 0.3); + const Color COLOR_ATLAS = Color(0.8, 0.8, 0.8); + const Color COLOR_SUBDIVISION = Color(0.3, 0.7, 0.6); + + draw_handles = false; + draw_highlight_current_tile(); draw_grid_snap(); @@ -795,10 +832,12 @@ void TileSetEditor::_on_workspace_draw() { spin_priority->set_suffix(" / " + String::num(total, 0)); draw_highlight_subtile(edited_shape_coord, queue_others); } break; + case EDITMODE_Z_INDEX: { + spin_z_index->set_value(tileset->autotile_get_z_index(get_current_tile(), edited_shape_coord)); + draw_highlight_subtile(edited_shape_coord); + } break; default: {} } - - draw_tile_subdivision(get_current_tile(), Color(0.347214, 0.722656, 0.617063)); } RID current_texture_rid = get_current_texture()->get_rid(); @@ -806,7 +845,7 @@ void TileSetEditor::_on_workspace_draw() { tileset->get_tile_list(tiles); for (List<int>::Element *E = tiles->front(); E; E = E->next()) { int t_id = E->get(); - if (tileset->tile_get_texture(t_id)->get_rid() == current_texture_rid && (t_id != get_current_tile() || edit_mode != EDITMODE_REGION)) { + if (tileset->tile_get_texture(t_id)->get_rid() == current_texture_rid && (t_id != get_current_tile() || edit_mode != EDITMODE_REGION || workspace_mode != WORKSPACE_EDIT)) { Rect2i region = tileset->tile_get_region(t_id); region.position += WORKSPACE_MARGIN; Color c; @@ -816,10 +855,11 @@ void TileSetEditor::_on_workspace_draw() { c = COLOR_AUTOTILE; else if (tileset->tile_get_tile_mode(t_id) == TileSet::ATLAS_TILE) c = COLOR_ATLAS; - draw_tile_subdivision(t_id, Color(0.347214, 0.722656, 0.617063, 0.5)); + draw_tile_subdivision(t_id, COLOR_SUBDIVISION); workspace->draw_rect(region, c, false); } } + if (edit_mode == EDITMODE_REGION) { if (workspace_mode != WORKSPACE_EDIT) { Rect2i region = edited_region; @@ -841,6 +881,12 @@ void TileSetEditor::_on_workspace_draw() { region = tileset->tile_get_region(t_id); region.position += WORKSPACE_MARGIN; } + + if (draw_edited_region) + draw_edited_region_subdivision(); + else + draw_tile_subdivision(t_id, COLOR_SUBDIVISION); + Color c; if (tileset->tile_get_tile_mode(t_id) == TileSet::SINGLE_TILE) c = COLOR_SINGLE; @@ -848,13 +894,10 @@ void TileSetEditor::_on_workspace_draw() { c = COLOR_AUTOTILE; else if (tileset->tile_get_tile_mode(t_id) == TileSet::ATLAS_TILE) c = COLOR_ATLAS; - if (draw_edited_region) - draw_edited_region_subdivision(); - else - draw_tile_subdivision(t_id, Color(0.347214, 0.722656, 0.617063, 1)); workspace->draw_rect(region, c, false); } } + workspace_overlay->update(); } @@ -874,9 +917,7 @@ void TileSetEditor::_on_workspace_process() { void TileSetEditor::_on_workspace_overlay_draw() { - if (!tileset.is_valid()) - return; - if (!get_current_texture().is_valid()) + if (!tileset.is_valid() || !get_current_texture().is_valid()) return; const Color COLOR_AUTOTILE = Color(0.266373, 0.565288, 0.988281); @@ -926,9 +967,8 @@ void TileSetEditor::_on_workspace_overlay_draw() { #define MIN_DISTANCE_SQUARED 6 void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { - if (tileset.is_null()) - return; - if (!get_current_texture().is_valid()) + + if (tileset.is_null() || !get_current_texture().is_valid()) return; static bool dragging; @@ -945,7 +985,7 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { Ref<InputEventMouseMotion> mm = p_ie; if (mb.is_valid()) { - if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && !creating_shape) { if (!current_tile_region.has_point(mb->get_position())) { List<int> *tiles = new List<int>(); tileset->get_tile_list(tiles); @@ -964,6 +1004,13 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } } + + // Mouse Wheel Event + if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed() && mb->get_control()) { + _zoom_in(); + } else if (mb->get_button_index() == BUTTON_WHEEL_DOWN && mb->is_pressed() && mb->get_control()) { + _zoom_out(); + } } // Drag Middle Mouse if (mm.is_valid()) { @@ -1010,10 +1057,14 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { tileset->tile_set_tile_mode(t_id, workspace_mode == WORKSPACE_CREATE_AUTOTILE ? TileSet::AUTO_TILE : TileSet::ATLAS_TILE); } set_current_tile(t_id); + tool_workspacemode[WORKSPACE_EDIT]->set_pressed(true); + tool_editmode[EDITMODE_COLLISION]->set_pressed(true); + edit_mode = EDITMODE_COLLISION; _on_workspace_mode_changed(WORKSPACE_EDIT); } } + edited_region = Rect2(); workspace->update(); workspace_overlay->update(); return; @@ -1179,7 +1230,8 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { case EDITMODE_COLLISION: case EDITMODE_OCCLUSION: case EDITMODE_NAVIGATION: - case EDITMODE_PRIORITY: { + case EDITMODE_PRIORITY: + case EDITMODE_Z_INDEX: { Vector2 shape_anchor = Vector2(0, 0); if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) { shape_anchor = edited_shape_coord; @@ -1394,6 +1446,7 @@ void TileSetEditor::_on_tool_clicked(int p_tool) { case EDITMODE_REGION: { if (workspace_mode == WORKSPACE_EDIT && get_current_tile() >= 0) { tileset->remove_tile(get_current_tile()); + set_current_tile(-1); workspace->update(); workspace_overlay->update(); } @@ -1439,24 +1492,6 @@ void TileSetEditor::_on_tool_clicked(int p_tool) { default: {} } } - } else if (p_tool == ZOOM_OUT) { - float scale = workspace->get_scale().x; - if (scale > 0.1) { - scale /= 2; - workspace->set_scale(Vector2(scale, scale)); - workspace_container->set_custom_minimum_size(workspace->get_rect().size * scale); - workspace_overlay->set_custom_minimum_size(workspace->get_rect().size * scale); - } - } else if (p_tool == ZOOM_1) { - workspace->set_scale(Vector2(1, 1)); - workspace_container->set_custom_minimum_size(workspace->get_rect().size); - workspace_overlay->set_custom_minimum_size(workspace->get_rect().size); - } else if (p_tool == ZOOM_IN) { - float scale = workspace->get_scale().x; - scale *= 2; - workspace->set_scale(Vector2(scale, scale)); - workspace_container->set_custom_minimum_size(workspace->get_rect().size * scale); - workspace_overlay->set_custom_minimum_size(workspace->get_rect().size * scale); } else if (p_tool == TOOL_SELECT) { if (creating_shape) { // Cancel Creation @@ -1472,6 +1507,11 @@ void TileSetEditor::_on_priority_changed(float val) { workspace->update(); } +void TileSetEditor::_on_z_index_changed(float val) { + tileset->autotile_set_z_index(get_current_tile(), edited_shape_coord, (int)val); + workspace->update(); +} + void TileSetEditor::_on_grid_snap_toggled(bool p_val) { helper->set_snap_options_visible(p_val); workspace->update(); @@ -1495,22 +1535,59 @@ void TileSetEditor::_set_snap_sep(Vector2 p_val) { workspace->update(); } +void TileSetEditor::_zoom_in() { + float scale = workspace->get_scale().x; + if (scale < max_scale) { + scale *= scale_ratio; + workspace->set_scale(Vector2(scale, scale)); + workspace_container->set_custom_minimum_size(workspace->get_rect().size * scale); + workspace_overlay->set_custom_minimum_size(workspace->get_rect().size * scale); + } +} +void TileSetEditor::_zoom_out() { + + float scale = workspace->get_scale().x; + if (scale > min_scale) { + scale /= scale_ratio; + workspace->set_scale(Vector2(scale, scale)); + workspace_container->set_custom_minimum_size(workspace->get_rect().size * scale); + workspace_overlay->set_custom_minimum_size(workspace->get_rect().size * scale); + } +} +void TileSetEditor::_zoom_reset() { + workspace->set_scale(Vector2(1, 1)); + workspace_container->set_custom_minimum_size(workspace->get_rect().size); + workspace_overlay->set_custom_minimum_size(workspace->get_rect().size); +} + void TileSetEditor::draw_highlight_current_tile() { - if (get_current_tile() >= 0) { - Rect2 region = tileset->tile_get_region(get_current_tile()); - region.position += WORKSPACE_MARGIN; - workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, region.position.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, region.position.y, region.position.x, region.size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(region.position.x + region.size.x, region.position.y, workspace->get_rect().size.x - region.position.x - region.size.x, region.size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, region.position.y + region.size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - region.size.y - region.position.y), Color(0.3, 0.3, 0.3, 0.3)); + Color shadow_color = Color(0.3, 0.3, 0.3, 0.3); + if ((workspace_mode == WORKSPACE_EDIT && get_current_tile() >= 0) || !edited_region.has_no_area()) { + Rect2 region; + if (edited_region.has_no_area()) { + region = tileset->tile_get_region(get_current_tile()); + region.position += WORKSPACE_MARGIN; + } else { + region = edited_region; + } + + if (region.position.y >= 0) + workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, region.position.y), shadow_color); + if (region.position.x >= 0) + workspace->draw_rect(Rect2(0, MAX(0, region.position.y), region.position.x, MIN(workspace->get_rect().size.y - region.position.y, MIN(region.size.y, region.position.y + region.size.y))), shadow_color); + if (region.position.x + region.size.x <= workspace->get_rect().size.x) + workspace->draw_rect(Rect2(region.position.x + region.size.x, MAX(0, region.position.y), workspace->get_rect().size.x - region.position.x - region.size.x, MIN(workspace->get_rect().size.y - region.position.y, MIN(region.size.y, region.position.y + region.size.y))), shadow_color); + if (region.position.y + region.size.y <= workspace->get_rect().size.y) + workspace->draw_rect(Rect2(0, region.position.y + region.size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - region.size.y - region.position.y), shadow_color); } else { - workspace->draw_rect(Rect2(Point2(0, 0), workspace->get_rect().size), Color(0.3, 0.3, 0.3, 0.3)); + workspace->draw_rect(Rect2(Point2(0, 0), workspace->get_rect().size), shadow_color); } } void TileSetEditor::draw_highlight_subtile(Vector2 coord, const Vector<Vector2> &other_highlighted) { + Color shadow_color = Color(0.3, 0.3, 0.3, 0.3); Vector2 size = tileset->autotile_get_size(get_current_tile()); int spacing = tileset->autotile_get_spacing(get_current_tile()); Rect2 region = tileset->tile_get_region(get_current_tile()); @@ -1518,10 +1595,16 @@ void TileSetEditor::draw_highlight_subtile(Vector2 coord, const Vector<Vector2> coord.y *= (size.y + spacing); coord += region.position; coord += WORKSPACE_MARGIN; - workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, coord.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, coord.y, coord.x, size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(coord.x + size.x, coord.y, workspace->get_rect().size.x - coord.x - size.x, size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, coord.y + size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - size.y - coord.y), Color(0.3, 0.3, 0.3, 0.3)); + + if (coord.y >= 0) + workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, coord.y), shadow_color); + if (coord.x >= 0) + workspace->draw_rect(Rect2(0, MAX(0, coord.y), coord.x, MIN(workspace->get_rect().size.y - coord.y, MIN(size.y, coord.y + size.y))), shadow_color); + if (coord.x + size.x <= workspace->get_rect().size.x) + workspace->draw_rect(Rect2(coord.x + size.x, MAX(0, coord.y), workspace->get_rect().size.x - coord.x - size.x, MIN(workspace->get_rect().size.y - coord.y, MIN(size.y, coord.y + size.y))), shadow_color); + if (coord.y + size.y <= workspace->get_rect().size.y) + workspace->draw_rect(Rect2(0, coord.y + size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - size.y - coord.y), shadow_color); + coord += Vector2(1, 1) / workspace->get_scale().x; workspace->draw_rect(Rect2(coord, size - Vector2(2, 2) / workspace->get_scale().x), Color(1, 0, 0), false); for (int i = 0; i < other_highlighted.size(); i++) { @@ -1541,35 +1624,35 @@ void TileSetEditor::draw_tile_subdivision(int p_id, Color p_color) const { Rect2 region = tileset->tile_get_region(p_id); Size2 size = tileset->autotile_get_size(p_id); int spacing = tileset->autotile_get_spacing(p_id); - float j = 0; + float j = size.x; + while (j < region.size.x) { - j += size.x; if (spacing <= 0) { workspace->draw_line(region.position + WORKSPACE_MARGIN + Point2(j, 0), region.position + WORKSPACE_MARGIN + Point2(j, region.size.y), c); } else { workspace->draw_rect(Rect2(region.position + WORKSPACE_MARGIN + Point2(j, 0), Size2(spacing, region.size.y)), c); } - j += spacing; + j += spacing + size.x; } - j = 0; + j = size.y; while (j < region.size.y) { - j += size.y; if (spacing <= 0) { workspace->draw_line(region.position + WORKSPACE_MARGIN + Point2(0, j), region.position + WORKSPACE_MARGIN + Point2(region.size.x, j), c); } else { workspace->draw_rect(Rect2(region.position + WORKSPACE_MARGIN + Point2(0, j), Size2(region.size.x, spacing)), c); } - j += spacing; + j += spacing + size.y; } } } void TileSetEditor::draw_edited_region_subdivision() const { - Color c = Color(0.347214, 0.722656, 0.617063, 1); + Color c = Color(0.3, 0.7, 0.6); Rect2 region = edited_region; Size2 size; int spacing; bool draw; + if (workspace_mode == WORKSPACE_EDIT) { int p_id = get_current_tile(); size = tileset->autotile_get_size(p_id); @@ -1580,66 +1663,72 @@ void TileSetEditor::draw_edited_region_subdivision() const { spacing = snap_separation.x; draw = workspace_mode != WORKSPACE_CREATE_SINGLE; } - if (draw) { - float j = 0; + if (draw) { + float j = size.x; while (j < region.size.x) { - j += size.x; if (spacing <= 0) { workspace->draw_line(region.position + Point2(j, 0), region.position + Point2(j, region.size.y), c); } else { workspace->draw_rect(Rect2(region.position + Point2(j, 0), Size2(spacing, region.size.y)), c); } - j += spacing; + j += spacing + size.x; } - j = 0; + j = size.y; while (j < region.size.y) { - j += size.y; if (spacing <= 0) { workspace->draw_line(region.position + Point2(0, j), region.position + Point2(region.size.x, j), c); } else { workspace->draw_rect(Rect2(region.position + Point2(0, j), Size2(region.size.x, spacing)), c); } - j += spacing; + j += spacing + size.y; } } } void TileSetEditor::draw_grid_snap() { if (tools[TOOL_GRID_SNAP]->is_pressed()) { - Color grid_color = Color(0.39, 0, 1, 0.2f); + Color grid_color = Color(0.4, 0, 1); Size2 s = workspace->get_size(); - int width_count = (int)(s.width / (snap_step.x + snap_separation.x)); - int height_count = (int)(s.height / (snap_step.y + snap_separation.y)); + int width_count = Math::floor((s.width - WORKSPACE_MARGIN.x) / (snap_step.x + snap_separation.x)); + int height_count = Math::floor((s.height - WORKSPACE_MARGIN.y) / (snap_step.y + snap_separation.y)); + int last_p = 0; if (snap_step.x != 0) { - int last_p = 0; for (int i = 0; i <= width_count; i++) { if (i == 0 && snap_offset.x != 0) { last_p = snap_offset.x; } - if (snap_separation.x != 0 && i != 0) { - workspace->draw_rect(Rect2(last_p, 0, snap_separation.x, s.height), grid_color); - last_p += snap_separation.x; - } else + if (snap_separation.x != 0) { + if (i != 0) { + workspace->draw_rect(Rect2(last_p, 0, snap_separation.x, s.height), grid_color); + last_p += snap_separation.x; + } else { + workspace->draw_rect(Rect2(last_p, 0, -snap_separation.x, s.height), grid_color); + } + } else { workspace->draw_line(Point2(last_p, 0), Point2(last_p, s.height), grid_color); - + } last_p += snap_step.x; } } - + last_p = 0; if (snap_step.y != 0) { - int last_p = 0; for (int i = 0; i <= height_count; i++) { if (i == 0 && snap_offset.y != 0) { last_p = snap_offset.y; } - if (snap_separation.x != 0 && i != 0) { - workspace->draw_rect(Rect2(0, last_p, s.width, snap_separation.y), grid_color); - last_p += snap_separation.y; - } else + if (snap_separation.x != 0) { + if (i != 0) { + workspace->draw_rect(Rect2(0, last_p, s.width, snap_separation.y), grid_color); + last_p += snap_separation.y; + } else { + workspace->draw_rect(Rect2(0, last_p, s.width, -snap_separation.y), grid_color); + } + } else { workspace->draw_line(Point2(0, last_p), Point2(s.width, last_p), grid_color); + } last_p += snap_step.y; } } @@ -1652,8 +1741,6 @@ void TileSetEditor::draw_polygon_shapes() { if (t_id < 0) return; - draw_handles = false; - switch (edit_mode) { case EDITMODE_COLLISION: { Vector<TileSet::ShapeData> sd = tileset->tile_get_shapes(t_id); @@ -2076,13 +2163,24 @@ void TileSetEditor::update_texture_list() { List<int> ids; tileset->get_tile_list(&ids); + Vector<int> ids_to_remove; for (List<int>::Element *E = ids.front(); E; E = E->next()) { + // Clear tiles referencing gone textures (user has been already given the chance to fix broken deps) + if (!tileset->tile_get_texture(E->get()).is_valid()) { + ids_to_remove.push_back(E->get()); + ERR_CONTINUE(!tileset->tile_get_texture(E->get()).is_valid()); + } + if (!texture_map.has(tileset->tile_get_texture(E->get())->get_rid())) { texture_list->add_item(tileset->tile_get_texture(E->get())->get_path().get_file()); texture_map.insert(tileset->tile_get_texture(E->get())->get_rid(), tileset->tile_get_texture(E->get())); texture_list->set_item_metadata(texture_list->get_item_count() - 1, tileset->tile_get_texture(E->get())->get_rid()); } } + for (int i = 0; i < ids_to_remove.size(); i++) { + tileset->remove_tile(ids_to_remove[i]); + } + if (texture_list->get_item_count() > 0 && selected_texture.is_valid()) { texture_list->select(texture_list->find_metadata(selected_texture->get_rid())); if (texture_list->get_selected_items().size() > 0) @@ -2108,6 +2206,18 @@ void TileSetEditor::update_texture_list_icon() { void TileSetEditor::update_workspace_tile_mode() { + if (!get_current_texture().is_valid()) { + tool_workspacemode[WORKSPACE_EDIT]->set_pressed(true); + workspace_mode = WORKSPACE_EDIT; + for (int i = 1; i < WORKSPACE_MODE_MAX; i++) { + tool_workspacemode[i]->set_disabled(true); + } + } else { + for (int i = 1; i < WORKSPACE_MODE_MAX; i++) { + tool_workspacemode[i]->set_disabled(false); + } + } + if (workspace_mode != WORKSPACE_EDIT) { for (int i = 0; i < EDITMODE_MAX; i++) { tool_editmode[i]->hide(); @@ -2126,7 +2236,9 @@ void TileSetEditor::update_workspace_tile_mode() { for (int i = 0; i < ZOOM_OUT; i++) { tools[i]->hide(); } + separator_editmode->hide(); + separator_bitmask->hide(); separator_delete->hide(); separator_grid->hide(); return; @@ -2138,7 +2250,7 @@ void TileSetEditor::update_workspace_tile_mode() { separator_editmode->show(); if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { - if (tool_editmode[EDITMODE_ICON]->is_pressed() || tool_editmode[EDITMODE_PRIORITY]->is_pressed() || tool_editmode[EDITMODE_BITMASK]->is_pressed()) { + if (tool_editmode[EDITMODE_ICON]->is_pressed() || tool_editmode[EDITMODE_PRIORITY]->is_pressed() || tool_editmode[EDITMODE_BITMASK]->is_pressed() || tool_editmode[EDITMODE_Z_INDEX]->is_pressed()) { tool_editmode[EDITMODE_COLLISION]->set_pressed(true); edit_mode = EDITMODE_COLLISION; } @@ -2147,6 +2259,7 @@ void TileSetEditor::update_workspace_tile_mode() { tool_editmode[EDITMODE_ICON]->hide(); tool_editmode[EDITMODE_BITMASK]->hide(); tool_editmode[EDITMODE_PRIORITY]->hide(); + tool_editmode[EDITMODE_Z_INDEX]->hide(); } else if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) { if (edit_mode == EDITMODE_ICON) select_coord(tileset->autotile_get_icon_coordinate(get_current_tile())); @@ -2172,25 +2285,18 @@ void TileSetEditor::update_edited_region(const Vector2 &end_point) { edited_region = Rect2(region_from, Size2()); if (tools[TOOL_GRID_SNAP]->is_pressed()) { Vector2 grid_coord; - grid_coord.x = Math::floor((region_from.x - snap_offset.x) / (snap_step.x + snap_separation.x)); - grid_coord.y = Math::floor((region_from.y - snap_offset.y) / (snap_step.y + snap_separation.y)); - grid_coord.x *= (snap_step.x + snap_separation.x); - grid_coord.y *= (snap_step.y + snap_separation.y); + grid_coord = ((region_from - snap_offset) / (snap_step + snap_separation)).floor(); + grid_coord *= (snap_step + snap_separation); grid_coord += snap_offset; edited_region.expand_to(grid_coord); - grid_coord += snap_step; + grid_coord += snap_step + snap_separation; edited_region.expand_to(grid_coord); - grid_coord.x = Math::floor((end_point.x - snap_offset.x) / (snap_step.x + snap_separation.x)); - grid_coord.y = Math::floor((end_point.y - snap_offset.y) / (snap_step.y + snap_separation.y)); - grid_coord.x *= (snap_step.x + snap_separation.x); - grid_coord.y *= (snap_step.y + snap_separation.y); + + grid_coord = ((end_point - snap_offset) / (snap_step + snap_separation)).floor(); + grid_coord *= (snap_step + snap_separation); grid_coord += snap_offset; edited_region.expand_to(grid_coord); - grid_coord += snap_step; - if (grid_coord.x < end_point.x) - grid_coord.x += snap_separation.x; - if (grid_coord.y < end_point.y) - grid_coord.y += snap_separation.y; + grid_coord += snap_step + snap_separation; edited_region.expand_to(grid_coord); } else { edited_region.expand_to(end_point); @@ -2368,7 +2474,13 @@ void TilesetEditorContext::_get_property_list(List<PropertyInfo> *p_list) const } } +void TilesetEditorContext::_bind_methods() { + + ClassDB::bind_method("_hide_script_from_inspector", &TilesetEditorContext::_hide_script_from_inspector); +} + TilesetEditorContext::TilesetEditorContext(TileSetEditor *p_tileset_editor) { + tileset_editor = p_tileset_editor; } @@ -2382,8 +2494,7 @@ void TileSetEditorPlugin::edit(Object *p_node) { bool TileSetEditorPlugin::handles(Object *p_node) const { - return p_node->is_class("TileSet") || - p_node->is_class("TilesetEditorContext"); + return p_node->is_class("TileSet") || p_node->is_class("TilesetEditorContext"); } void TileSetEditorPlugin::make_visible(bool p_visible) { @@ -2398,6 +2509,41 @@ void TileSetEditorPlugin::make_visible(bool p_visible) { } } +Dictionary TileSetEditorPlugin::get_state() const { + + Dictionary state; + state["snap_offset"] = tileset_editor->snap_offset; + state["snap_step"] = tileset_editor->snap_step; + state["snap_separation"] = tileset_editor->snap_separation; + state["snap_enabled"] = tileset_editor->tools[TileSetEditor::TOOL_GRID_SNAP]->is_pressed(); + state["keep_inside_tile"] = tileset_editor->tools[TileSetEditor::SHAPE_KEEP_INSIDE_TILE]->is_pressed(); + return state; +} + +void TileSetEditorPlugin::set_state(const Dictionary &p_state) { + + Dictionary state = p_state; + if (state.has("snap_step")) { + tileset_editor->_set_snap_step(state["snap_step"]); + } + + if (state.has("snap_offset")) { + tileset_editor->_set_snap_off(state["snap_offset"]); + } + + if (state.has("snap_separation")) { + tileset_editor->_set_snap_sep(state["snap_separation"]); + } + + if (state.has("snap_enabled")) { + tileset_editor->tools[TileSetEditor::TOOL_GRID_SNAP]->set_pressed(state["snap_enabled"]); + } + + if (state.has("keep_inside_tile")) { + tileset_editor->tools[TileSetEditor::SHAPE_KEEP_INSIDE_TILE]->set_pressed(state["keep_inside_tile"]); + } +} + TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { editor = p_node; tileset_editor = memnew(TileSetEditor(p_node)); @@ -2405,6 +2551,6 @@ TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { tileset_editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE); tileset_editor->hide(); - tileset_editor_button = p_node->add_bottom_panel_item(TTR("Tile Set"), tileset_editor); + tileset_editor_button = p_node->add_bottom_panel_item(TTR("TileSet"), tileset_editor); tileset_editor_button->hide(); } diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index 23bf68b90f..276e23f9ee 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -40,12 +40,12 @@ #define WORKSPACE_MARGIN Vector2(10, 10) class TilesetEditorContext; -class TileSetEditor : public Control { +class TileSetEditor : public HSplitContainer { friend class TileSetEditorPlugin; friend class TilesetEditorContext; - GDCLASS(TileSetEditor, Control) + GDCLASS(TileSetEditor, HSplitContainer) enum TextureToolButtons { TOOL_TILESET_ADD_TEXTURE, @@ -71,6 +71,7 @@ class TileSetEditor : public Control { EDITMODE_BITMASK, EDITMODE_PRIORITY, EDITMODE_ICON, + EDITMODE_Z_INDEX, EDITMODE_MAX }; @@ -134,13 +135,19 @@ class TileSetEditor : public Control { HSeparator *separator_editmode; HBoxContainer *toolbar; ToolButton *tools[TOOL_MAX]; + VSeparator *separator_bitmask; VSeparator *separator_delete; VSeparator *separator_grid; SpinBox *spin_priority; + SpinBox *spin_z_index; WorkspaceMode workspace_mode; EditMode edit_mode; int current_tile; + float max_scale; + float min_scale; + float scale_ratio; + void update_texture_list(); void update_texture_list_icon(); @@ -173,11 +180,16 @@ private: void _on_workspace_input(const Ref<InputEvent> &p_ie); void _on_tool_clicked(int p_tool); void _on_priority_changed(float val); + void _on_z_index_changed(float val); void _on_grid_snap_toggled(bool p_val); void _set_snap_step(Vector2 p_val); void _set_snap_off(Vector2 p_val); void _set_snap_sep(Vector2 p_val); + void _zoom_in(); + void _zoom_out(); + void _zoom_reset(); + void draw_highlight_current_tile(); void draw_highlight_subtile(Vector2 coord, const Vector<Vector2> &other_highlighted = Vector<Vector2>()); void draw_tile_subdivision(int p_id, Color p_color) const; @@ -204,6 +216,7 @@ class TilesetEditorContext : public Object { bool snap_options_visible; public: + bool _hide_script_from_inspector() { return true; } void set_tileset(const Ref<TileSet> &p_tileset); private: @@ -213,6 +226,7 @@ protected: bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; void _get_property_list(List<PropertyInfo> *p_list) const; + static void _bind_methods(); public: TilesetEditorContext(TileSetEditor *p_tileset_editor); @@ -232,6 +246,8 @@ public: virtual void edit(Object *p_node); virtual bool handles(Object *p_node) const; virtual void make_visible(bool p_visible); + void set_state(const Dictionary &p_state); + Dictionary get_state() const; TileSetEditorPlugin(EditorNode *p_node); }; diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 39e50ec7f8..b084fe1915 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -798,7 +798,7 @@ VisualShaderEditor::VisualShaderEditor() { add_node = memnew(MenuButton); graph->get_zoom_hbox()->add_child(add_node); - add_node->set_text(TTR("Add Node..")); + add_node->set_text(TTR("Add Node...")); graph->get_zoom_hbox()->move_child(add_node, 0); add_node->get_popup()->connect("id_pressed", this, "_add_node"); diff --git a/editor/progress_dialog.cpp b/editor/progress_dialog.cpp index 29a780961e..4a98aa411d 100644 --- a/editor/progress_dialog.cpp +++ b/editor/progress_dialog.cpp @@ -39,7 +39,7 @@ void BackgroundProgress::_add_task(const String &p_task, const String &p_label, _THREAD_SAFE_METHOD_ ERR_FAIL_COND(tasks.has(p_task)); - Task t; + BackgroundProgress::Task t; t.hb = memnew(HBoxContainer); Label *l = memnew(Label); l->set_text(p_label + " "); @@ -112,7 +112,7 @@ void BackgroundProgress::add_task(const String &p_task, const String &p_label, i void BackgroundProgress::task_step(const String &p_task, int p_step) { //this code is weird, but it prevents deadlock. - bool no_updates; + bool no_updates = true; { _THREAD_SAFE_METHOD_ no_updates = updates.empty(); @@ -167,7 +167,7 @@ void ProgressDialog::_popup() { void ProgressDialog::add_task(const String &p_task, const String &p_label, int p_steps, bool p_can_cancel) { ERR_FAIL_COND(tasks.has(p_task)); - Task t; + ProgressDialog::Task t; t.vb = memnew(VBoxContainer); VBoxContainer *vb2 = memnew(VBoxContainer); t.vb->add_margin_child(p_label, vb2); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index fa6dce1771..557aac021d 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -50,14 +50,16 @@ void ProjectExportDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { + duplicate_preset->set_icon(get_icon("Duplicate", "EditorIcons")); delete_preset->set_icon(get_icon("Remove", "EditorIcons")); connect("confirmed", this, "_export_pck_zip"); custom_feature_display->get_parent_control()->add_style_override("panel", get_stylebox("bg", "Tree")); } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/export_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "export", get_rect()); } break; case NOTIFICATION_THEME_CHANGED: { + duplicate_preset->set_icon(get_icon("Duplicate", "EditorIcons")); delete_preset->set_icon(get_icon("Remove", "EditorIcons")); Control *panel = custom_feature_display->get_parent_control(); if (panel) @@ -82,8 +84,9 @@ void ProjectExportDialog::popup_export() { } // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/export_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/export_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "export", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); @@ -163,14 +166,37 @@ void ProjectExportDialog::_update_presets() { updating = false; } +void ProjectExportDialog::_update_export_all() { + + bool can_export = EditorExport::get_singleton()->get_export_preset_count() > 0 ? true : false; + + for (int i = 0; i < EditorExport::get_singleton()->get_export_preset_count(); i++) { + Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(i); + bool needs_templates; + String error; + if (preset->get_export_path() == "" || !preset->get_platform()->can_export(preset, error, needs_templates)) { + can_export = false; + break; + } + } + + if (can_export) { + export_all_button->set_disabled(false); + } else { + export_all_button->set_disabled(true); + } +} + void ProjectExportDialog::_edit_preset(int p_index) { if (p_index < 0 || p_index >= presets->get_item_count()) { name->set_text(""); name->set_editable(false); + export_path->hide(); runnable->set_disabled(true); parameters->edit(NULL); presets->unselect_all(); + duplicate_preset->set_disabled(true); delete_preset->set_disabled(true); sections->hide(); patches->clear(); @@ -188,8 +214,19 @@ void ProjectExportDialog::_edit_preset(int p_index) { sections->show(); name->set_editable(true); + export_path->show(); + duplicate_preset->set_disabled(false); delete_preset->set_disabled(false); name->set_text(current->get_name()); + + List<String> extension_list = current->get_platform()->get_binary_extensions(current); + Vector<String> extension_vector; + for (int i = 0; i < extension_list.size(); i++) { + extension_vector.push_back("*." + extension_list[i]); + } + + export_path->setup(extension_vector, false, true); + export_path->update_property(); runnable->set_disabled(false); runnable->set_pressed(current->is_runnable()); parameters->edit(current.ptr()); @@ -260,6 +297,7 @@ void ProjectExportDialog::_edit_preset(int p_index) { custom_features->set_text(current->get_custom_features()); _update_feature_list(); + _update_export_all(); updating = false; } @@ -428,6 +466,87 @@ void ProjectExportDialog::_name_changed(const String &p_string) { _update_presets(); } +void ProjectExportDialog::set_export_path(const String &p_value) { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); + + current->set_export_path(p_value); +} + +String ProjectExportDialog::get_export_path() { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND_V(current.is_null(), String("")); + + return current->get_export_path(); +} + +void ProjectExportDialog::_export_path_changed(const StringName &p_property, const Variant &p_value) { + + if (updating) + return; + + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); + + current->set_export_path(p_value); + _update_presets(); +} + +void ProjectExportDialog::_duplicate_preset() { + + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + if (current.is_null()) + return; + + Ref<EditorExportPreset> preset = current->get_platform()->create_preset(); + ERR_FAIL_COND(!preset.is_valid()); + + String name = current->get_name() + "" + itos(1); + bool make_runnable = true; + int attempt = 2; + while (true) { + + bool valid = true; + + for (int i = 0; i < EditorExport::get_singleton()->get_export_preset_count(); i++) { + Ref<EditorExportPreset> p = EditorExport::get_singleton()->get_export_preset(i); + if (p->get_platform() == preset->get_platform() && p->is_runnable()) { + make_runnable = false; + } + if (p->get_name() == name) { + valid = false; + break; + } + } + + if (valid) + break; + + attempt++; + name = current->get_name() + " " + itos(attempt); + } + + preset->set_name(name); + if (make_runnable) + preset->set_runnable(make_runnable); + preset->set_export_filter(current->get_export_filter()); + preset->set_include_filter(current->get_include_filter()); + preset->set_exclude_filter(current->get_exclude_filter()); + Vector<String> list = current->get_patches(); + for (int i = 0; i < list.size(); i++) { + preset->add_patch(list[i]); + } + preset->set_custom_features(current->get_custom_features()); + + for (const List<PropertyInfo>::Element *E = current->get_properties().front(); E; E = E->next()) { + preset->set(E->get().name, current->get(E->get().name)); + } + + EditorExport::get_singleton()->add_export_preset(preset); + _update_presets(); + _edit_preset(EditorExport::get_singleton()->get_export_preset_count() - 1); +} + void ProjectExportDialog::_delete_preset() { Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); @@ -638,10 +757,10 @@ bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem for (int i = 0; i < p_dir->get_subdir_count(); i++) { TreeItem *subdir = include_files->create_item(p_item); - if (_fill_tree(p_dir->get_subdir(i), subdir, current, p_only_scenes) == false) { - memdelete(subdir); - } else { + if (_fill_tree(p_dir->get_subdir(i), subdir, current, p_only_scenes)) { used = true; + } else { + memdelete(subdir); } } @@ -745,12 +864,19 @@ void ProjectExportDialog::_export_project() { export_project->set_access(FileDialog::ACCESS_FILESYSTEM); export_project->clear_filters(); - String extension = platform->get_binary_extension(current); - if (extension != String()) { - export_project->add_filter("*." + extension + " ; " + platform->get_name() + " Export"); - export_project->set_current_file(default_filename + "." + extension); + List<String> extension_list = platform->get_binary_extensions(current); + for (int i = 0; i < extension_list.size(); i++) { + export_project->add_filter("*." + extension_list[i] + " ; " + platform->get_name() + " Export"); + } + + if (current->get_export_path() != "") { + export_project->set_current_path(current->get_export_path()); } else { - export_project->set_current_file(default_filename); + if (extension_list.size() >= 1) { + export_project->set_current_file(default_filename + "." + extension_list[0]); + } else { + export_project->set_current_file(default_filename); + } } // Ensure that signal is connected if previous attempt left it disconnected with _validate_export_path @@ -772,6 +898,7 @@ void ProjectExportDialog::_export_project_to_path(const String &p_path) { ERR_FAIL_COND(current.is_null()); Ref<EditorExportPlatform> platform = current->get_platform(); ERR_FAIL_COND(platform.is_null()); + current->set_export_path(p_path); Error err = platform->export_project(current, export_debug->is_pressed(), p_path, 0); if (err != OK) { @@ -782,6 +909,42 @@ void ProjectExportDialog::_export_project_to_path(const String &p_path) { } } +void ProjectExportDialog::_export_all_dialog() { + + export_all_dialog->show(); + export_all_dialog->popup_centered_minsize(Size2(300, 80)); +} + +void ProjectExportDialog::_export_all_dialog_action(const String &p_str) { + + export_all_dialog->hide(); + + _export_all(p_str == "release" ? false : true); +} + +void ProjectExportDialog::_export_all(bool p_debug) { + + String mode = p_debug ? TTR("Debug") : TTR("Release"); + EditorProgress ep("exportall", TTR("Exporting All") + " " + mode, EditorExport::get_singleton()->get_export_preset_count()); + + for (int i = 0; i < EditorExport::get_singleton()->get_export_preset_count(); i++) { + Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(i); + ERR_FAIL_COND(preset.is_null()); + Ref<EditorExportPlatform> platform = preset->get_platform(); + ERR_FAIL_COND(platform.is_null()); + + ep.step(preset->get_name(), i); + + Error err = platform->export_project(preset, p_debug, preset->get_export_path(), 0); + if (err != OK) { + error_dialog->set_text(TTR("Export templates for this platform are missing/corrupted:") + " " + platform->get_name()); + error_dialog->show(); + error_dialog->popup_centered_minsize(Size2(300, 80)); + ERR_PRINT("Failed to export project"); + } + } +} + void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_add_preset", &ProjectExportDialog::_add_preset); @@ -789,6 +952,7 @@ void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_update_parameters", &ProjectExportDialog::_update_parameters); ClassDB::bind_method("_runnable_pressed", &ProjectExportDialog::_runnable_pressed); ClassDB::bind_method("_name_changed", &ProjectExportDialog::_name_changed); + ClassDB::bind_method("_duplicate_preset", &ProjectExportDialog::_duplicate_preset); ClassDB::bind_method("_delete_preset", &ProjectExportDialog::_delete_preset); ClassDB::bind_method("_delete_preset_confirm", &ProjectExportDialog::_delete_preset_confirm); ClassDB::bind_method("get_drag_data_fw", &ProjectExportDialog::get_drag_data_fw); @@ -805,10 +969,18 @@ void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_export_pck_zip_selected", &ProjectExportDialog::_export_pck_zip_selected); ClassDB::bind_method("_open_export_template_manager", &ProjectExportDialog::_open_export_template_manager); ClassDB::bind_method("_validate_export_path", &ProjectExportDialog::_validate_export_path); + ClassDB::bind_method("_export_path_changed", &ProjectExportDialog::_export_path_changed); ClassDB::bind_method("_export_project", &ProjectExportDialog::_export_project); ClassDB::bind_method("_export_project_to_path", &ProjectExportDialog::_export_project_to_path); + ClassDB::bind_method("_export_all", &ProjectExportDialog::_export_all); + ClassDB::bind_method("_export_all_dialog", &ProjectExportDialog::_export_all_dialog); + ClassDB::bind_method("_export_all_dialog_action", &ProjectExportDialog::_export_all_dialog_action); ClassDB::bind_method("_custom_features_changed", &ProjectExportDialog::_custom_features_changed); ClassDB::bind_method("_tab_changed", &ProjectExportDialog::_tab_changed); + ClassDB::bind_method("set_export_path", &ProjectExportDialog::set_export_path); + ClassDB::bind_method("get_export_path", &ProjectExportDialog::get_export_path); + + ADD_PROPERTY(PropertyInfo(Variant::STRING, "export_path"), "set_export_path", "get_export_path"); } ProjectExportDialog::ProjectExportDialog() { @@ -842,6 +1014,9 @@ ProjectExportDialog::ProjectExportDialog() { presets->set_drag_forwarding(this); mc->add_child(presets); presets->connect("item_selected", this, "_edit_preset"); + duplicate_preset = memnew(ToolButton); + preset_hb->add_child(duplicate_preset); + duplicate_preset->connect("pressed", this, "_duplicate_preset"); delete_preset = memnew(ToolButton); preset_hb->add_child(delete_preset); delete_preset->connect("pressed", this, "_delete_preset"); @@ -858,6 +1033,13 @@ ProjectExportDialog::ProjectExportDialog() { runnable->connect("pressed", this, "_runnable_pressed"); settings_vb->add_child(runnable); + export_path = memnew(EditorPropertyPath); + settings_vb->add_child(export_path); + export_path->set_label(TTR("Export Path")); + export_path->set_object_and_property(this, "export_path"); + export_path->set_save_mode(); + export_path->connect("property_changed", this, "_export_path_changed"); + sections = memnew(TabContainer); sections->set_tab_align(TabContainer::ALIGN_LEFT); settings_vb->add_child(sections); @@ -948,7 +1130,9 @@ ProjectExportDialog::ProjectExportDialog() { //disable by default name->set_editable(false); + export_path->hide(); runnable->set_disabled(true); + duplicate_preset->set_disabled(true); delete_preset->set_disabled(true); sections->hide(); parameters->edit(NULL); @@ -967,6 +1151,19 @@ ProjectExportDialog::ProjectExportDialog() { // Disable initially before we select a valid preset export_button->set_disabled(true); + export_all_dialog = memnew(ConfirmationDialog); + add_child(export_all_dialog); + export_all_dialog->set_title("Export All"); + export_all_dialog->set_text(TTR("Export mode?")); + export_all_dialog->get_ok()->hide(); + export_all_dialog->add_button(TTR("Debug"), true, "debug"); + export_all_dialog->add_button(TTR("Release"), true, "release"); + export_all_dialog->connect("custom_action", this, "_export_all_dialog_action"); + + export_all_button = add_button(TTR("Export All"), !OS::get_singleton()->get_swap_ok_cancel(), "export"); + export_all_button->connect("pressed", this, "_export_all_dialog"); + export_all_button->set_disabled(true); + export_pck_zip = memnew(FileDialog); export_pck_zip->add_filter("*.zip ; ZIP File"); export_pck_zip->add_filter("*.pck ; Godot Game Pack"); @@ -1030,6 +1227,8 @@ ProjectExportDialog::ProjectExportDialog() { default_filename = "UnnamedProject"; } } + + _update_export_all(); } ProjectExportDialog::~ProjectExportDialog() { diff --git a/editor/project_export.h b/editor/project_export.h index 552c6d7faf..b43dd9a392 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -37,6 +37,7 @@ #include "editor/editor_file_dialog.h" #include "editor/editor_file_system.h" #include "editor/editor_inspector.h" +#include "editor/editor_properties.h" #include "scene/gui/button.h" #include "scene/gui/check_button.h" #include "scene/gui/control.h" @@ -61,10 +62,12 @@ private: TabContainer *sections; MenuButton *add_preset; + Button *duplicate_preset; Button *delete_preset; ItemList *presets; LineEdit *name; + EditorPropertyPath *export_path; EditorInspector *parameters; CheckButton *runnable; @@ -91,6 +94,8 @@ private: ConfirmationDialog *patch_erase; Button *export_button; + Button *export_all_button; + AcceptDialog *export_all_dialog; LineEdit *custom_features; RichTextLabel *custom_feature_display; @@ -106,10 +111,13 @@ private: void _runnable_pressed(); void _update_parameters(const String &p_edited_property); void _name_changed(const String &p_string); + void _export_path_changed(const StringName &p_property, const Variant &p_value); void _add_preset(int p_platform); void _edit_preset(int p_index); + void _duplicate_preset(); void _delete_preset(); void _delete_preset_confirm(); + void _update_export_all(); void _update_presets(); @@ -139,6 +147,9 @@ private: void _validate_export_path(const String &p_path); void _export_project(); void _export_project_to_path(const String &p_path); + void _export_all_dialog(); + void _export_all_dialog_action(const String &p_str); + void _export_all(bool p_debug); void _update_feature_list(); void _custom_features_changed(const String &p_text); @@ -152,6 +163,9 @@ protected: public: void popup_export(); + void set_export_path(const String &p_value); + String get_export_path(); + ProjectExportDialog(); ~ProjectExportDialog(); }; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 83de5a646a..8d5847bea4 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -745,7 +745,8 @@ public: get_ok()->set_text(TTR("Create & Edit")); name_container->show(); install_path_container->hide(); - project_name->grab_focus(); + project_name->call_deferred("grab_focus"); + project_name->call_deferred("select_all"); } else if (mode == MODE_INSTALL) { @@ -866,16 +867,22 @@ struct ProjectItem { uint64_t last_modified; bool favorite; bool grayed; + bool ordered_latest_modification; ProjectItem() {} - ProjectItem(const String &p_project, const String &p_path, const String &p_conf, uint64_t p_last_modified, bool p_favorite = false, bool p_grayed = false) { + ProjectItem(const String &p_project, const String &p_path, const String &p_conf, uint64_t p_last_modified, bool p_favorite = false, bool p_grayed = false, const bool p_ordered_latest_modification = true) { project = p_project; path = p_path; conf = p_conf; last_modified = p_last_modified; favorite = p_favorite; grayed = p_grayed; + ordered_latest_modification = p_ordered_latest_modification; + } + _FORCE_INLINE_ bool operator<(const ProjectItem &l) const { + if (ordered_latest_modification) + return last_modified > l.last_modified; + return project < l.project; } - _FORCE_INLINE_ bool operator<(const ProjectItem &l) const { return last_modified > l.last_modified; } _FORCE_INLINE_ bool operator==(const ProjectItem &l) const { return project == l.project; } }; @@ -1156,6 +1163,13 @@ void ProjectManager::_load_recent_projects() { Color font_color = gui_base->get_color("font_color", "Tree"); + bool set_ordered_latest_modification; + ProjectListFilter::FilterOption filter_order_option = project_order_filter->get_filter_option(); + if (filter_order_option == ProjectListFilter::FILTER_NAME) + set_ordered_latest_modification = false; + else + set_ordered_latest_modification = true; + List<ProjectItem> projects; List<ProjectItem> favorite_projects; @@ -1188,13 +1202,12 @@ void ProjectManager::_load_recent_projects() { grayed = true; } - ProjectItem item(project, path, conf, last_modified, favorite, grayed); + ProjectItem item(project, path, conf, last_modified, favorite, grayed, set_ordered_latest_modification); if (favorite) favorite_projects.push_back(item); else projects.push_back(item); } - projects.sort(); favorite_projects.sort(); @@ -1312,7 +1325,7 @@ void ProjectManager::_load_recent_projects() { show->set_modulate(Color(1, 1, 1, 0.5)); path_hb->add_child(show); show->connect("pressed", this, "_show_project", varray(path)); - show->set_tooltip(TTR("Show In File Manager")); + show->set_tooltip(TTR("Show in File Manager")); Label *fpath = memnew(Label(path)); fpath->set_name("path"); @@ -1818,16 +1831,41 @@ ProjectManager::ProjectManager() { tabs->add_child(tree_hb); VBoxContainer *search_tree_vb = memnew(VBoxContainer); - search_tree_vb->set_h_size_flags(SIZE_EXPAND_FILL); tree_hb->add_child(search_tree_vb); + search_tree_vb->set_h_size_flags(SIZE_EXPAND_FILL); - HBoxContainer *search_box = memnew(HBoxContainer); - search_box->add_spacer(true); + HBoxContainer *sort_filters = memnew(HBoxContainer); + Label *sort_label = memnew(Label); + sort_label->set_text(TTR("Sort:")); + sort_filters->add_child(sort_label); + Vector<String> vec1; + vec1.push_back("Name"); + vec1.push_back("Last Modified"); + project_order_filter = memnew(ProjectListFilter); + project_order_filter->_setup_filters(vec1); + project_order_filter->set_filter_size(150); + sort_filters->add_child(project_order_filter); + project_order_filter->connect("filter_changed", this, "_load_recent_projects"); + project_order_filter->set_custom_minimum_size(Size2(180, 10) * EDSCALE); + + sort_filters->add_spacer(true); + Label *search_label = memnew(Label); + search_label->set_text(TTR(" Search:")); + sort_filters->add_child(search_label); + + HBoxContainer *search_filters = memnew(HBoxContainer); + Vector<String> vec2; + vec2.push_back("Name"); + vec2.push_back("Path"); project_filter = memnew(ProjectListFilter); - search_box->add_child(project_filter); + project_filter->_setup_filters(vec2); + project_filter->add_search_box(); + search_filters->add_child(project_filter); project_filter->connect("filter_changed", this, "_load_recent_projects"); project_filter->set_custom_minimum_size(Size2(280, 10) * EDSCALE); - search_tree_vb->add_child(search_box); + sort_filters->add_child(search_filters); + + search_tree_vb->add_child(sort_filters); PanelContainer *pc = memnew(PanelContainer); pc->add_style_override("panel", gui_base->get_stylebox("bg", "Tree")); @@ -2017,11 +2055,11 @@ ProjectManager::~ProjectManager() { EditorSettings::destroy(); } -void ProjectListFilter::_setup_filters() { +void ProjectListFilter::_setup_filters(Vector<String> options) { filter_option->clear(); - filter_option->add_item(TTR("Name")); - filter_option->add_item(TTR("Path")); + for (int i = 0; i < options.size(); i++) + filter_option->add_item(TTR(options[i])); } void ProjectListFilter::_search_text_changed(const String &p_newtext) { @@ -2046,7 +2084,7 @@ void ProjectListFilter::_filter_option_selected(int p_idx) { void ProjectListFilter::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE && has_search_box) { search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); } @@ -2060,20 +2098,27 @@ void ProjectListFilter::_bind_methods() { ADD_SIGNAL(MethodInfo("filter_changed")); } +void ProjectListFilter::add_search_box() { + search_box = memnew(LineEdit); + search_box->connect("text_changed", this, "_search_text_changed"); + search_box->set_h_size_flags(SIZE_EXPAND_FILL); + add_child(search_box); + has_search_box = true; +} + +void ProjectListFilter::set_filter_size(int h_size) { + filter_option->set_custom_minimum_size(Size2(h_size * EDSCALE, 10 * EDSCALE)); +} + ProjectListFilter::ProjectListFilter() { _current_filter = FILTER_NAME; filter_option = memnew(OptionButton); - filter_option->set_custom_minimum_size(Size2(80 * EDSCALE, 10 * EDSCALE)); + set_filter_size(80); filter_option->set_clip_text(true); filter_option->connect("item_selected", this, "_filter_option_selected"); add_child(filter_option); - _setup_filters(); - - search_box = memnew(LineEdit); - search_box->connect("text_changed", this, "_search_text_changed"); - search_box->set_h_size_flags(SIZE_EXPAND_FILL); - add_child(search_box); + has_search_box = false; } diff --git a/editor/project_manager.h b/editor/project_manager.h index ad21e00b0d..88fc081272 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -54,6 +54,7 @@ class ProjectManager : public Control { EditorAssetLibrary *asset_library; ProjectListFilter *project_filter; + ProjectListFilter *project_order_filter; ConfirmationDialog *language_restart_ask; ConfirmationDialog *erase_ask; @@ -130,6 +131,7 @@ private: OptionButton *filter_option; LineEdit *search_box; + bool has_search_box; enum FilterOption { FILTER_NAME, @@ -138,7 +140,6 @@ private: FilterOption _current_filter; void _search_text_changed(const String &p_newtext); - void _setup_filters(); void _filter_option_selected(int p_idx); protected: @@ -146,6 +147,9 @@ protected: static void _bind_methods(); public: + void _setup_filters(Vector<String> options); + void add_search_box(); + void set_filter_size(int h_size); String get_search_term(); FilterOption get_filter_option(); ProjectListFilter(); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 7a68646f40..af8d33d3d1 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -115,10 +115,9 @@ void ProjectSettingsEditor::_notification(int p_what) { } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/project_settings_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "project_settings", get_rect()); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - search_button->set_icon(get_icon("Search", "EditorIcons")); search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); @@ -788,8 +787,9 @@ void ProjectSettingsEditor::_update_actions() { void ProjectSettingsEditor::popup_project_settings() { // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/project_settings_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/project_settings_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "project_settings", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index c611327a31..8da75b7b3f 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -132,7 +132,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { emit_signal("variant_changed"); } else if (hint == PROPERTY_HINT_ENUM) { - v = p_which; + v = menu->get_item_metadata(p_which); emit_signal("variant_changed"); } } break; @@ -427,12 +427,14 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } else if (hint == PROPERTY_HINT_ENUM) { Vector<String> options = hint_text.split(","); + int current_val = 0; for (int i = 0; i < options.size(); i++) { - if (options[i].find(":") != -1) { - menu->add_item(options[i].get_slicec(':', 0), options[i].get_slicec(':', 1).to_int()); - } else { - menu->add_item(options[i], i); - } + Vector<String> text_split = options[i].split(":"); + if (text_split.size() != 1) + current_val = text_split[1].to_int(); + menu->add_item(text_split[0]); + menu->set_item_metadata(i, current_val); + current_val += 1; } menu->set_position(get_position()); menu->popup(); @@ -966,7 +968,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: RES r = v; if (r.is_valid() && r->get_path().is_resource_file()) { menu->add_separator(); - menu->add_item(TTR("Show in File System"), OBJ_MENU_SHOW_IN_FILE_SYSTEM); + menu->add_item(TTR("Show in FileSystem"), OBJ_MENU_SHOW_IN_FILE_SYSTEM); } } else { } diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 9042bdc7c1..a8c97be936 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -394,6 +394,8 @@ void PropertySelector::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { connect("confirmed", this, "_confirmed"); + } else if (p_what == NOTIFICATION_EXIT_TREE) { + disconnect("confirmed", this, "_confirmed"); } } diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp index e48a0022e8..8dacc3c142 100644 --- a/editor/quick_open.cpp +++ b/editor/quick_open.cpp @@ -261,6 +261,8 @@ void EditorQuickOpen::_notification(int p_what) { search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); + } else if (p_what == NOTIFICATION_EXIT_TREE) { + disconnect("confirmed", this, "_confirmed"); } } diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 11a0a42b9e..fe438236c9 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -53,6 +53,13 @@ void SceneTreeDock::_nodes_drag_begin() { } } +void SceneTreeDock::_quick_open() { + Vector<String> files = quick_open->get_selected_files(); + for (int i = 0; i < files.size(); i++) { + instance(files[i]); + } +} + void SceneTreeDock::_input(Ref<InputEvent> p_event) { Ref<InputEventMouseButton> mb = p_event; @@ -319,16 +326,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { break; } - file->set_mode(EditorFileDialog::MODE_OPEN_FILE); - List<String> extensions; - ResourceLoader::get_recognized_extensions_for_type("PackedScene", &extensions); - file->clear_filters(); - for (int i = 0; i < extensions.size(); i++) { - - file->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); - } - - file->popup_centered_ratio(); + quick_open->popup_dialog("PackedScene", true); + quick_open->set_title(TTR("Instance Child Scene")); } break; case TOOL_REPLACE: { @@ -359,15 +358,12 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { ScriptLanguage *l = ScriptServer::get_language(i); if (l->get_type() == existing->get_class()) { String name = l->get_global_class_name(existing->get_path()); - if (ScriptServer::is_global_class(name)) { - if (EDITOR_GET("interface/editors/derive_script_globals_by_name").operator bool()) { - inherits = editor->get_editor_data().script_class_get_base(name); - } else if (l->can_inherit_from_file()) { - inherits = "\"" + existing->get_path() + "\""; - } - } else { + if (ScriptServer::is_global_class(name) && EDITOR_GET("interface/editors/derive_script_globals_by_name").operator bool()) { + inherits = name; + } else if (l->can_inherit_from_file()) { inherits = "\"" + existing->get_path() + "\""; } + break; } } } @@ -574,6 +570,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().add_do_method(editor, "set_edited_scene", node); editor_data->get_undo_redo().add_do_method(node, "set_filename", root->get_filename()); editor_data->get_undo_redo().add_do_method(root, "set_filename", String()); + editor_data->get_undo_redo().add_do_method(node, "set_owner", (Object *)NULL); + editor_data->get_undo_redo().add_do_method(root, "set_owner", node); _node_replace_owner(root, root, node, MODE_DO); editor_data->get_undo_redo().add_undo_method(root, "set_filename", root->get_filename()); @@ -581,6 +579,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().add_undo_method(node, "remove_child", root); editor_data->get_undo_redo().add_undo_method(editor, "set_edited_scene", root); editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node); + editor_data->get_undo_redo().add_undo_method(root, "set_owner", (Object *)NULL); + editor_data->get_undo_redo().add_undo_method(node, "set_owner", root); + _node_replace_owner(root, root, root, MODE_UNDO); editor_data->get_undo_redo().add_do_method(scene_tree, "update_tree"); @@ -689,6 +690,13 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { } } } break; + case TOOL_OPEN_DOCUMENTATION: { + List<Node *> selection = editor_selection->get_selected_node_list(); + for (int i = 0; i < selection.size(); i++) { + ScriptEditor::get_singleton()->goto_help("class_name:" + selection[i]->get_class()); + } + EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT); + } break; case TOOL_SCENE_EDITABLE_CHILDREN: { List<Node *> selection = editor_selection->get_selected_node_list(); List<Node *>::Element *e = selection.front(); @@ -790,7 +798,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { case TOOL_CREATE_USER_INTERFACE: case TOOL_CREATE_FAVORITE: { - Node *new_node; + Node *new_node = NULL; if (TOOL_CREATE_FAVORITE == p_tool) { String name = selected_favorite_root.get_slicec(' ', 0); @@ -829,6 +837,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().commit_action(); editor->edit_node(new_node); + editor_selection->clear(); + editor_selection->add_node(new_node); } break; @@ -973,7 +983,7 @@ void SceneTreeDock::_notification(int p_what) { void SceneTreeDock::_node_replace_owner(Node *p_base, Node *p_node, Node *p_root, ReplaceOwnerMode p_mode) { - if (p_node->get_owner() == p_base || !p_node->get_owner()) { + if (p_node->get_owner() == p_base && p_node != p_root) { UndoRedo *undo_redo = &editor_data->get_undo_redo(); switch (p_mode) { case MODE_BIDI: { @@ -1293,6 +1303,13 @@ bool SceneTreeDock::_validate_no_foreign() { return false; } + // When edited_scene inherits from another one the root Node will be the parent Scene, + // we don't want to consider that Node a foreign one otherwise we would not be able to + // delete it + if (edited_scene->get_scene_inherited_state().is_valid() && edited_scene == E->get()) { + continue; + } + if (edited_scene->get_scene_inherited_state().is_valid() && edited_scene->get_scene_inherited_state()->find_node_by_path(edited_scene->get_path_to(E->get())) >= 0) { accept->set_text(TTR("Can't operate on nodes the current scene inherits from!")); @@ -1483,6 +1500,7 @@ void SceneTreeDock::_script_created(Ref<Script> p_script) { editor_data->get_undo_redo().commit_action(); editor->push_item(p_script.operator->()); + _update_script_button(); } void SceneTreeDock::_toggle_editable_children() { @@ -1598,9 +1616,17 @@ void SceneTreeDock::_delete_confirm() { void SceneTreeDock::_update_script_button() { if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 1) { - button_create_script->show(); + Node *n = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list()[0]; + if (n->get_script().is_null()) { + button_create_script->show(); + button_clear_script->hide(); + } else { + button_create_script->hide(); + button_clear_script->show(); + } } else { - button_create_script->hide(); + button_create_script->show(); + button_clear_script->hide(); } } @@ -2027,6 +2053,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->clear(); + Ref<Script> existing_script; if (selection.size() == 1) { Node *selected = selection[0]; @@ -2041,16 +2068,23 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_icon_shortcut(get_icon("Add", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/add_child_node"), TOOL_NEW); menu->add_icon_shortcut(get_icon("Instance", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/instance_scene"), TOOL_INSTANCE); menu->add_separator(); + existing_script = selected->get_script(); + } + if (!existing_script.is_valid()) { menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT); - Ref<Script> existing = selected->get_script(); - if (existing.is_valid()) { - menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); - } - menu->add_separator(); + } + if (selection.size() > 1 || existing_script.is_valid()) { + menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); + menu->add_icon_shortcut(get_icon("ScriptExtend", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/extend_script"), TOOL_ATTACH_SCRIPT); + } + + menu->add_separator(); + if (selection.size() == 1) { menu->add_icon_shortcut(get_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/rename"), TOOL_RENAME); } menu->add_icon_shortcut(get_icon("Reload", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/change_node_type"), TOOL_REPLACE); + if (scene_tree->get_selected() != edited_scene) { menu->add_separator(); menu->add_icon_shortcut(get_icon("MoveUp", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/move_up"), TOOL_MOVE_UP); @@ -2086,10 +2120,6 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->set_item_checked(menu->get_item_idx_from_text(TTR("Load As Placeholder")), placeholder); } } - } else { - menu->add_separator(); - menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT); - menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); } if (selection.size() > 1) { @@ -2098,6 +2128,9 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_icon_shortcut(get_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/batch_rename"), TOOL_BATCH_RENAME); } menu->add_separator(); + menu->add_icon_item(get_icon("Help", "EditorIcons"), TTR("Open documentation"), TOOL_OPEN_DOCUMENTATION); + + menu->add_separator(); menu->add_icon_shortcut(get_icon("Remove", "EditorIcons"), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), KEY_DELETE), TOOL_ERASE); menu->set_size(Size2(1, 1)); menu->set_position(p_menu_pos); @@ -2270,6 +2303,7 @@ void SceneTreeDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_new_scene_from"), &SceneTreeDock::_new_scene_from); ClassDB::bind_method(D_METHOD("_nodes_dragged"), &SceneTreeDock::_nodes_dragged); ClassDB::bind_method(D_METHOD("_files_dropped"), &SceneTreeDock::_files_dropped); + ClassDB::bind_method(D_METHOD("_quick_open"), &SceneTreeDock::_quick_open); ClassDB::bind_method(D_METHOD("_script_dropped"), &SceneTreeDock::_script_dropped); ClassDB::bind_method(D_METHOD("_tree_rmb"), &SceneTreeDock::_tree_rmb); ClassDB::bind_method(D_METHOD("_filter_changed"), &SceneTreeDock::_filter_changed); @@ -2306,6 +2340,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel ED_SHORTCUT("scene_tree/instance_scene", TTR("Instance Child Scene")); ED_SHORTCUT("scene_tree/change_node_type", TTR("Change Type")); ED_SHORTCUT("scene_tree/attach_script", TTR("Attach Script")); + ED_SHORTCUT("scene_tree/extend_script", TTR("Extend Script")); ED_SHORTCUT("scene_tree/clear_script", TTR("Clear Script")); ED_SHORTCUT("scene_tree/move_up", TTR("Move Up"), KEY_MASK_CMD | KEY_UP); ED_SHORTCUT("scene_tree/move_down", TTR("Move Down"), KEY_MASK_CMD | KEY_DOWN); @@ -2337,6 +2372,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel filter->set_h_size_flags(SIZE_EXPAND_FILL); filter->set_placeholder(TTR("Filter nodes")); filter_hbc->add_child(filter); + filter->add_constant_override("minimum_spaces", 0); filter->connect("text_changed", this, "_filter_changed"); tb = memnew(ToolButton); @@ -2420,9 +2456,9 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel accept = memnew(AcceptDialog); add_child(accept); - file = memnew(EditorFileDialog); - add_child(file); - file->connect("file_selected", this, "instance"); + quick_open = memnew(EditorQuickOpen); + add_child(quick_open); + quick_open->connect("quick_open", this, "_quick_open"); set_process_unhandled_key_input(true); delete_dialog = memnew(ConfirmationDialog); diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h index 269b0b69db..3939f4f361 100644 --- a/editor/scene_tree_dock.h +++ b/editor/scene_tree_dock.h @@ -36,6 +36,7 @@ #include "editor/editor_data.h" #include "editor/editor_sub_scene.h" #include "editor/groups_editor.h" +#include "editor/quick_open.h" #include "editor/rename_dialog.h" #include "editor/reparent_dialog.h" #include "editor/script_create_dialog.h" @@ -75,6 +76,7 @@ class SceneTreeDock : public VBoxContainer { TOOL_ERASE, TOOL_COPY_NODE_PATH, TOOL_BUTTON_MAX, + TOOL_OPEN_DOCUMENTATION, TOOL_SCENE_EDITABLE_CHILDREN, TOOL_SCENE_USE_PLACEHOLDER, TOOL_SCENE_MAKE_LOCAL, @@ -124,7 +126,7 @@ class SceneTreeDock : public VBoxContainer { ConfirmationDialog *editable_instance_remove_dialog; ReparentDialog *reparent_dialog; - EditorFileDialog *file; + EditorQuickOpen *quick_open; EditorSubScene *import_subscene_dialog; EditorFileDialog *new_scene_from_dialog; @@ -193,6 +195,7 @@ class SceneTreeDock : public VBoxContainer { void _nodes_dragged(Array p_nodes, NodePath p_to, int p_type); void _files_dropped(Vector<String> p_files, NodePath p_to, int p_type); void _script_dropped(String p_file, NodePath p_to); + void _quick_open(); void _tree_rmb(const Vector2 &p_menu_pos); diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 07670bb420..95f0c4870e 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -73,7 +73,7 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i undo_redo->create_action(TTR("Toggle Visible")); _toggle_visible(n); List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.size() > 1) { + if (selection.size() > 1 && selection.find(n) != NULL) { for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Node *nv = E->get(); ERR_FAIL_COND(!nv); @@ -665,6 +665,13 @@ void SceneTreeEditor::_renamed() { Node *n = get_node(np); ERR_FAIL_COND(!n); + // Empty node names are not allowed, so resets it to previous text and show warning + if (which->get_text(0).strip_edges().empty()) { + which->set_text(0, n->get_name()); + EditorNode::get_singleton()->show_warning(TTR("No name provided")); + return; + } + String new_name = which->get_text(0); if (!Node::_validate_node_name(new_name)) { @@ -973,8 +980,11 @@ void SceneTreeEditor::_editor_settings_changed() { if (enable_rl) { tree->add_constant_override("draw_relationship_lines", 1); tree->add_color_override("relationship_line_color", rl_color); - } else + tree->add_constant_override("draw_guides", 0); + } else { tree->add_constant_override("draw_relationship_lines", 0); + tree->add_constant_override("draw_guides", 1); + } } void SceneTreeEditor::_bind_methods() { diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp index eb72d0aa6e..559ab32505 100644 --- a/editor/script_editor_debugger.cpp +++ b/editor/script_editor_debugger.cpp @@ -123,8 +123,8 @@ protected: if (!prop_values.has(p_name) || String(p_name).begins_with("Constants/")) return false; - emit_signal("value_edited", p_name, p_value); prop_values[p_name] = p_value; + emit_signal("value_edited", p_name, p_value); return true; } @@ -355,7 +355,7 @@ void ScriptEditorDebugger::_video_mem_request() { Size2 ScriptEditorDebugger::get_minimum_size() const { Size2 ms = Control::get_minimum_size(); - ms.y = MAX(ms.y, 250); + ms.y = MAX(ms.y, 250 * EDSCALE); return ms; } void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_data) { @@ -467,7 +467,6 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da String type = p_data[1]; Array properties = p_data[2]; - bool is_new_object = false; if (remote_objects.has(id)) { debugObj = remote_objects[id]; } else { @@ -475,10 +474,14 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da debugObj->remote_object_id = id; debugObj->type_name = type; remote_objects[id] = debugObj; - is_new_object = true; debugObj->connect("value_edited", this, "_scene_tree_property_value_edited"); } + int old_prop_size = debugObj->prop_list.size(); + + debugObj->prop_list.clear(); + int new_props_added = 0; + Set<String> changed; for (int i = 0; i < properties.size(); i++) { Array prop = properties[i]; @@ -493,30 +496,52 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da pinfo.usage = PropertyUsageFlags(int(prop[4])); Variant var = prop[5]; - if (is_new_object) { - //don't update.. it's the same, instead refresh - debugObj->prop_list.push_back(pinfo); + if (pinfo.type == Variant::OBJECT) { + if (var.is_zero()) { + var = RES(); + } else if (var.get_type() == Variant::STRING) { + var = ResourceLoader::load(var); + + if (pinfo.hint_string == "Script") + debugObj->set_script(var); + } else if (var.get_type() == Variant::OBJECT) { + if (((Object *)var)->is_class("EncodedObjectAsID")) { + var = Object::cast_to<EncodedObjectAsID>(var)->get_object_id(); + pinfo.type = var.get_type(); + pinfo.hint = PROPERTY_HINT_OBJECT_ID; + pinfo.hint_string = "Object"; + } + } } - if (var.get_type() == Variant::STRING) { - String str = var; - var = str.substr(4, str.length()); + //always add the property, since props may have been added or removed + debugObj->prop_list.push_back(pinfo); - if (str.begins_with("PATH")) { - if (String(var).empty()) - var = RES(); - else - var = ResourceLoader::load(var); + if (!debugObj->prop_values.has(pinfo.name)) { + new_props_added++; + debugObj->prop_values[pinfo.name] = var; + } else { + + if (bool(Variant::evaluate(Variant::OP_NOT_EQUAL, debugObj->prop_values[pinfo.name], var))) { + debugObj->prop_values[pinfo.name] = var; + changed.insert(pinfo.name); } } - - debugObj->prop_values[pinfo.name] = var; } if (editor->get_editor_history()->get_current() != debugObj->get_instance_id()) { editor->push_item(debugObj, ""); } else { - debugObj->update(); + + if (old_prop_size == debugObj->prop_list.size() && new_props_added == 0) { + //only some may have changed, if so, then update those, if exist + for (Set<String>::Element *E = changed.front(); E; E = E->next()) { + EditorNode::get_singleton()->get_inspector()->update_property(E->get()); + } + } else { + //full update, because props were added or removed + debugObj->update(); + } } } else if (p_msg == "message:video_mem") { @@ -577,6 +602,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da String n = p_data[ofs + i * 2 + 0]; Variant v = p_data[ofs + i * 2 + 1]; + PropertyHint h = PROPERTY_HINT_NONE; String hs = String(); @@ -1016,8 +1042,11 @@ void ScriptEditorDebugger::_notification(int p_what) { if (enable_rl) { inspect_scene_tree->add_constant_override("draw_relationship_lines", 1); inspect_scene_tree->add_color_override("relationship_line_color", rl_color); - } else + inspect_scene_tree->add_constant_override("draw_guides", 0); + } else { inspect_scene_tree->add_constant_override("draw_relationship_lines", 0); + inspect_scene_tree->add_constant_override("draw_guides", 1); + } } break; case NOTIFICATION_PROCESS: { @@ -1266,7 +1295,7 @@ void ScriptEditorDebugger::stop() { breaked = false; server->stop(); - + _clear_remote_objects(); ppeer->set_stream_peer(Ref<StreamPeer>()); if (connection.is_valid()) { @@ -2228,7 +2257,7 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { p_editor->get_undo_redo()->set_method_notify_callback(_method_changeds, this); p_editor->get_undo_redo()->set_property_notify_callback(_property_changeds, this); - live_debug = false; + live_debug = true; last_path_id = false; error_count = 0; warning_count = 0; diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 537c9ac6b8..a4956bee27 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -94,8 +94,9 @@ void EditorSettingsDialog::popup_edit_settings() { set_process_unhandled_input(true); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/editor_settings_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/editor_settings_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "editor_settings", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); @@ -132,7 +133,7 @@ void EditorSettingsDialog::_notification(int p_what) { _update_icons(); } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/editor_settings_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "editor_settings", get_rect()); set_process_unhandled_input(false); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index 96bca86f83..881f20cecb 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -3454,10 +3454,9 @@ void CollisionShapeSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { if (points.size() > 3) { - QuickHull qh; Vector<Vector3> varr = Variant(points); Geometry::MeshData md; - Error err = qh.build(varr, md); + Error err = QuickHull::build(varr, md); if (err == OK) { Vector<Vector3> points; points.resize(md.edges.size() * 2); @@ -4201,21 +4200,16 @@ void JointSpatialGizmoPlugin::CreateGeneric6DOFJointGizmo( float cs = 0.25; for (int ax = 0; ax < 3; ax++) { - /*r_points.push_back(p_offset.translated(Vector3(+cs,0,0)).origin); - r_points.push_back(p_offset.translated(Vector3(-cs,0,0)).origin); - r_points.push_back(p_offset.translated(Vector3(0,+cs,0)).origin); - r_points.push_back(p_offset.translated(Vector3(0,-cs,0)).origin); - r_points.push_back(p_offset.translated(Vector3(0,0,+cs*2)).origin); - r_points.push_back(p_offset.translated(Vector3(0,0,-cs*2)).origin); */ - - float ll; - float ul; - float lll; - float lul; - - int a1, a2, a3; - bool enable_ang; - bool enable_lin; + float ll = 0; + float ul = 0; + float lll = 0; + float lul = 0; + + int a1 = 0; + int a2 = 0; + int a3 = 0; + bool enable_ang = false; + bool enable_lin = false; switch (ax) { case 0: diff --git a/editor/translations/af.po b/editor/translations/af.po index a92264f015..d3647bdb0f 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -2,44 +2,44 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# # Ray West <the.raxar@gmail.com>, 2017. -# +# Julius Stopforth <jjstopforth@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-01 11:44+0000\n" -"Last-Translator: Ray West <the.raxar@gmail.com>\n" +"PO-Revision-Date: 2018-09-14 16:12+0000\n" +"Last-Translator: Julius Stopforth <jjstopforth@gmail.com>\n" "Language-Team: Afrikaans <https://hosted.weblate.org/projects/godot-engine/" "godot/af/>\n" "Language: af\n" "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 2.18-dev\n" +"X-Generator: Weblate 3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" +msgstr "Ongeldige tiepe argument om te omskep(), gebruik TYPE_* konstante" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Nie genoeg bytes om bytes te dekodeer nie, of ongeldige formaat." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ongeldige toevoer %i (nie geslaag nie) in uitdrukking" #: core/math/expression.cpp +#, fuzzy msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self kan nie vertrou word nie omdat die geval nul is (nie geslaag nie)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "" +msgstr "Ongeldige operande vir operateur %s, %s en %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -392,8 +392,7 @@ msgstr "Skaal Seleksie" msgid "Scale From Cursor" msgstr "Skaal van Wyser" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Dupliseer Seleksie" @@ -407,11 +406,13 @@ msgid "Delete Selection" msgstr "Dupliseer Seleksie" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Gaan na Volgende Stap" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Gaan na Vorige Stap" #: editor/animation_track_editor.cpp @@ -514,11 +515,11 @@ msgstr "Geen Pasmaats" msgid "Replaced %d occurrence(s)." msgstr "Het %d verskynsel(s) vervang." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Pas Letterkas" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Hele Woorde" @@ -551,11 +552,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Zoem In" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Reël:" @@ -588,6 +588,7 @@ msgstr "Voeg By" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -669,7 +670,7 @@ msgid "Edit Connection: " msgstr "Wysig Seleksie Kurwe" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -725,17 +726,14 @@ msgstr "Onlangse:" msgid "Search:" msgstr "Soek:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Passendes:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Beskrywing:" @@ -796,9 +794,10 @@ msgid "Search Replacement Resource:" msgstr "Soek Vervanging Hulpbron:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -832,7 +831,8 @@ msgid "Error loading:" msgstr "Fout terwyl laai:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Toneel kon nie laai nie as gevolg van vermiste afhanklikhede:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -891,14 +891,6 @@ msgstr "Verander Woordeboek Waarde" msgid "Thanks from the Godot community!" msgstr "Dankie van die Godot gemeenskap!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Enjin bydraers" @@ -1076,8 +1068,7 @@ msgid "Bus options" msgstr "Bus opsies" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliseer" @@ -1247,8 +1238,9 @@ msgstr "Pad:" msgid "Node Name:" msgstr "Nodus Naam:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Naam" @@ -1319,12 +1311,17 @@ msgid "Template file not found:" msgstr "Sjabloon lêer nie gevind nie:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "Skep Vouer" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Lêer Bestaan reeds. Oorskryf?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "Skep Vouer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1333,13 +1330,14 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Open 'n Lêer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "Open 'n Lêer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1374,7 +1372,8 @@ msgid "Open a File or Directory" msgstr "Open 'n Lêer of Gids" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Stoor" @@ -1432,8 +1431,7 @@ msgstr "Gidse & Lêers:" msgid "Preview:" msgstr "Voorskou:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Lêer:" @@ -1449,24 +1447,11 @@ msgstr "SkandeerBronne" msgid "(Re)Importing Assets" msgstr "(Her)Invoer van Bates" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Deursoek Hulp" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Klas Lys:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Deursoek Klasse" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Bo" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Klas:" @@ -1483,28 +1468,31 @@ msgid "Brief Description:" msgstr "Kort Beskrywing:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Lede" +msgid "Properties" +msgstr "Eienskappe" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Lede:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Openbare Metodes" +msgid "Methods" +msgstr "Metodes" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Openbare Metodes:" +#, fuzzy +msgid "Methods:" +msgstr "Metodes" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI Tema Items" +#, fuzzy +msgid "Theme Properties" +msgstr "Eienskappe" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI Tema Items:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Eienskappe" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1531,10 +1519,16 @@ msgid "Constants:" msgstr "Konstantes:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Beskrywing" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Beskrywing:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "" @@ -1549,11 +1543,13 @@ msgstr "" "[color=$color][url=$url]een by te dra[/url][/color]!" #: editor/editor_help.cpp -msgid "Properties" -msgstr "Eienskappe" +#, fuzzy +msgid "Property Descriptions" +msgstr "Eienskap Beskrywing:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Eienskap Beskrywing:" #: editor/editor_help.cpp @@ -1565,11 +1561,13 @@ msgstr "" "deur [color=$color][url=$url]een by te dra[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metodes" +#, fuzzy +msgid "Method Descriptions" +msgstr "Metode Beskrywing:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Metode Beskrywing:" #: editor/editor_help.cpp @@ -1580,12 +1578,60 @@ msgstr "" "Daar is tans geen beskrywing vir hierdie metode nie. Help ons asseblief deur " "[color=$color][url=$url]een by te dra[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Deursoek Hulp" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Vervang Alles" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Methods Only" +msgstr "Metodes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Seine" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstantes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" msgstr "Eienskappe" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Eienskappe" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Lede" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Klas:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1620,6 +1666,11 @@ msgstr "" msgid "Error saving resource!" msgstr "Fout tydens storing van hulpbron!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Stoor Hulpbron As..." @@ -1674,10 +1725,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1905,6 +1966,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1945,6 +2012,12 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Deursoek Klasse" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -2027,8 +2100,9 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" -msgstr "" +#, fuzzy +msgid "Save All Scenes" +msgstr "Stoor As" #: editor/editor_node.cpp msgid "Close Scene" @@ -2056,7 +2130,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2094,6 +2168,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2201,10 +2276,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2298,21 +2369,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2449,7 +2520,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2473,7 +2544,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2485,7 +2556,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2493,6 +2564,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2510,10 +2595,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2522,7 +2603,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2805,6 +2887,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Gunstelinge:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2843,7 +2930,7 @@ msgstr "Fout terwyl laai:" msgid "Unable to update dependencies:" msgstr "Toneel kon nie laai nie as gevolg van vermiste afhanklikhede:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2882,28 +2969,21 @@ msgid "Duplicating folder:" msgstr "Dupliseer" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" +#, fuzzy +msgid "Open Scene(s)" +msgstr "Open Lêer(s)" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "Open Lêer(s)" +msgid "Add to favorites" +msgstr "Gunstelinge:" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp @@ -2914,12 +2994,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Dupliseer" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp msgid "New Script..." msgstr "" @@ -2928,6 +3016,15 @@ msgstr "" msgid "New Resource..." msgstr "Stoor Hulpbron As..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Vervang Alles" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2949,34 +3046,25 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Wissel Gunsteling" +msgid "Toggle split mode" +msgstr "Wissel Modus" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Skep Vouer" +msgid "Search files" +msgstr "Deursoek Klasse" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Deursoek Klasse" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2993,30 +3081,22 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find in Files" msgstr "Vind" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Hele Woorde" +msgid "Find:" +msgstr "Vind" #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Pas Letterkas" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Skep Vouer" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3034,6 +3114,11 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Vind" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Vervang" @@ -3195,18 +3280,15 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" -msgstr "" +#, fuzzy +msgid "Expand All Properties" +msgstr "Eienskappe" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "Eienskappe" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3448,6 +3530,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3827,10 +3914,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4154,6 +4237,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4217,6 +4304,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Wissel Modus" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4311,6 +4403,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "EnkelHouer" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4361,6 +4458,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4796,8 +4897,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4826,6 +4926,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4895,11 +5000,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5231,22 +5336,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5279,6 +5384,11 @@ msgstr "Leêr word gebêre:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Kon nie vouer skep nie." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Kon nie vouer skep nie." @@ -5378,12 +5488,9 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "Voorskou:" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5453,7 +5560,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5461,10 +5568,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5500,19 +5603,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Deursoek Hulp" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Deursoek Klasse" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5523,6 +5616,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Maak Funksie" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5609,11 +5707,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5630,36 +5728,33 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Gaan na Volgende Stap" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Gaan na Vorige Stap" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." -msgstr "" +#, fuzzy +msgid "Find in Files..." +msgstr "Vind" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Maak Funksie" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "Gaan na Reël" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5753,6 +5848,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5917,6 +6020,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6016,10 +6123,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6420,6 +6523,11 @@ msgid "Fix Invalid Tiles" msgstr "Ongeldige naam." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Dupliseer Seleksie" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6466,25 +6574,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Verwyder Seleksie" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Anim Verander Transform" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6513,7 +6626,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6529,7 +6642,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6606,6 +6719,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6614,6 +6735,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6672,6 +6797,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7125,10 +7258,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7262,10 +7391,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7353,7 +7478,7 @@ msgid "Step" msgstr "Tree (s):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7362,7 +7487,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7403,7 +7528,7 @@ msgstr "" msgid "Reset" msgstr "Herset Zoem" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7462,6 +7587,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7498,6 +7627,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7570,6 +7705,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Opnoemings" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7578,11 +7718,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7733,6 +7873,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7821,19 +7965,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7865,18 +7997,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8298,11 +8418,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8574,6 +8690,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Lede:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8674,11 +8794,11 @@ msgid "Search VisualScript" msgstr "Deursoek Hulp" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8759,6 +8879,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8797,6 +8923,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8914,6 +9046,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8933,6 +9075,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8965,7 +9125,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9038,10 +9198,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9049,6 +9205,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9114,6 +9274,48 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoem In" + +#~ msgid "Class List:" +#~ msgstr "Klas Lys:" + +#~ msgid "Search Classes" +#~ msgstr "Deursoek Klasse" + +#~ msgid "Public Methods" +#~ msgstr "Openbare Metodes" + +#~ msgid "Public Methods:" +#~ msgstr "Openbare Metodes:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI Tema Items" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI Tema Items:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Eienskappe" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Wissel Gunsteling" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Skep Vouer" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Hele Woorde" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Pas Letterkas" + #~ msgid "Disabled" #~ msgstr "Afgeskaskel" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 5631c1884d..a93f3ebed9 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -18,11 +18,14 @@ # Wajdi Feki <wajdi.feki@gmail.com>, 2017. # Omar Aglan <omar.aglan91@yahoo.com>, 2018. # Codes Otaku <ilyas.gamerz@gmail.com>, 2018. +# Takai Eddine Kennouche <takai.kenn@gmail.com>, 2018. +# Mohamed El-Baz <albaz2000eg@gmail.com>, 2018. +# عاصم شكر - Aasem shokr <aasemshokr@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-13 14:34+0000\n" -"Last-Translator: Codes Otaku <ilyas.gamerz@gmail.com>\n" +"PO-Revision-Date: 2018-11-18 22:43+0000\n" +"Last-Translator: عاصم شكر - Aasem shokr <aasemshokr@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -30,7 +33,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -38,7 +41,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "نوع برهان خاطئ للتØÙˆÙŠÙ„()ØŒ إستخدم ثابت TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "لا يوجد ما يكÙÙŠ من البايتات من أجل ÙÙƒ البايتات، أو صيغة غير صØÙŠØØ©." @@ -79,35 +82,31 @@ msgstr "مجاني/ÙØ§Ø±Øº" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "معزز" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "خطأ!" +msgstr "عكس" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "أدخل Ù…ÙØªØ§Ø" +msgstr "أدخل Ù…ÙØªØ§ØØ§Ù‹ هنا" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "تكرير Ø§Ù„Ù…ØØ¯Ø¯" +msgstr "تكرار Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„Ù…ØØ¯Ø¯(Ø©)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ØØ¯Ø¯Ø©ØŸ" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„Ù…ØØ¯Ø¯(Ø©)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Ù…ÙØ§ØªÙŠØ نسخ Ø§Ù„ØªØØ±ÙŠÙƒ" +msgstr "تكرار Ù…ÙØ§ØªÙŠØ Ø§Ù„ØªØØ±ÙŠÙƒ" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Ù…ÙØ§ØªÙŠØ ØØ°Ù Ø§Ù„ØªØØ±ÙŠÙƒ" +msgstr "أزل Ù…ÙØ§ØªÙŠØ Ø§Ù„ØªØØ±ÙŠÙƒ" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" @@ -131,11 +130,11 @@ msgstr "نداء تغيير Ø§Ù„ØªØØ±ÙŠÙƒ" #: editor/animation_track_editor.cpp msgid "Property Track" -msgstr "" +msgstr "خط الخاصية" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "" +msgstr "خط Ø§Ù„ØªØØ±ÙŠÙƒ ثلاثي الأبعاد" #: editor/animation_track_editor.cpp msgid "Call Method Track" @@ -147,45 +146,40 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "شريط صبط الصوت" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "إيقا٠تشغيل Ø§Ù„ØØ±ÙƒØ©. (س)" +msgstr "شريط ضبط Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "مسار Ø¥Ø¶Ø§ÙØ© Ø§Ù„ØªØØ±ÙŠÙƒ" +msgstr "Ø¥Ø¶Ø§ÙØ© مسار" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "طول Ø§Ù„ØØ±ÙƒØ© (بالثواني)." +msgstr "مدة Ø§Ù„ØØ±ÙƒØ© (بالثواني)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "تكبير Ø§Ù„ØØ±ÙƒØ©." +msgstr "تكرار Ø§Ù„ØØ±ÙƒØ©" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" -msgstr "" +msgstr "دوال:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "" +msgstr "مقاطع الصوت:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "مقاطع Ø§Ù„ØØ±ÙƒØ©:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "تمكين/إيقا٠الوضع الخالي من الإلهاء." +msgstr "تمكين/إيقا٠هذا المسار." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" @@ -412,8 +406,7 @@ msgstr "تكبير Ø§Ù„Ù…ØØ¯Ø¯" msgid "Scale From Cursor" msgstr "تكبير من المؤشر" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "تكرير Ø§Ù„Ù…ØØ¯Ø¯" @@ -427,11 +420,13 @@ msgid "Delete Selection" msgstr "Ù†ØµÙ Ø§Ù„Ù…ÙØØ¯Ø¯" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "إذهب إلي الخطوة التالية" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "إذهب إلي الخطوة السابقة" #: editor/animation_track_editor.cpp @@ -534,11 +529,11 @@ msgstr "لا مطابقة" msgid "Replaced %d occurrence(s)." msgstr "Ø¥Ø³ØªØ¨ÙØ¯Ù„ %d ØØ§Ø¯Ø«Ø©(ØÙˆØ§Ø¯Ø«)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "قضية تشابه" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "كل الكلمات" @@ -572,10 +567,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "تقريب" +msgid "Font Size:" +msgstr "ØØ¬Ù… الخطوط:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "الخط:" @@ -608,6 +603,7 @@ msgstr "أضÙ" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -688,7 +684,7 @@ msgid "Edit Connection: " msgstr "خطأ ÙÙŠ الإتصال" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -743,17 +739,14 @@ msgstr "Ø§Ù„ØØ§Ù„ÙŠ:" msgid "Search:" msgstr "Ø¨ØØ«:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "يطابق:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "الوصÙ:" @@ -814,9 +807,10 @@ msgid "Search Replacement Resource:" msgstr "Ø§Ù„Ø¨ØØ« عن مورد بديل:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -848,7 +842,8 @@ msgid "Error loading:" msgstr "خطآ ÙÙŠ التØÙ…يل:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "ÙØ´Ù„ ÙÙŠ تØÙ…يل المشهد بسبب وجود تبعيات Ù…Ùقودة يعتمد المشهد عليها:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -907,14 +902,6 @@ msgstr "تغيير قيمة ÙÙŠ القاموس" msgid "Thanks from the Godot community!" msgstr "شكراً من مجتمع Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "المسهامين ÙÙŠ Ù…ØØ±Ùƒ Godot" @@ -1090,8 +1077,7 @@ msgid "Bus options" msgstr "إعدادات البيوس" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "تكرير" @@ -1258,8 +1244,9 @@ msgstr "المسار:" msgid "Node Name:" msgstr "إسم العقدة:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "الأسم" @@ -1329,12 +1316,17 @@ msgid "Template file not found:" msgstr "مل٠النموذج غير موجود:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "ØªØØ¯ÙŠØ¯ المجلد Ø§Ù„ØØ§Ù„ÙŠ" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "المل٠موجود، إستبدال؟" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "ØªØØ¯ÙŠØ¯ المجلد Ø§Ù„ØØ§Ù„ÙŠ" +#, fuzzy +msgid "Select This Folder" +msgstr "ØØ¯Ø¯ هذا المجلد" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1342,12 +1334,13 @@ msgstr "نسخ المسار" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "أظهر ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "أظهر ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1383,7 +1376,8 @@ msgid "Open a File or Directory" msgstr "Ø¥ÙØªØ مل٠أو وجهة" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "ØÙظ" @@ -1441,8 +1435,7 @@ msgstr "الوجهات ÙˆØ§Ù„Ù…Ù„ÙØ§Øª:" msgid "Preview:" msgstr "إستعراض:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "الملÙ:" @@ -1458,24 +1451,11 @@ msgstr "ÙØØµ المصادر" msgid "(Re)Importing Assets" msgstr "إعادة إستيراد الأصول" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Ø¥Ø¨ØØ« ÙÙŠ المساعدة" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "قائمة الأصناÙ:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Ø¥Ø¨ØØ« ÙÙŠ الأصناÙ" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Ùوق" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "صنÙ:" @@ -1492,28 +1472,31 @@ msgid "Brief Description:" msgstr "وص٠مختصر:" #: editor/editor_help.cpp -msgid "Members" -msgstr "الأعضاء" +msgid "Properties" +msgstr "خصائص" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "الأعضاء:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "الطرق العامة" +msgid "Methods" +msgstr "قائمة الطرق" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "الطرق العامة:" +#, fuzzy +msgid "Methods:" +msgstr "قائمة الطرق" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "عناصر ثيم واجهة المستخدم" +#, fuzzy +msgid "Theme Properties" +msgstr "خصائص" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "عناصر ثيم واجهة المستخدم:" +#, fuzzy +msgid "Theme Properties:" +msgstr "خصائص" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1540,10 +1523,16 @@ msgid "Constants:" msgstr "الثوابت:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "الوصÙ" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "الوصÙ:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "الدورس علي الإنترنت:" @@ -1558,11 +1547,13 @@ msgstr "" "color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "خصائص" +#, fuzzy +msgid "Property Descriptions" +msgstr "وص٠الملكية:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "وص٠الملكية:" #: editor/editor_help.cpp @@ -1574,11 +1565,13 @@ msgstr "" "المساهمة ÙˆØ§ØØ¯ [color=$color][url=$url]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "قائمة الطرق" +#, fuzzy +msgid "Method Descriptions" +msgstr "وص٠الطريقة:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "وص٠الطريقة:" #: editor/editor_help.cpp @@ -1589,12 +1582,61 @@ msgstr "" "لا يوجد ØØ§Ù„يا وص٠لهذه الطريقة. الرجاء المساعدة من خلال [color=$color][url=" "$url]المساهمة ÙˆØ§ØØ¯[/url][/color] !" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Ø¥Ø¨ØØ« ÙÙŠ المساعدة" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Display All" +msgstr "إستبدال الكل" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Ø§Ù„ÙØ¦Ø§Øª" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "قائمة الطرق" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "إشارات" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "الثوابت" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "خصائص" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "خصائص" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "الأعضاء" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "صنÙ:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1628,6 +1670,11 @@ msgstr "تصدير المشروع ÙØ´Ù„, رمز الخطأ % d." msgid "Error saving resource!" msgstr "خطأ ÙÙŠ ØÙظ المورد!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "ØÙظ المورد باسم..." @@ -1682,10 +1729,20 @@ msgstr "هذه العملية لا يمكنها الإكتمال من غير Ø¬Ø #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "لا يمكن ØÙظ المشهد. على Ø§Ù„Ø£Ø±Ø¬Ø Ù„Ø§ يمكن Ø¥Ø³ØªÙŠÙØ§Ø¡ التبعيات (مجسّدات)." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "لا يمكن تØÙ…يل مكتبة الميش من أجل الدمج!" @@ -1937,6 +1994,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "غير قادر علي تØÙ…يل كود Ø§Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"غير قادر علي تØÙ…يل كود Ø§Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s' الكود ليس ÙÙŠ وضع الأداة." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1985,6 +2050,12 @@ msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ø®Ø·Ø·" msgid "Default" msgstr "Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "أظهر ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2068,7 +2139,8 @@ msgid "Save Scene" msgstr "ØÙظ المشهد" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "ØÙظ جميع المشاهد" #: editor/editor_node.cpp @@ -2097,7 +2169,7 @@ msgid "Undo" msgstr "تراجع" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "إعادة" @@ -2135,6 +2207,7 @@ msgid "Quit to Project List" msgstr "غادر الي قائمه المشاريع" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "تصØÙŠØ الأخطاء" @@ -2261,10 +2334,6 @@ msgstr "إدارة قوالب التصدير" msgid "Help" msgstr "مساعدة" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Ø§Ù„ÙØ¦Ø§Øª" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2359,24 +2428,24 @@ msgstr "ØªØØ¯ÙŠØ« التغييرات" msgid "Disable Update Spinner" msgstr "تعطيل دوار Ø§Ù„ØªØØ¯ÙŠØ«" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Ù…ÙØ±Ø§Ù‚ب" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "إستيراد" #: editor/editor_node.cpp -msgid "Node" -msgstr "عقدة" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "نظام Ø§Ù„Ù…Ù„ÙØ§Øª" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Ù…ÙØ±Ø§Ù‚ب" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "عقدة" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "توسيع الكل" @@ -2514,7 +2583,7 @@ msgstr "نسبة الإطار %" msgid "Physics Frame %" msgstr "نسبة الإطار الÙيزيائي %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "الوقت:" @@ -2538,7 +2607,7 @@ msgstr "الوقت" msgid "Calls" msgstr "ندائات" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2550,7 +2619,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2558,6 +2627,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2575,10 +2658,6 @@ msgstr "" msgid "Make Unique" msgstr "إجعلة مميزاً" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2587,7 +2666,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2878,6 +2958,11 @@ msgstr "" "لا يمكن ÙØªØ file_type_cache.cch من إجل الكتابة، لا يمكن ØÙظ خبأ أنواع الملÙ!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "لا يمكن التنقل إلي '%s' ØÙŠØ« لم يتم العثور عليها ÙÙŠ نظام Ø§Ù„Ù…Ù„ÙØ§Øª!" @@ -2915,7 +3000,7 @@ msgstr "خطآ ÙÙŠ التكرار:" msgid "Unable to update dependencies:" msgstr "غير قادر علي ØªØØ¯ÙŠØ« التبعيات:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "لا أسم Ù…Ùقدم" @@ -2952,22 +3037,6 @@ msgid "Duplicating folder:" msgstr "تكرار مجلد:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "توسيع الكل" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "طوي الكل" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "إعادة تسمية..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "ØªØØ±ÙŠÙƒ إلي..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "ÙØªØ مشهد (مشاهد)" @@ -2976,6 +3045,16 @@ msgid "Instance" msgstr "نموذج" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "ØØ°Ù من المجموعة" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "تعديل التبعيات..." @@ -2983,11 +3062,19 @@ msgstr "تعديل التبعيات..." msgid "View Owners..." msgstr "أظهر المÙلاك..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "إعادة تسمية..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "تكرير..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "ØªØØ±ÙŠÙƒ إلي..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "ÙØªØ سريع للكود..." @@ -2997,6 +3084,16 @@ msgstr "ÙØªØ سريع للكود..." msgid "New Resource..." msgstr "ØÙظ المورد باسم..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "توسيع الكل" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "طوي الكل" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3018,28 +3115,19 @@ msgstr "إعادة ÙØØµ نظام Ø§Ù„Ù…Ù„ÙØ§Øª" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "تبديل ØØ§Ù„Ø© المجلد كما Ø§Ù„Ù…ÙØ¶Ù„Ø©" +msgid "Toggle split mode" +msgstr "أظهر المود" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "ØÙظ العنوان Ø§Ù„ÙØ±Ø¹ÙŠ Ø§Ù„Ø°ÙŠ يتم تعديله ØØ§Ù„يا." +msgid "Search files" +msgstr "Ø¥Ø¨ØØ« ÙÙŠ الأصناÙ" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "نمذج المشهد(المشاهد) Ø§Ù„Ù…ØØ¯Ø¯Ø© كطÙÙ„ للعقدة Ø§Ù„Ù…ØØ¯Ø¯Ø©." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Ø¥Ø¨ØØ« ÙÙŠ الأصناÙ" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3047,7 +3135,7 @@ msgstr "" "ÙŠÙØØµ Ø§Ù„Ù…Ù„ÙØ§ØªØŒ\n" "من ÙØ¶Ù„Ùƒ إنتظر..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "ØªØØ±ÙŠÙƒ" @@ -3066,31 +3154,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d مزيد من Ø§Ù„Ù…Ù„ÙØ§Øª" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "جد" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "كل الكلمات" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "قضية تشابه" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "أنشئ مجلد" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "وضع Ø§Ù„Ù…ÙØµÙÙŠ:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3108,6 +3187,11 @@ msgstr "إلغاء" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "جد" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "إستبدال" @@ -3272,17 +3356,14 @@ msgstr "إعادة إستيراد" msgid "Failed to load resource." msgstr "ÙØ´Ù„ تØÙ…يل المورد." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "ØØ³Ù†Ø§" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "توسيع كل Ø§Ù„ØªÙØ§ØµÙŠÙ„" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "طي كل Ø§Ù„ØªÙØ§ØµÙŠÙ„" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3532,6 +3613,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "الدمج:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3690,7 +3776,7 @@ msgstr "أدوات Ø§Ù„ØØ±ÙƒØ©" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "ØØ±ÙƒØ©" +msgstr "صورة Ù…ØªØØ±ÙƒØ©" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New" @@ -3911,10 +3997,6 @@ msgid "Amount:" msgstr "الكمية:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "الدمج:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "الدمج 0:" @@ -4251,6 +4333,11 @@ msgstr "تعديل العنصر القماشي" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "تعديل العنصر القماشي" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "تعديل العنصر القماشي" @@ -4314,6 +4401,11 @@ msgid "Rotate Mode" msgstr "وضع التدوير" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "ØªØØ¯ÙŠØ¯ الوضع" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4413,6 +4505,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "إرجاع مقدرة ØªØØ¯ÙŠØ¯ الطÙÙ„ للعنصر." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Ø§Ù„ÙØ±Ø¯ÙŠØ©" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "إظهار العظام" @@ -4464,6 +4561,10 @@ msgid "Show Viewport" msgstr "أظهر الشاشة" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Ù†ØµÙ Ø§Ù„Ù…ÙØØ¯Ø¯" @@ -4905,9 +5006,9 @@ msgid "Create Navigation Polygon" msgstr "إنشاء Ù…ÙØ¶Ù„ع التنقل" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "توليد AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "توليد Rect الرؤية" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4935,6 +5036,12 @@ msgstr "Ø¥Ù…Ø³Ø Ù‚Ù†Ø§Ø¹ الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "تØÙˆÙŠÙ„ إلي %s" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "جسيمات" @@ -5004,13 +5111,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "معالج المواد من نوع 'ParticlesMaterial' مطلوب." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "ولد AABB" +msgid "Generating AABB" +msgstr "توليد AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "تØÙˆÙŠÙ„ إلي %s" +msgid "Generate AABB" +msgstr "ولد AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5353,22 +5459,22 @@ msgid "Paste Resource" msgstr "لصق الموارد" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5401,6 +5507,11 @@ msgstr "خطأ ÙÙŠ ØÙظ مجموعة البلاط!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "لا يمكن إنشاء المجلد." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "لا يمكن إنشاء المجلد." @@ -5502,12 +5613,9 @@ msgid "Copy Script Path" msgstr "نسخ مسار الكود" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "أظهر ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "التبويب السابق" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5577,18 +5685,15 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "" +#, fuzzy +msgid "Debug with External Editor" +msgstr "ÙØªØ ÙÙŠ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ التالي" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Ø¥Ø¨ØØ« ÙÙŠ هرمية الأصناÙ." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5624,19 +5729,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Ø¥Ø¨ØØ« ÙÙŠ المساعدة" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Ø¥Ø¨ØØ« ÙÙŠ الأصناÙ" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5647,6 +5742,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ù‡Ù…Ø©" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5733,12 +5833,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "تØÙˆÙŠÙ„ إلي %s" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "تØÙˆÙŠÙ„ إلي %s" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5754,20 +5856,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "إذهب إلي الخطوة التالية" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "إذهب إلي الخطوة السابقة" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5775,16 +5871,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Ùلتر Ø§Ù„Ù…Ù„ÙØ§Øª..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ù‡Ù…Ø©" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "إذهب إلي الخط" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5880,6 +5978,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6045,6 +6151,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6144,11 +6254,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "الكبس إلي الشبكة" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ وضع النظرة Ø§Ù„ØØ±Ø©" @@ -6560,6 +6665,11 @@ msgid "Fix Invalid Tiles" msgstr "اسم غير صالØ." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Ù†ØµÙ Ø§Ù„Ù…ÙØØ¯Ø¯" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6606,25 +6716,32 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "ØØ°Ù Ø§Ù„Ù…ÙØØ¯Ø¯" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "وضع التدوير" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "" +#, fuzzy +msgid "Rotate right" +msgstr "وضع التدوير" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "تØÙˆÙŠÙ„ تغيير Ø§Ù„ØªØØ±ÙŠÙƒ" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6653,7 +6770,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6669,7 +6786,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6748,6 +6865,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "التصدير كـ %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6756,6 +6882,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "تصدير المشروع" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6814,6 +6945,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "تصدير المشروع" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "تصدير" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7262,11 +7403,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" - -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" +msgstr "عام" #: editor/project_settings_editor.cpp msgid "Override For..." @@ -7401,10 +7538,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7495,7 +7628,7 @@ msgid "Step" msgstr "خطوة (ثانية):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7504,7 +7637,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7545,7 +7678,7 @@ msgstr "" msgid "Reset" msgstr "إرجاع التكبير" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7604,6 +7737,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "إخلاء الكود" @@ -7640,6 +7777,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7715,6 +7858,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "ÙÙØªØ مؤخراً" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7723,12 +7871,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "ÙØªØ الكود" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7881,6 +8030,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "الميش ÙØ§Ø±Øº!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7969,19 +8123,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8013,18 +8155,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8454,12 +8584,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "طبخ!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "طبخ ميش Ø§Ù„Ù…ØØ§ÙˆØ±." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8730,6 +8856,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "الأعضاء:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8830,11 +8960,11 @@ msgid "Search VisualScript" msgstr "إخلاء الكود" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8916,6 +9046,12 @@ msgstr "" "يجب تزويد ال CollisionShape2D Ø¨Ø¥ØØ¯Ù‰ الأشكال (من نوع Shape2D) لتعمل بالشكل " "المطلوب. الرجاء تكوين Ùˆ ضبط الشكل لها اولا!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8954,6 +9090,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9071,6 +9213,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9090,6 +9242,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9122,7 +9292,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9196,10 +9366,6 @@ msgstr "تنبيه!" msgid "Please Confirm..." msgstr "يرجى التاكيد..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "ØØ¯Ø¯ هذا المجلد" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9207,6 +9373,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9274,6 +9444,68 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "تقريب" + +#~ msgid "Class List:" +#~ msgstr "قائمة الأصناÙ:" + +#~ msgid "Search Classes" +#~ msgstr "Ø¥Ø¨ØØ« ÙÙŠ الأصناÙ" + +#~ msgid "Public Methods" +#~ msgstr "الطرق العامة" + +#~ msgid "Public Methods:" +#~ msgstr "الطرق العامة:" + +#~ msgid "GUI Theme Items" +#~ msgstr "عناصر ثيم واجهة المستخدم" + +#~ msgid "GUI Theme Items:" +#~ msgstr "عناصر ثيم واجهة المستخدم:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "خصائص" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "تبديل ØØ§Ù„Ø© المجلد كما Ø§Ù„Ù…ÙØ¶Ù„Ø©" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "ØÙظ العنوان Ø§Ù„ÙØ±Ø¹ÙŠ Ø§Ù„Ø°ÙŠ يتم تعديله ØØ§Ù„يا." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "كل الكلمات" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "قضية تشابه" + +#~ msgid "Ok" +#~ msgstr "ØØ³Ù†Ø§" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Ø¥Ø¨ØØ« ÙÙŠ هرمية الأصناÙ." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Ø¥Ø¨ØØ« ÙÙŠ الأصناÙ" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "الكبس إلي الشبكة" + +#~ msgid "Bake!" +#~ msgstr "طبخ!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "طبخ ميش Ø§Ù„Ù…ØØ§ÙˆØ±." + #~ msgid "Modify Color Ramp" #~ msgstr "تعديل Ù…Ù†ØØ¯Ø± اللون" @@ -9493,9 +9725,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "لا يمكن ØÙظ النسيج Ø§Ù„ÙØ±Ø¹ÙŠ Ù„Ù„Ø£Ø·Ù„Ø³:" -#~ msgid "Exporting for %s" -#~ msgstr "التصدير كـ %s" - #~ msgid "Setting Up..." #~ msgstr "جاري الإعداد..." diff --git a/editor/translations/bg.po b/editor/translations/bg.po index beeb2be3c6..f75e29e11a 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -2,24 +2,23 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# # Bojidar Marinov <bojidar.marinov.bg@gmail.com>, 2016. # Иван Пенев (Ðдмирал ÐнимЕ) <aeternus.arcis@gmail.com>, 2016-2017. # Любомир ВаÑилев <lyubomirv@abv.bg>, 2018. # MaresPW <marespw206@gmail.com>, 2018. -# +# PakoSt <kokotekilata@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 18:44+0000\n" -"Last-Translator: MaresPW <marespw206@gmail.com>\n" +"PO-Revision-Date: 2018-10-20 11:23+0000\n" +"Last-Translator: PakoSt <kokotekilata@gmail.com>\n" "Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/" "godot/bg/>\n" "Language: bg\n" "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 2.19-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -29,7 +28,7 @@ msgstr "" "TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ÐедоÑтатъчно байтове за разкодиране или недейÑтвителен формат." @@ -55,11 +54,8 @@ msgid "Invalid named index '%s' for base type %s" msgstr "" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr "" -"Ðевалиден агрумент тип на convert(), използвайте конÑтантите започващи Ñ " -"TYPE_*." +msgstr "Ðевалидени агрументи за конÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ '%s'" #: core/math/expression.cpp msgid "On call to '%s':" @@ -67,8 +63,9 @@ msgstr "" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Free" -msgstr "" +msgstr "Свободен" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -77,7 +74,7 @@ msgstr "" #: editor/animation_bezier_editor.cpp #, fuzzy msgid "Mirror" -msgstr "Грешки" +msgstr "Отрази (огледално)" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -241,12 +238,12 @@ msgstr "" #: editor/animation_track_editor.cpp #, fuzzy msgid "Duplicate Key(s)" -msgstr "Имаше грешка при внаÑÑнето:" +msgstr "Ðаправи дупликат на Key(s)" #: editor/animation_track_editor.cpp #, fuzzy msgid "Delete Key(s)" -msgstr "Изтриване на анимациÑта?" +msgstr "Изтрий Key(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -375,9 +372,8 @@ msgid "Edit" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Изтриване на анимациÑта?" +msgstr "ХарактериÑтики на анимациÑта." #: editor/animation_track_editor.cpp msgid "Copy Tracks" @@ -396,8 +392,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -406,17 +401,18 @@ msgid "Duplicate Transposed" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Ðова Ñцена" +msgstr "Изтрий СелекциÑта" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" -msgstr "" +#, fuzzy +msgid "Go to Next Step" +msgstr "Отиди на Следваща Стъпка" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" -msgstr "" +#, fuzzy +msgid "Go to Previous Step" +msgstr "Отиди на Предишна Стъпка" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -428,7 +424,7 @@ msgstr "ПочиÑтване на анимациÑта" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Избери възелa, който да бъде анимиран:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" @@ -452,7 +448,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Оптимизирай" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" @@ -504,47 +500,48 @@ msgstr "" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Отиди на Ред" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "Ðомер на Реда:" #: editor/code_editor.cpp editor/editor_help.cpp msgid "No Matches" -msgstr "" +msgstr "ÐÑма СъвпадениÑ" #: editor/code_editor.cpp +#, fuzzy msgid "Replaced %d occurrence(s)." -msgstr "" +msgstr "Готово - %d замеÑтване(ниÑ)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" -msgstr "" +msgstr "Цели Думи" #: editor/code_editor.cpp editor/rename_dialog.cpp msgid "Replace" -msgstr "" +msgstr "Преименувай" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Преименувай Ð’Ñички" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Само СелекциÑта" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Zoom In" -msgstr "" +msgstr "Приближи" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Zoom Out" -msgstr "" +msgstr "Отдалечи" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Reset Zoom" @@ -552,19 +549,20 @@ msgstr "" #: editor/code_editor.cpp msgid "Warnings:" -msgstr "" +msgstr "ПредупреждениÑ:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "" +#, fuzzy +msgid "Font Size:" +msgstr "Изглед Отпред." -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" -msgstr "" +msgstr "Ред:" #: editor/code_editor.cpp msgid "Col:" -msgstr "" +msgstr "Колона:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" @@ -584,15 +582,16 @@ msgstr "" #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "" +msgstr "Добави" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "" +msgstr "Премахни" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" @@ -634,41 +633,39 @@ msgstr "ЗатварÑне" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Свържи" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Свържи '%s' Ñ '%s'" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "Разкачи '%s' от '%s'" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "" +msgstr "Разкачи вÑички Ñигнали: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "" +msgstr "Свържи..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Разкачи" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Свързване..." +msgstr "Свържи Сигнала: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Свързване..." +msgstr "Промени Връзката: " #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -681,7 +678,7 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Disconnect All" -msgstr "" +msgstr "Разкачи Ð’Ñички" #: editor/connections_dialog.cpp #, fuzzy @@ -713,7 +710,7 @@ msgstr "Любими:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Скорошни:" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp @@ -722,17 +719,14 @@ msgstr "" msgid "Search:" msgstr "ТърÑене:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" -msgstr "" +msgstr "Съвпадащи:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "ОпиÑание:" @@ -760,7 +754,7 @@ msgstr "" #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dependencies" -msgstr "" +msgstr "ЗавиÑимоÑти" #: editor/dependency_editor.cpp msgid "Resource" @@ -774,7 +768,7 @@ msgstr "" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "ЗавиÑимоÑти:" #: editor/dependency_editor.cpp msgid "Fix Broken" @@ -789,13 +783,14 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" -msgstr "" +msgstr "Отвори" #: editor/dependency_editor.cpp msgid "Owners Of:" @@ -803,7 +798,7 @@ msgstr "" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "" +msgstr "Премахни Ñелектираните файлове от проекта? (необратимо)" #: editor/dependency_editor.cpp msgid "" @@ -814,31 +809,32 @@ msgstr "" #: editor/dependency_editor.cpp editor/export_template_manager.cpp msgid "Cannot remove:" -msgstr "" +msgstr "Ðе може да Ñе премахне:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "Грешка при зареждане:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Сцената не уÑÐ¿Ñ Ð´Ð° Ñе зареди заради липÑващи завиÑимоÑти:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "" +msgstr "Отвори Въпреки това" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "Кое дейÑтвие да Ñе изпълни?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Поправи ЗавиÑимоÑтите" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "Грешки при зареждането!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" @@ -858,7 +854,7 @@ msgstr "" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "" +msgstr "Изтрий избраните файлове?" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -866,7 +862,7 @@ msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp #: editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "Изтрий" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" @@ -878,15 +874,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "" - -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Добре" +msgstr "БлагодарÑ! От общноÑтта на Godot!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -897,8 +885,9 @@ msgid "Project Founders" msgstr "ОÑнователи на проекта" #: editor/editor_about.cpp +#, fuzzy msgid "Lead Developer" -msgstr "" +msgstr "Главен Разработчик" #: editor/editor_about.cpp msgid "Project Manager " @@ -910,7 +899,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "Ðвтори" #: editor/editor_about.cpp msgid "Platinum Sponsors" @@ -942,7 +931,7 @@ msgstr "" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "Лиценз" #: editor/editor_about.cpp msgid "Thirdparty License" @@ -1059,8 +1048,7 @@ msgid "Bus options" msgstr "ÐаÑтройки на шината" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1228,8 +1216,9 @@ msgstr "Път:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1243,7 +1232,7 @@ msgstr "ОбновÑване на Ñцената" #: editor/editor_data.cpp msgid "Storing local changes..." -msgstr "" +msgstr "Запазване на локалните промени..." #: editor/editor_data.cpp msgid "Updating scene..." @@ -1263,7 +1252,7 @@ msgstr "МолÑ, първо изберете оÑновна папка" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "" +msgstr "Избери ДиректориÑ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp @@ -1284,7 +1273,7 @@ msgstr "ÐеуÑпешно Ñъздаване на папка." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "Избери" #: editor/editor_export.cpp msgid "Storing File:" @@ -1299,12 +1288,17 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Избиране на текущата папка" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Файлът ÑъщеÑтвува. ИÑкате ли да го презапишете?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Избиране на текущата папка" +#, fuzzy +msgid "Select This Folder" +msgstr "Изберете метод" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1312,13 +1306,14 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "ДиÑпечер на проектите" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "Покажи във Файлов Мениджър" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1330,30 +1325,31 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Ð’Ñички Разпознати" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Ð’Ñички Файлове (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Отвори Файл" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Отвори Файл(ове)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Отвори ДиректориÑ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Отвори Файл или ДиректориÑ" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Запазване" @@ -1376,11 +1372,11 @@ msgstr "" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Покажи Скрити Файлове" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "Покажи Любими" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" @@ -1411,8 +1407,7 @@ msgstr "Папки и файлове:" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Файл:" @@ -1428,30 +1423,17 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Извършва Ñе повторно внаÑÑне" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" -msgstr "" +msgstr "КлаÑ:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "ÐаÑледÑва:" #: editor/editor_help.cpp msgid "Inherited by:" @@ -1459,31 +1441,34 @@ msgstr "" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "Кратко ОпиÑание:" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Публични методи" +msgid "Methods" +msgstr "Методи" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "" +#, fuzzy +msgid "Methods:" +msgstr "Методи" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "ПоÑтавÑне на възелите" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties:" +msgstr "ПоÑтавÑне на възелите" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1507,13 +1492,19 @@ msgstr "КонÑтанти" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "КонÑтанти:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "ОпиÑание" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "ОпиÑание:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "" @@ -1525,12 +1516,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "Кратко ОпиÑание:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "Кратко ОпиÑание:" #: editor/editor_help.cpp msgid "" @@ -1539,12 +1532,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Методи" +#, fuzzy +msgid "Method Descriptions" +msgstr "ОпиÑание" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "ОпиÑание:" #: editor/editor_help.cpp msgid "" @@ -1552,12 +1547,59 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "ТърÑи в Помощ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Преименувай Ð’Ñички" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Методи" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Signals Only" +msgstr "Само СелекциÑта" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "КонÑтанти" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Изберете ÑвойÑтво" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "Изберете ÑвойÑтво" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "КлаÑ:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1592,21 +1634,26 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Добре" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "" +msgstr "Файлът не може да бъде отворен за запиÑване:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "Форматът на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» е неразпознат:" #: editor/editor_node.cpp msgid "Error while saving." -msgstr "" +msgstr "Грешка при запиÑване." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." @@ -1618,7 +1665,7 @@ msgstr "Грешка при анализа на „%s“." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "" +msgstr "Ðеочакван край на файла '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -1634,7 +1681,7 @@ msgstr "Запазване на Ñцената" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "" +msgstr "Ðнализира Ñе" #: editor/editor_node.cpp msgid "Creating Thumbnail" @@ -1646,10 +1693,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1744,6 +1801,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" +"Сегашната Ñцена никога не е била запазена, молÑ, запазете Ñ Ð¿Ñ€ÐµÐ´Ð¸ изпълнение." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -1787,11 +1845,11 @@ msgstr "" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "Тази Ñцена не е била запазвана преди. Запази преди да пуÑнеш?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "ОперациÑта не може да Ñе извърши без Ñцена." #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -1811,11 +1869,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "Текущата Ñцена не е запазена. Отвори въпреки това?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "Сцена, коÑто никога не е била запазвана, не може да Ñе презареди." #: editor/editor_node.cpp msgid "Revert" @@ -1879,6 +1937,12 @@ msgstr "Грешка при зареждането на шрифта." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1920,6 +1984,12 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Покажи във Файлова СиÑтема" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2005,7 +2075,8 @@ msgid "Save Scene" msgstr "Запазване на Ñцената" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Запазване на вÑички Ñцени" #: editor/editor_node.cpp @@ -2034,7 +2105,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2072,6 +2143,7 @@ msgid "Quit to Project List" msgstr "Изход до ÑпиÑъка Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "ОтÑтранÑване на грешки" @@ -2181,10 +2253,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2269,7 +2337,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Update Always" -msgstr "" +msgstr "ОбновÑвай Винаги" #: editor/editor_node.cpp msgid "Update Changes" @@ -2279,26 +2347,26 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "ВнаÑÑне" #: editor/editor_node.cpp -msgid "Node" -msgstr "Възел" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "ИнÑпектор" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Възел" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "" +msgstr "Разшири Ð”Ð¾Ð»Ð½Ð¸Ñ ÐŸÐ°Ð½ÐµÐ»" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2306,7 +2374,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" +msgstr "Ðе Запазвай" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2326,7 +2394,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Password:" -msgstr "" +msgstr "Парола:" #: editor/editor_node.cpp msgid "Open & Run a Script" @@ -2355,7 +2423,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "" +msgstr "Отвори Кодов Редактор" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -2432,7 +2500,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2456,7 +2524,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2468,7 +2536,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2476,6 +2544,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2493,10 +2575,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2505,7 +2583,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "ПоÑтавÑне" @@ -2748,7 +2827,7 @@ msgstr "Запитване..." #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "ИзтеглÑне" #: editor/export_template_manager.cpp #, fuzzy @@ -2799,6 +2878,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Любими:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2837,7 +2921,7 @@ msgstr "Имаше грешка при внаÑÑнето:" msgid "Unable to update dependencies:" msgstr "Сцената '%s' има нарушени завиÑимоÑти:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2855,7 +2939,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Вече ÑъщеÑтвува файл или папка Ñ Ñ‚Ð¾Ð²Ð° име." #: editor/filesystem_dock.cpp #, fuzzy @@ -2876,29 +2960,23 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" +#, fuzzy +msgid "Open Scene(s)" +msgstr "ОтварÑне на Ñцена" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "ОтварÑне на Ñцена" +msgid "Add to favorites" +msgstr "Любими:" #: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +#, fuzzy +msgid "Remove from favorites" +msgstr "Премахни Ð’Ñички Breakpoint-ове" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -2908,11 +2986,19 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Ðов Ñкрипт" @@ -2922,6 +3008,15 @@ msgstr "Ðов Ñкрипт" msgid "New Resource..." msgstr "Ðова папка..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "ЗатварÑне на вÑичко" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2942,34 +3037,26 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." -msgstr "" +#, fuzzy +msgid "Toggle split mode" +msgstr "Покажи Любими" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Избиране на текущата папка" +msgid "Search files" +msgstr "ТърÑене" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "ТърÑене" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2986,46 +3073,45 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "Ðамери във файлове" #: editor/find_in_files.cpp -msgid "Match case" -msgstr "" +#, fuzzy +msgid "Find:" +msgstr "Ðамери: " #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +#, fuzzy +msgid "Folder:" +msgstr "Папка: " #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "ПоÑтавÑне на възелите" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find..." -msgstr "" +msgstr "Ðамери..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp msgid "Replace..." -msgstr "" +msgstr "ЗамеÑти..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" msgstr "Отказ" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "Ðамери: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "" +msgstr "ЗамеÑти: " #: editor/find_in_files.cpp msgid "Replace all (no undo)" @@ -3038,20 +3124,20 @@ msgstr "ТърÑене" #: editor/find_in_files.cpp msgid "Search complete" -msgstr "" +msgstr "ТърÑенето е завършено" #: editor/groups_editor.cpp +#, fuzzy msgid "Group name already exists." -msgstr "" +msgstr "Група Ñ Ñ‚Ð¾Ð²Ð° име вече ÑъщеÑтвува." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Име:" +msgstr "невалидно име на Група." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Групи" #: editor/groups_editor.cpp msgid "Nodes not in Group" @@ -3086,40 +3172,47 @@ msgstr "ВнаÑÑне на Ñцената..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "ВнаÑÑне на анимации..." +msgstr "ВнеÑи Ñ Ðнимации поотделно" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Materials" -msgstr "" +msgstr "ВнеÑи Ñ ÐœÐ°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð¸Ñ‚Ðµ поотделно" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Objects" -msgstr "" +msgstr "ВнеÑи Ñ ÐžÐ±ÐµÐºÑ‚Ð¸Ñ‚Ðµ поотделно" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "ВнеÑи Ñ ÐžÐ±ÐµÐºÑ‚Ð¸Ñ‚Ðµ и Материалите поотделно" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "ВнеÑи Ñ ÐžÐ±ÐµÐºÑ‚Ð¸Ñ‚Ðµ и Ðнимациите поотделно" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "ВнеÑи Ñ ÐœÐ°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð¸Ñ‚Ðµ и Ðнимациите поотделно" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "ВнеÑи Ñ ÐžÐ±ÐµÐºÑ‚Ð¸Ñ‚Ðµ, Материалите и Ðнимациите поотделно" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Multiple Scenes" -msgstr "ВнаÑÑне на триизмерна Ñцена" +msgstr "ВнеÑи като ÐÑколко Сцени" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "ВнеÑи като ÐÑколко Сцени и Материали" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -3156,15 +3249,17 @@ msgstr "" #: editor/import/resource_importer_scene.cpp msgid "Saving..." -msgstr "" +msgstr "Запазване..." #: editor/import_dock.cpp +#, fuzzy msgid "Set as Default for '%s'" -msgstr "" +msgstr "Задай по Подразбиране за '%s'" #: editor/import_dock.cpp +#, fuzzy msgid "Clear Default for '%s'" -msgstr "" +msgstr "ИзчиÑти по Подразбиране за '%s'" #: editor/import_dock.cpp #, fuzzy @@ -3184,26 +3279,23 @@ msgid "Reimport" msgstr "Повторно внаÑÑне" #: editor/inspector_dock.cpp +#, fuzzy msgid "Failed to load resource." -msgstr "" - -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" +msgstr "ÐеуÑпешно зареждане на реÑурÑите." #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "ПоÑтавÑне на възелите" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Save As..." -msgstr "" +msgstr "Запази Като..." #: editor/inspector_dock.cpp msgid "Copy Params" @@ -3230,8 +3322,9 @@ msgid "Make Sub-Resources Unique" msgstr "" #: editor/inspector_dock.cpp +#, fuzzy msgid "Open in Help" -msgstr "" +msgstr "Отвори в Помощника" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." @@ -3254,8 +3347,9 @@ msgid "History of recently edited objects." msgstr "" #: editor/inspector_dock.cpp +#, fuzzy msgid "Object properties." -msgstr "" +msgstr "ХарактериÑтики на обекта." #: editor/inspector_dock.cpp #, fuzzy @@ -3264,7 +3358,7 @@ msgstr "ПоÑтавÑне на възелите" #: editor/inspector_dock.cpp msgid "Changes may be lost!" -msgstr "" +msgstr "Промените могат да бъдат загубени!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" @@ -3291,7 +3385,7 @@ msgstr "ПриÑтавки" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Подпапка:" #: editor/plugin_config_dialog.cpp #, fuzzy @@ -3305,7 +3399,7 @@ msgstr "Име:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Ðктивирай Ñега?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3337,12 +3431,17 @@ msgid "Create a new polygon from scratch" msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "" "Edit existing polygon:\n" "LMB: Move Point.\n" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Промени ÑъщеÑтвуващ полигон:\n" +"LMB: ПремеÑти Точка.\n" +"Ctrl+LMB: Раздели Сегмент.\n" +"RMB: Изтрии Точка." #: editor/plugins/abstract_polygon_2d_editor.cpp #, fuzzy @@ -3355,14 +3454,14 @@ msgstr "Изтриване на анимациÑта?" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Добави ÐнимациÑ" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Load.." -msgstr "" +msgstr "Зареди..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3386,19 +3485,18 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp +#, fuzzy msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Селектирай и меÑти точки, Ñъздай точки Ñ RMB." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Изтриване на анимациÑта?" +msgstr "Създай точки." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "Изтриване на анимациÑта?" +msgstr "Изтрий точки." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3411,15 +3509,16 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" -msgstr "Оптимизиране на анимациÑта" +msgstr "Отвори Ðнимационен Възел" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Triangle already exists" msgstr "" #: editor/plugins/animation_blend_space_2d_editor.cpp +#, fuzzy msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D не принадлежи на възел тип AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." @@ -3443,11 +3542,16 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy msgid "Edit Filters" -msgstr "Файл:" +msgstr "Промени Филтрите" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." @@ -3476,7 +3580,7 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node.." -msgstr "" +msgstr "Добави Възел..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3485,8 +3589,9 @@ msgid "Edit Filtered Tracks:" msgstr "Файл:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy msgid "Enable filtering" -msgstr "" +msgstr "Позволи филтриране" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3494,7 +3599,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Ðово Име на ÐнимациÑ:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -3502,7 +3607,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Промени Името на ÐнимациÑта:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -3560,9 +3665,8 @@ msgid "Paste Animation" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ÐÑма артикули за внаÑÑне!" +msgstr "ÐÑма Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° променÑне!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3594,7 +3698,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "" +msgstr "Ðнимационни ИнÑтрументи" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -3691,7 +3795,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" -msgstr "" +msgstr "Грешка!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" @@ -3744,17 +3848,17 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Create new nodes." -msgstr "Създайте нов/а %s" +msgstr "Създай нови възли." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Connect nodes." -msgstr "ИзрÑзване на възелите" +msgstr "Свържи възли." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Remove selected node or transition" -msgstr "Премахване на пътечката." +msgstr "Премахни ÑÐµÐ»ÐµÐºÑ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð²ÑŠÐ·ÐµÐ» или преход." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." @@ -3777,12 +3881,12 @@ msgstr "Изтриване на анимациÑта?" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "Ðово име:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "Мащаб:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade In (s):" @@ -3801,8 +3905,9 @@ msgid "Mix" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy msgid "Auto Restart:" -msgstr "" +msgstr "Ðвтоматично РеÑтартиране:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" @@ -3822,10 +3927,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -3867,7 +3968,7 @@ msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "Ðнимационен Възел" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "OneShot Node" @@ -3907,11 +4008,11 @@ msgstr "ВнаÑÑне на анимации..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Промени Възлови Филтри" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." -msgstr "" +msgstr "Филтри..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" @@ -3927,7 +4028,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "" +msgstr "Грешка във връзката, Ð¼Ð¾Ð»Ñ Ð¾Ð¿Ð¸Ñ‚Ð°Ð¹ отново." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" @@ -3939,11 +4040,11 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "ЗаÑвката Ñе провали, върнат код:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "ЗаÑвката Ñе провали, твърде много пренаÑочваниÑ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -3951,15 +4052,15 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "Очаквано:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "Получено:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "" +msgstr "ÐеуÑпешна проверка на sha256 hash" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" @@ -3967,20 +4068,19 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." -msgstr "" +msgstr "ИзтеглÑне (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading..." -msgstr "" +msgstr "Ð˜Ð·Ñ‚ÐµÐ³Ð»Ñ Ñе..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." -msgstr "" +msgstr "Уреждане на връзката..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" -msgstr "Имаше грешка при зареждане на Ñцената." +msgstr "Имаше грешка при направата на заÑвката за изтеглÑне" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -3988,33 +4088,32 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "Опитай пак" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "Грешка при изтеглÑнето" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Този актив вече Ñе ÑвалÑ!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" -msgstr "" +msgstr "Ðачална" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Предишен подпрозорец" +msgstr "Предишна" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Next" -msgstr "Следващ подпрозорец" +msgstr "Следваща" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "ПоÑледна" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4032,7 +4131,7 @@ msgstr "Подреждане:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Reverse" -msgstr "" +msgstr "Ð’ обратен ред" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -4045,15 +4144,15 @@ msgstr "МÑÑто:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Support..." -msgstr "Поддръжка" +msgstr "Поддръжка..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "Официална" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "ТеÑтова" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -4083,7 +4182,7 @@ msgstr "" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp msgid "Preview" -msgstr "" +msgstr "Преглед" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" @@ -4098,42 +4197,43 @@ msgid "Grid Step:" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Rotation Offset:" -msgstr "" +msgstr "ИзмеÑтване при Завъртане:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "Съпка при Завъртане:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" -msgstr "" +msgstr "ПемеÑти вертикална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy msgid "Create new vertical guide" -msgstr "Създаване на нов Ñкрипт" +msgstr "Създай нова вертикална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove vertical guide" -msgstr "" +msgstr "Премахни вертикална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move horizontal guide" -msgstr "" +msgstr "ПремеÑти хоризонтална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new horizontal guide" -msgstr "Създаване на нов Ñкрипт" +msgstr "Създай нова хоризонтална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove horizontal guide" -msgstr "" +msgstr "Премахни хоризонтална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" -msgstr "" +msgstr "Създай нова хоризонтална и вертикална помощна линиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move pivot" @@ -4152,6 +4252,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4173,28 +4277,27 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom out" -msgstr "" +msgstr "Отдалечи" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom reset" -msgstr "" +msgstr "Оригинално увеличение" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom in" -msgstr "" +msgstr "Приближи" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Select Mode" -msgstr "Избиране на вÑичко" +msgstr "Режим на Селектиране" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "Дърпане: Завъртане" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt+Дърпане: ПремеÑтване" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." @@ -4206,11 +4309,16 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" -msgstr "" +msgstr "Режим на ПремеÑтване" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate Mode" -msgstr "" +msgstr "Режим на Завъртане" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Режим на Селектиране" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4218,6 +4326,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Покажи ÑпиÑък Ñ Ð²Ñички обекти на кликнатата позициÑ\n" +"(Ñъщото като Alt+RMB в режим на Ñелектиране)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -4225,7 +4335,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Панорамен режим на ОтмеÑтване (на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggle snapping." @@ -4291,20 +4401,26 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "" +msgstr "Заключи ÑÐµÐ»ÐµÐºÑ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ на мÑÑто (за да не може да Ñе премеÑтва)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "" +msgstr "Отключи ÑÐµÐ»ÐµÐºÑ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ (за да може да Ñе премеÑтва)." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Makes sure the object's children are not selectable." -msgstr "" +msgstr "Гарантирай че децата на този обект нÑма да могат да бъдат Ñелектирани." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" +msgstr "Възвръщане на ÑпоÑобноÑтта да Ñе Ñелектират децата на обекта." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Само СелекциÑта" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4312,11 +4428,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "" +msgstr "Ðаправи IK Връзка" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "" +msgstr "ИзчиÑти IK Връзка" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" @@ -4329,8 +4445,9 @@ msgstr "Възпроизвеждане на Ñцена по избор" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "View" -msgstr "" +msgstr "Изглед" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -4358,12 +4475,17 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Center Selection" +msgid "Show Group And Lock Icons" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "Центрирай върху СелекциÑта" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Frame Selection" -msgstr "" +msgstr "Покажи СелекциÑта (вмеÑти в Ñ†ÐµÐ»Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -4395,11 +4517,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "" +msgstr "Добави %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "" +msgstr "ДобавÑне на %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." @@ -4408,7 +4530,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "" +msgstr "Създай Възел" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -4539,24 +4661,25 @@ msgid "Create Occluder Polygon" msgstr "" #: editor/plugins/light_occluder_2d_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon from scratch." -msgstr "" +msgstr "Създай нов полигон от нулата." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit existing polygon:" -msgstr "" +msgstr "Промени ÑъщеÑтвуващ полигон:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "LMB: Move Point." -msgstr "" +msgstr "LMB: ПремеÑти Точка." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "" +msgstr "Ctrl+LMB: Раздели Сегмент." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." -msgstr "" +msgstr "RMB: Изтрий Точка." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" @@ -4617,11 +4740,11 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "" +msgstr "Ðе можа да Ñе Ñъздаде очертание!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "" +msgstr "Създай Очертание" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" @@ -4648,14 +4771,12 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV1" -msgstr "Преглед на файловете" +msgstr "Покажи UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV2" -msgstr "Преглед на файловете" +msgstr "Покажи UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" @@ -4667,7 +4788,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "" +msgstr "Размер на Очертанието:" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" @@ -4684,11 +4805,11 @@ msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import from Scene" -msgstr "ВнаÑÑне от Ñцена" +msgstr "ВнаÑÑне от Cцена" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Update from Scene" -msgstr "ОбновÑване от Ñцена" +msgstr "ОбновÑване от Cцена" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." @@ -4795,8 +4916,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4825,6 +4945,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4855,15 +4980,15 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "No faces!" -msgstr "" +msgstr "ÐÑма лица!" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "" +msgstr "Възелът не Ñъдържа геометриÑ." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "Възелът не Ñъдържа Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ (лица)." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -4883,7 +5008,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "Обем" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " @@ -4894,11 +5019,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -4971,7 +5096,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Изтрий Точка" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5110,37 +5235,37 @@ msgid "Move Point" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +#, fuzzy msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: Завъртане" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "" +msgstr "Shift: ПремеÑтване на Ð’Ñичко" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "" +msgstr "Shift+Ctrl: Управление на Мащаб (размер)" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "" +msgstr "ПремеÑтване на Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "" +msgstr "Завъртане на Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "Мащаб на Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Свържи две точки, за да направиш разделение" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Изберете папка за Ñканиране" +msgstr "Избери разделение и го изтрий" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" @@ -5152,19 +5277,19 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "РадиуÑ:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" -msgstr "" +msgstr "Полигон->UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV->Polygon" -msgstr "" +msgstr "UV->Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "" +msgstr "ИзчиÑти UV" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5205,7 +5330,7 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "" +msgstr "ГРЕШКÐ: РеÑурÑÑŠÑ‚ не можа да бъде зареден!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" @@ -5229,19 +5354,19 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" +msgstr "Тип:" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp @@ -5266,24 +5391,25 @@ msgid "Clear Recent Files" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close and save changes?" -msgstr "Да Ñе затвори ли Ñцената? (незаразените промени ще Ñе загубÑÑ‚)" +msgstr "Затвори и запази промените?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Имаше грешка при внаÑÑнето на Ñцената" +msgstr "Грешка при запиÑване на TextFile:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Грешка, не можа да Ñе зареди файла." + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." -msgstr "ÐеуÑпешно Ñъздаване на папка." +msgstr "Грешка, не можа да Ñе зареди файла." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Грешка при зареждането на шрифта." +msgstr "Грешка при запиÑването на файла!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5291,30 +5417,28 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving" -msgstr "" +msgstr "Грешка при запазване" #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error importing theme" -msgstr "Имаше грешка при внаÑÑнето на Ñцената" +msgstr "Грешка при внаÑÑне на темата" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing" msgstr "Имаше грешка при внаÑÑнето" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Ðова папка..." +msgstr "Ðов TextFile..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" -msgstr "Файл:" +msgstr "Отвори Файл" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Запазване на Ñцената като..." +msgstr "Запази Файла Като..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5322,7 +5446,7 @@ msgstr "ВнаÑÑне на тема" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "" +msgstr "Запази Темата Като..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -5341,34 +5465,34 @@ msgstr "Подреждане:" #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "" +msgstr "ПремеÑти Ðагоре" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "" +msgstr "ПремеÑти Ðадоло" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "" +msgstr "Следващ Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "" +msgstr "Предишен Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Файл" #: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "New TextFile" -msgstr "Преглед на файловете" +msgstr "Ðов TextFile" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Запази Ð’Ñичко" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -5379,37 +5503,34 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ðазад" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "" +msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ðапред" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" -msgstr "" +msgstr "Тема" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "" +msgstr "Зареди Темата наново" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "" +msgstr "Запази Темата" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As" -msgstr "" +msgstr "Запази Темата Като" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "" +msgstr "Затвори ДокументациÑта" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" @@ -5424,13 +5545,14 @@ msgid "Run" msgstr "ПуÑкане" #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Toggle Scripts Panel" -msgstr "" +msgstr "ВидимоÑÑ‚ на Панела ÑÑŠÑ Ð¡ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð²Ðµ" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "" +msgstr "Ðамери Ðапред" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" @@ -5454,16 +5576,12 @@ msgid "Keep Debugger Open" msgstr "ОтÑÑ‚Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñ Ð½Ð° грешки да Ñеди отворен" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" +msgstr "Отвори документациÑта на Godot онлайн" #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -5471,29 +5589,31 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "" +msgstr "Отиди в Ð¿Ñ€ÐµÐ´Ñ…Ð¾Ð´Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½ документ." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "" +msgstr "Отиди в ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½ документ." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" -msgstr "" +msgstr "Захвърли (промените)" #: editor/plugins/script_editor_plugin.cpp msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" +"Следните файлове Ñа по-нови на диÑка.\n" +"Кое дейÑтвие трÑбва да Ñе предприеме?:" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "" +msgstr "Презареди" #: editor/plugins/script_editor_plugin.cpp msgid "Resave" -msgstr "" +msgstr "Презапиши" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" @@ -5501,29 +5621,23 @@ msgstr "ОтÑтранител на грешки" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "ТърÑене" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Имаше грешка при внаÑÑнето:" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Линейно" +msgstr "Ред" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Отиди на Ред" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5541,15 +5655,15 @@ msgstr "" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" -msgstr "" +msgstr "Главни букви" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Lowercase" -msgstr "" +msgstr "Малки букви" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Ð’ÑÑка дума Ñ Ð“Ð»Ð°Ð²Ð½Ð° буква" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" @@ -5570,9 +5684,8 @@ msgid "Select All" msgstr "Избиране на вÑичко" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Изтриване на анимациÑта?" +msgstr "Изтрий Ред" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5584,39 +5697,39 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" +msgstr "Вкарай Коментар" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Изтриване на анимациÑта?" +msgstr "Разтвори/Събери Реда" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "" +msgstr "Събери вÑички Редове" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "" +msgstr "Разтвори Ð’Ñички Редове" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "" +msgstr "Копирай на Долен ред" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "" +msgstr "Завърши Символа (Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° довършване)" #: editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Trim Trailing Whitespace" -msgstr "" +msgstr "Премахни Празните Ñимволи в ÐºÑ€Ð°Ñ Ð½Ð° реда" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5626,43 +5739,39 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "" +msgstr "Добави Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" +msgstr "Премахни Ð’Ñички Breakpoint-ове" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Отиди на ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Breakpoint" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Отиди на ÐŸÑ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." -msgstr "" +#, fuzzy +msgid "Find in Files..." +msgstr "Ðамери във файлове" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "Отиди на Ред" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5754,6 +5863,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5783,11 +5900,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "" +msgstr "Изглед Отгоре." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "" +msgstr "Изглед Отдолу." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -5795,7 +5912,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "" +msgstr "Изглед ОтлÑво." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -5803,7 +5920,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "" +msgstr "Изглед ОтдÑÑно." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -5811,7 +5928,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "" +msgstr "Изглед Отпред." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -5819,7 +5936,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "" +msgstr "Изглед Отзад." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -5892,41 +6009,43 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "Свободен Изглед ОтлÑво" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "Свободен Изглед ОтдÑÑно" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "" +msgstr "Свободен Изглед Отпред" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "" +msgstr "Свободен Изглед Отзад" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "Свободен Изглед Отгоре" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Колелцето надолу." +msgstr "Свободен Изглед Отдолу" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)" -msgstr "Избиране на вÑичко" +msgstr "Режим на Селектиране (Q)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -6021,10 +6140,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6428,6 +6543,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Центрирай върху СелекциÑта" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6474,25 +6594,32 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Ðова Ñцена" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "Режим на Завъртане" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "" +#, fuzzy +msgid "Rotate right" +msgstr "Завъртане на Полигон" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "ИзнаÑÑне към платформа" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6521,7 +6648,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6537,7 +6664,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6615,6 +6742,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "ИзнаÑÑне за %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6623,6 +6759,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "ИзнаÑÑне на проекта" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6682,6 +6823,16 @@ msgid "Export PCK/Zip" msgstr "ИзнаÑÑне" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Режим на изнаÑÑне:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "ИзнаÑÑне" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7147,10 +7298,6 @@ msgstr "ÐаÑтройки на проекта" msgid "General" msgstr "Общи" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7287,10 +7434,6 @@ msgstr "ПоÑтавÑне" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Изберете ÑвойÑтво" @@ -7378,7 +7521,7 @@ msgid "Step" msgstr "Стъпка (Ñек.):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7387,7 +7530,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7427,7 +7570,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7486,6 +7629,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "Ðова Ñцена" @@ -7523,6 +7670,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7598,6 +7751,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Отвори документациÑта на Godot онлайн" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7606,12 +7764,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Ðова Ñцена" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7767,6 +7926,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7858,19 +8021,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7903,18 +8054,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Грешки:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8357,11 +8496,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8418,7 +8553,7 @@ msgstr "" #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" -msgstr "" +msgstr "Готово!" #: modules/visual_script/visual_script.cpp msgid "" @@ -8636,6 +8771,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8736,11 +8875,11 @@ msgid "Search VisualScript" msgstr "ПоÑтавÑне на възелите" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8837,6 +8976,12 @@ msgstr "" "За да работи CollisionShape2D, е нужно да му Ñе даде форма. МолÑ, Ñъздайте " "му Shape2D реÑурÑ." +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8883,6 +9028,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D работи Ñамо когато е наÑледник на Path2D." @@ -9002,6 +9153,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9021,6 +9182,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D работи Ñамо когато е наÑледник на Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D работи Ñамо когато е наÑледник на Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9056,7 +9237,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9125,11 +9306,6 @@ msgstr "Тревога!" msgid "Please Confirm..." msgstr "МолÑ, потвърдете..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Изберете метод" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9137,6 +9313,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9202,6 +9382,37 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "Приближение:" + +#~ msgid "Class List:" +#~ msgstr "СпиÑък на КлаÑове:" + +#~ msgid "Search Classes" +#~ msgstr "ТърÑи КлаÑове" + +#~ msgid "Public Methods" +#~ msgstr "Публични методи" + +#~ msgid "Public Methods:" +#~ msgstr "Публични Методи:" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Избиране на текущата папка" + +#~ msgid "Whole words" +#~ msgstr "Цели думи" + +#~ msgid "Search the class hierarchy." +#~ msgstr "ТърÑи в йерархиÑта на клаÑовете." + +#~ msgid "Search in files" +#~ msgstr "ТърÑи във файлове" + +#~ msgid "Errors:" +#~ msgstr "Грешки:" + #~ msgid "Disabled" #~ msgstr "Изключено" @@ -9249,9 +9460,6 @@ msgstr "" #~ "Този Viewport трÑбва да бъде наÑтройен в режим 'рендъринг цел'(render " #~ "target)." -#~ msgid "Exporting for %s" -#~ msgstr "ИзнаÑÑне за %s" - #~ msgid "Re-Import" #~ msgstr "Повторно внаÑÑне" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index f4021e9731..a99a1360a2 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -26,7 +26,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ convert()-ঠগিয়েছে, TYPE_* ধà§à¦°à§à¦¬à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "বিনà§à¦¯à¦¾à¦¸ জানার জনà§à¦¯ যথেষà§à¦Ÿ বাইট নেই, অথবা à¦à§à¦² ফরমà§à¦¯à¦¾à¦Ÿà¥¤" @@ -410,8 +410,7 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহের আকার পরিব msgid "Scale From Cursor" msgstr "কারà§à¦¸à¦° হতে আকার পরিবরà§à¦¤à¦¨ করà§à¦¨" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অনà§à¦²à¦¿à¦ªà¦¿ করà§à¦¨" @@ -425,11 +424,13 @@ msgid "Delete Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "পরবরà§à¦¤à§€ ধাপে যান" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ ধাপে যান" #: editor/animation_track_editor.cpp @@ -532,11 +533,11 @@ msgstr "কোনো মিল নেই" msgid "Replaced %d occurrence(s)." msgstr "%d সংখà§à¦¯à¦• সংঘটন পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হয়েছে ।" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "অকà§à¦·à¦°à§‡à¦° মাতà§à¦°à¦¾ (বড়/ছোট-হাতের) মিল করà§à¦¨" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "সমà§à¦ªà§‚রà§à¦£ শবà§à¦¦" @@ -571,10 +572,10 @@ msgstr "সতরà§à¦•তা" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "জà§à¦®à§ (%):" +msgid "Font Size:" +msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "লাইন:" @@ -607,6 +608,7 @@ msgstr "সংযোজন করà§à¦¨" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -689,7 +691,7 @@ msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "à¦à¦•ধিক পà§à¦°à¦•লà§à¦ª চালানোয় আপনি সà§à¦¨à¦¿à¦¶à§à¦šà¦¿à¦¤?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -746,17 +748,14 @@ msgstr "সামà§à¦ªà§à¦°à¦¤à¦¿à¦•:" msgid "Search:" msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "মিলসমূহ:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "বরà§à¦£à¦¨à¦¾:" @@ -817,9 +816,10 @@ msgid "Search Replacement Resource:" msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦• রিসোরà§à¦¸-à¦à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -853,7 +853,8 @@ msgid "Error loading:" msgstr "লোডে সমসà§à¦¯à¦¾ হয়েছে:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "নিরà§à¦à¦°à¦¤à¦¾-সমূহের অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¦¿à¦¤à§‡ দৃশà§à¦¯à§‡à¦° লোড বà§à¦¯à¦°à§à¦¥ হয়েছে:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -912,14 +913,6 @@ msgstr "ডিকশনারি à¦à§à¦¯à¦¾à¦²à§ পরিবরà§à¦¤à¦¨ ঠmsgid "Thanks from the Godot community!" msgstr "Godot কমিউনিটি হতে আপনাকে ধনà§à¦¯à¦¬à¦¾à¦¦!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "সঠিক" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine কনà§à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿà¦°à¦¸" @@ -1096,8 +1089,7 @@ msgid "Bus options" msgstr "বাস অপশন" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট" @@ -1270,8 +1262,9 @@ msgstr "পথ:" msgid "Node Name:" msgstr "নোডের নাম:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "নাম" @@ -1344,13 +1337,18 @@ msgid "Template file not found:" msgstr "টেমপà§à¦²à§‡à¦Ÿ ফাইল পাওয়া যায়নি:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "à¦à¦•ই নামের ফাইল উপসà§à¦¥à¦¿à¦¤, তা মà§à¦›à§‡ লিখবেন?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" -msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" +msgid "Select This Folder" +msgstr "মেথড/পদà§à¦§à¦¤à¦¿ বাছাই করà§à¦¨" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1358,12 +1356,13 @@ msgstr "পথ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "ফাইল-মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°à§‡ দেখà§à¦¨" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "ফাইল-মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°à§‡ দেখà§à¦¨" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1400,7 +1399,8 @@ msgid "Open a File or Directory" msgstr "ফাইল বা পথ/ডিরেকà§à¦Ÿà¦°à¦¿ খà§à¦²à§à¦¨" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "সংরকà§à¦·à¦¨ করà§à¦¨" @@ -1459,8 +1459,7 @@ msgstr "পথ à¦à¦¬à¦‚ ফাইল:" msgid "Preview:" msgstr "পà§à¦°à¦¿à¦à¦¿à¦‰:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "ফাইল:" @@ -1477,24 +1476,11 @@ msgstr "উৎসসমূহ সà§à¦•à§à¦¯à¦¾à¦¨ করà§à¦¨" msgid "(Re)Importing Assets" msgstr "পà§à¦¨à¦°à¦¾à§Ÿ ইমà§à¦ªà§‹à¦°à§à¦Ÿ হচà§à¦›à§‡" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "সাহাযà§à¦¯ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° তালিকা:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "শীরà§à¦·" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "কà§à¦²à¦¾à¦¸:" @@ -1512,30 +1498,32 @@ msgstr "সংকà§à¦·à¦¿à¦ªà§à¦¤ বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp #, fuzzy -msgid "Members" -msgstr "সদসà§à¦¯à¦—ণ (Members):" +msgid "Properties" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "সদসà§à¦¯à¦—ণ (Members):" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" #: editor/editor_help.cpp #, fuzzy -msgid "Public Methods" -msgstr "সরà§à¦¬à¦œà¦¨à§€à¦¨/পà§à¦°à¦•াশà§à¦¯ মেথডসমূহ:" +msgid "Methods" +msgstr "মেথডের তালিকা:" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "সরà§à¦¬à¦œà¦¨à§€à¦¨/পà§à¦°à¦•াশà§à¦¯ মেথডসমূহ:" +#, fuzzy +msgid "Methods:" +msgstr "মেথডের তালিকা:" #: editor/editor_help.cpp #, fuzzy -msgid "GUI Theme Items" -msgstr "GUI থিম à¦à¦° বসà§à¦¤à§à¦¸à¦®à§‚হ:" +msgid "Theme Properties" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI থিম à¦à¦° বসà§à¦¤à§à¦¸à¦®à§‚হ:" +#, fuzzy +msgid "Theme Properties:" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1566,7 +1554,12 @@ msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" #: editor/editor_help.cpp #, fuzzy -msgid "Description" +msgid "Class Description" +msgstr "বরà§à¦£à¦¨à¦¾:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" msgstr "বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp @@ -1587,11 +1580,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Properties" -msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" +msgid "Property Descriptions" +msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp @@ -1605,11 +1599,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Methods" -msgstr "মেথডের তালিকা:" +msgid "Method Descriptions" +msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:" #: editor/editor_help.cpp @@ -1621,12 +1616,61 @@ msgstr "" "সহায়তা করà§à¦¨à¥¤ তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° জনà§à¦¯ [color=$color][url=$url], [/url][/color] ফরমà§à¦¯à¦¾à¦Ÿ " "বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করà§à¦¨ !" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "সাহাযà§à¦¯ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Display All" +msgstr "Normal পà§à¦°à¦¦à¦°à§à¦¶à¦¨" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "কà§à¦²à¦¾à¦¸à¦¸à¦®à§‚হ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "মেথডের তালিকা:" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "সংকেতসমূহ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "সদসà§à¦¯à¦—ণ (Members):" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "কà§à¦²à¦¾à¦¸:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "নিযà§à¦•à§à¦¤ করà§à¦¨ (Set)" @@ -1662,6 +1706,11 @@ msgstr "" msgid "Error saving resource!" msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "সঠিক" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "রিসোরà§à¦¸ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." @@ -1719,6 +1768,12 @@ msgid "This operation can't be done without a tree root." msgstr "দৃশà§à¦¯ ছাড়া à¦à¦Ÿà¦¿ করা সমà§à¦à¦¬ হবে না।" #: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " @@ -1727,6 +1782,10 @@ msgstr "" "দৃশà§à¦¯à¦Ÿà¦¿ সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না। সমà§à¦à¦¬à¦¤ যেসবের (ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸) উপর নিরà§à¦à¦° করছে তাদের " "সনà§à¦¤à§à¦·à§à¦Ÿ করা সমà§à¦à¦¬ হচà§à¦›à§‡ না।" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "à¦à¦•তà§à¦°à¦¿à¦¤ করার জনà§à¦¯ পà§à¦°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ MeshLibrary লোড অসমà§à¦à¦¬ হয়েছে!" @@ -1986,6 +2045,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "%s হতে সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ তà§à¦²à¦¤à§‡/লোডে সমসà§à¦¯à¦¾ হয়েছে" #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"'%s' পাথ বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করে অà§à¦¯à¦¾à¦¡-অন সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করা সমà§à¦à¦¬ হয়নি। সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿà¦Ÿà¦¿ টà§à¦² মোডে নেই।" + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "অà§à¦¯à¦¾à¦¡-অন সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ পাথ '%s' অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯à¥¤à¦à¦° বেস টাইপ à¦à¦¡à¦¿à¦Ÿà¦° পà§à¦²à¦¾à¦—ইন নয়।" @@ -2033,6 +2100,12 @@ msgstr "লেআউট/নকশা অপসারণ করà§à¦¨" msgid "Default" msgstr "সাধারণ/ডিফলà§à¦Ÿ" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2122,7 +2195,8 @@ msgid "Save Scene" msgstr "দৃশà§à¦¯ সংরকà§à¦·à¦£ করà§à¦¨" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "সকল দৃশà§à¦¯ সংরকà§à¦·à¦£ করà§à¦¨" #: editor/editor_node.cpp @@ -2151,7 +2225,7 @@ msgid "Undo" msgstr "সাবেক অবসà§à¦¥à¦¾à§Ÿ যান/আনডà§" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "পà§à¦¨à¦°à¦¾à¦¯à¦¼ করà§à¦¨" @@ -2190,6 +2264,7 @@ msgid "Quit to Project List" msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° তালিকায় পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করà§à¦¨" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "ডিবাগ" @@ -2321,10 +2396,6 @@ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোà msgid "Help" msgstr "হেলà§à¦ª" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "কà§à¦²à¦¾à¦¸à¦¸à¦®à§‚হ" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2420,24 +2491,24 @@ msgstr "পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ হাল-নাগাদ করৠmsgid "Disable Update Spinner" msgstr "হাল-নাগাদকারী ঘূরà§à¦£à¦• নিষà§à¦•à§à¦°à¦¿à§Ÿ করà§à¦¨" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "পরিদরà§à¦¶à¦•/পরীকà§à¦·à¦•" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ" #: editor/editor_node.cpp -msgid "Node" -msgstr "নোড" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "পরিদরà§à¦¶à¦•/পরীকà§à¦·à¦•" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "নোড" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" @@ -2584,7 +2655,7 @@ msgstr "ফà§à¦°à§‡à¦® %" msgid "Physics Frame %" msgstr "সà§à¦¥à¦¿à¦°/বদà§à¦§ ফà§à¦°à§‡à¦® %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "সময়:" @@ -2610,7 +2681,7 @@ msgstr "সময়:" msgid "Calls" msgstr "ডাকà§à¦¨ (Call)" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "চালà§" @@ -2623,7 +2694,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "বিট %d, মান %d।" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp #, fuzzy msgid "[Empty]" msgstr "খালি বসà§à¦¤à§ যোগ করà§à¦¨" @@ -2633,6 +2704,20 @@ msgstr "খালি বসà§à¦¤à§ যোগ করà§à¦¨" msgid "Assign.." msgstr "নিযà§à¦•à§à¦¤" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp #, fuzzy msgid "Pick a Viewport" @@ -2652,11 +2737,6 @@ msgstr "" msgid "Make Unique" msgstr "বোনà§â€Œ/হাড় তৈরি করà§à¦¨" -#: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy -msgid "Show in File System" -msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2665,7 +2745,8 @@ msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨/পেসà§à¦Ÿ করà§à¦¨" @@ -2988,6 +3069,11 @@ msgstr "" "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡ না!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "'% s' তে নেà¦à¦¿à¦—েট করা যাবে না কারণ à¦à¦Ÿà¦¿ ফাইল সিসà§à¦Ÿà§‡à¦®à§‡ পাওয়া যায়নি!" @@ -3034,7 +3120,7 @@ msgstr "লোডে সমসà§à¦¯à¦¾ হয়েছে:" msgid "Unable to update dependencies:" msgstr "'%s' দৃশà§à¦¯à¦Ÿà¦¿à¦° অসংলগà§à¦¨ নিরà§à¦à¦°à¦¤à¦¾ রয়েছে:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "কোন নাম বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করা হয়নি" @@ -3079,30 +3165,22 @@ msgstr "নোড পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Expand all" -msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "কলাপà§à¦¸ করà§à¦¨" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" +msgid "Open Scene(s)" +msgstr "দৃশà§à¦¯ খà§à¦²à§à¦¨" #: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "à¦à¦–ানে সরান..." +msgid "Instance" +msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "দৃশà§à¦¯ খà§à¦²à§à¦¨" +msgid "Add to favorites" +msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ:" #: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸" +#, fuzzy +msgid "Remove from favorites" +msgstr "গà§à¦°à§à¦ª/দল হতে অপসারণ করà§à¦¨" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3112,12 +3190,21 @@ msgstr "নিরà§à¦à¦°à¦¤à¦¾à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨. msgid "View Owners..." msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীদের দেখà§à¦¨..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "à¦à¦–ানে সরান..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "নতà§à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" @@ -3127,6 +3214,16 @@ msgstr "নতà§à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" msgid "New Resource..." msgstr "রিসোরà§à¦¸ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "কলাপà§à¦¸ করà§à¦¨" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3148,28 +3245,19 @@ msgstr "ফাইলসিসà§à¦Ÿà§‡à¦® পà§à¦¨-সà§à¦•à§à¦¯à¦¾à¦¨ কর #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "ফোলà§à¦¡à¦¾à¦°à§‡à¦° অবসà§à¦¥à¦¾ ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼ হিসেবে অদলবদল/টগল করà§à¦¨" +msgid "Toggle split mode" +msgstr "মোড অদলবদল/টগল করà§à¦¨" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "à¦à¦‡-মà§à¦¹à§‚রà§à¦¤à§‡ সমà§à¦ªà¦¾à¦¦à¦¿à¦¤ রিসোরà§à¦¸à¦Ÿà¦¿ সংরকà§à¦·à¦£ করà§à¦¨à¥¤" +msgid "Search files" +msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ দৃশà§à¦¯(সমূহ)-কে নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ নোডের অংশ হিসেবে ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨à¥¤" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3177,7 +3265,7 @@ msgstr "" "ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡,\n" "অনà§à¦—à§à¦°à¦¹à¦ªà§‚রà§à¦¬à¦• অপেকà§à¦·à¦¾ করà§à¦¨..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "সরান" @@ -3196,32 +3284,23 @@ msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ তৈরি করà§à¦¨" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "টাইল খà§à¦à¦œà§à¦¨" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "সনà§à¦§à¦¾à¦¨ করà§à¦¨" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "সমà§à¦ªà§‚রà§à¦£ শবà§à¦¦" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "অকà§à¦·à¦°à§‡à¦° মাতà§à¦°à¦¾ (বড়/ছোট-হাতের) মিল করà§à¦¨" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "লাইন-ঠযান" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " -msgstr "ফিলà§à¦Ÿà¦¾à¦°:" +msgid "Filters:" +msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3238,6 +3317,11 @@ msgstr "বাতিল" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "সনà§à¦§à¦¾à¦¨ করà§à¦¨" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" @@ -3411,19 +3495,14 @@ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ" msgid "Failed to load resource." msgstr "রিসোরà§à¦¸ লোড বà§à¦¯à¦°à§à¦¥ হয়েছে।" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "ঠিক আছে" - #: editor/inspector_dock.cpp #, fuzzy -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" #: editor/inspector_dock.cpp #, fuzzy -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "কলাপà§à¦¸ করà§à¦¨" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3681,6 +3760,11 @@ msgstr "" msgid "Snap" msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "বà§à¦²à§‡à¦¨à§à¦¡/মিশà§à¦°à¦£:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -4069,10 +4153,6 @@ msgid "Amount:" msgstr "পরিমাণ:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "বà§à¦²à§‡à¦¨à§à¦¡/মিশà§à¦°à¦£:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "বà§à¦²à§‡à¦¨à§à¦¡/মিশà§à¦°à¦£ ০:" @@ -4416,6 +4496,11 @@ msgstr "CanvasItem সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "CanvasItem সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "CanvasItem সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" @@ -4481,6 +4566,11 @@ msgid "Rotate Mode" msgstr "ঘূরà§à¦£à¦¾à§Ÿà¦¨ মোড" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "মাপের মোড করà§à¦¨ (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4584,6 +4674,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "বসà§à¦¤à§à¦° অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤-সমূহের নিরà§à¦¬à¦¾à¦šà¦¨à¦¯à§‹à¦—à§à¦¯à¦¤à¦¾ পà§à¦¨à¦°à¦¾à§Ÿ ফিরিয়ে আনে।" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "সà§à¦•েলেটন/কাঠাম..." + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "বোনà§â€Œ/হাড় দেখান" @@ -4640,6 +4735,10 @@ msgid "Show Viewport" msgstr "à§§ টি Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে কেনà§à¦¦à§à¦°à§€à¦à§‚ত করà§à¦¨" @@ -5096,10 +5195,9 @@ msgid "Create Navigation Polygon" msgstr "Navigation Polygon তৈরি করà§à¦¨" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp #, fuzzy -msgid "Generating AABB" -msgstr "AABB উৎপনà§à¦¨ করà§à¦¨" +msgid "Generating Visibility Rect" +msgstr "à¦à¦¿à¦œà¦¿à¦¬à¦¿à¦²à¦¿à¦Ÿà¦¿ রেকà§à¦Ÿ তৈরি করà§à¦¨" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5128,6 +5226,12 @@ msgstr "Emission Mask পরিসà§à¦•ার করà§à¦¨" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp #, fuzzy +msgid "Convert to CPUParticles" +msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "Particles" msgstr "à¦à¦¾à¦°à¦Ÿà§‡à¦•à§à¦¸" @@ -5204,13 +5308,13 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "'পারà§à¦Ÿà¦¿à¦•লস মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦²' টাইপের à¦à¦•টি পà§à¦°à¦¸à§‡à¦¸à¦° মà§à¦¯à¦¾à¦Ÿà§‡à¦°à¦¿à§Ÿà¦¾à¦² পà§à¦°à§Ÿà§‹à¦œà¦¨ ।" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +#, fuzzy +msgid "Generating AABB" msgstr "AABB উৎপনà§à¦¨ করà§à¦¨" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." +msgid "Generate AABB" +msgstr "AABB উৎপনà§à¦¨ করà§à¦¨" #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5563,22 +5667,22 @@ msgid "Paste Resource" msgstr "রিসোরà§à¦¸ পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨/পেসà§à¦Ÿ করà§à¦¨" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "ধরণ:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "রিসোরà§à¦¸ লোড করà§à¦¨" @@ -5616,6 +5720,11 @@ msgstr "ছবি লোডে সমসà§à¦¯à¦¾ হয়েছে:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "ছবি লোড অসমà§à¦à¦¬ হয়েছে" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "ছবি লোড অসমà§à¦à¦¬ হয়েছে" @@ -5720,11 +5829,7 @@ msgstr "পথ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "পূরà§à¦¬à§‡à¦° ইতিহাস" #: editor/plugins/script_editor_plugin.cpp @@ -5797,7 +5902,7 @@ msgstr "ডিবাগার খোলা রাখà§à¦¨" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" #: editor/plugins/script_editor_plugin.cpp @@ -5806,10 +5911,6 @@ msgid "Open Godot online documentation" msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° কà§à¦°à¦®à§‡à¦¾à¦šà§à¦šà¦¤à¦¾ খà§à¦à¦œà§à¦¨à¥¤" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" @@ -5848,19 +5949,9 @@ msgstr "ডিবাগার" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "সাহাযà§à¦¯ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° তাদের অধিকারী দৃশà§à¦¯ লোড করা হলেই সমà§à¦ªà¦¾à¦¦à¦¨ করা যাবে" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5871,6 +5962,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "ফাংশনে যান..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ফাইল সিসà§à¦Ÿà§‡à¦® থেকে রিসোরà§à¦¸ ডà§à¦°à¦ª করা সমà§à¦à¦¬à¥¤" @@ -5961,11 +6057,13 @@ msgid "Trim Trailing Whitespace" msgstr "শেষের হোয়াইটসà§à¦ªà§‡à¦¸ ছেà¦à¦Ÿà§‡ ফেলà§à¦¨" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "সà§à¦ªà§‡à¦¸à¦—à§à¦²à¦¿ ইনà§à¦¡à§‡à¦¨à§à¦Ÿà§‡ রূপানà§à¦¤à¦° করà§à¦¨" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "ইনà§à¦¡à§‡à¦¨à§à¦Ÿà¦—à§à¦²à¦¿ টà§à¦¯à¦¾à¦¬à§‡ রূপানà§à¦¤à¦° করà§à¦¨" #: editor/plugins/script_text_editor.cpp @@ -5982,22 +6080,14 @@ msgid "Remove All Breakpoints" msgstr "সকল বিরতি-বিনà§à¦¦à§-সমূহ অপসারণ করà§à¦¨" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "পরের বিরতিবিনà§à¦¦à§à¦¤à§‡ যান" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "পূরà§à¦¬à§‡à¦° বিরতিবিনà§à¦¦à§à¦¤à§‡ যান" - -#: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Uppercase" -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." +msgid "Go to Next Breakpoint" +msgstr "পরের বিরতিবিনà§à¦¦à§à¦¤à§‡ যান" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Lowercase" -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." +msgid "Go to Previous Breakpoint" +msgstr "পূরà§à¦¬à§‡à¦° বিরতিবিনà§à¦¦à§à¦¤à§‡ যান" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -6005,15 +6095,17 @@ msgstr "পূরà§à¦¬à§‡ খà§à¦à¦œà§à¦¨" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "দà§à¦°à§à¦¤ ফাইলসমূহ ফিলà§à¦Ÿà¦¾à¦° করà§à¦¨..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "ফাংশনে যান..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "লাইনে যান..." #: editor/plugins/script_text_editor.cpp @@ -6112,6 +6204,14 @@ msgid "Animation Key Inserted." msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° চাবি সনà§à¦¨à¦¿à¦¬à§‡à¦¶à¦¿à¦¤ হয়েছে।" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "পিচà§â€Œ" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "অবজেকà§à¦Ÿ আà¦à¦•া হয়েছে" @@ -6291,6 +6391,11 @@ msgid "Freelook Speed Modifier" msgstr "ফà§à¦°à¦¿ লà§à¦• সà§à¦ªà¦¿à¦¡ মডিফায়ার" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "তথà§à¦¯ দেখà§à¦¨" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm à¦à¦° সংলাপ" @@ -6399,11 +6504,6 @@ msgstr "সà§à¦•েল/মাপ:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Snap To Floor" -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª মোড:" - -#: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" msgstr "পূরà§à¦£-পরà§à¦¦à¦¾ অদলবদল/টগল করà§à¦¨" @@ -6822,6 +6922,11 @@ msgid "Fix Invalid Tiles" msgstr "অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ নাম।" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে কেনà§à¦¦à§à¦°à§€à¦à§‚ত করà§à¦¨" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "TileMap আà¦à¦•à§à¦¨" @@ -6871,24 +6976,31 @@ msgstr "টাইল পছনà§à¦¦ করà§à¦¨" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "০ ডিগà§à¦°à¦¿ ঘোরানà§" +#, fuzzy +msgid "Rotate left" +msgstr "ঘূরà§à¦£à¦¾à§Ÿà¦¨ মোড" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "ডানে সরান" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "৯০ ডিগà§à¦°à¦¿ ঘোরানà§" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "১৮০ ডিগà§à¦°à¦¿ ঘোরানà§" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "২à§à§¦ ডিগà§à¦°à¦¿ ঘোরানà§â€Œ" +#, fuzzy +msgid "Clear transform" +msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦°" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6919,7 +7031,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6935,7 +7047,7 @@ msgid "Merge from scene?" msgstr "দৃশà§à¦¯ হতে à¦à¦•তà§à¦°à¦¿à¦¤ করবেন?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -7023,6 +7135,16 @@ msgstr "" #: editor/project_export.cpp #, fuzzy +msgid "Release" +msgstr "à¦à¦‡à¦®à¦¾à¦¤à§à¦° অবà§à¦¯à¦¾à¦¹à¦¿à¦¤/মà§à¦•à§à¦¤" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡" + +#: editor/project_export.cpp +#, fuzzy msgid "Presets" msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ..." @@ -7031,6 +7153,11 @@ msgid "Add..." msgstr "সংযোগ..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° পà§à¦°à¦¿à¦¸à§‡à¦Ÿ:" + +#: editor/project_export.cpp msgid "Resources" msgstr "রিসোরà§à¦¸à¦¸à¦®à§‚হ" @@ -7102,6 +7229,16 @@ msgid "Export PCK/Zip" msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ মোড:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকারি à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦—à§à¦²à¦¿ খà§à¦à¦œà§‡ পাওয়া যাচà§à¦›à§‡ না:" @@ -7596,10 +7733,6 @@ msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° সেটিংস (engine.cfg)" msgid "General" msgstr "জেনেরাল" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "ওà¦à¦¾à¦°à¦°à¦¾à¦‡à¦¡..." @@ -7738,10 +7871,6 @@ msgstr "à¦à¦•টি নোড নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨" msgid "Bit %d, val %d." msgstr "বিট %d, মান %d।" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "গà§à¦£à¦¾à¦—à§à¦£/বৈশিষà§à¦Ÿà§à¦¯ বাছাই করà§à¦¨" @@ -7833,7 +7962,7 @@ msgid "Step" msgstr "পদকà§à¦·à§‡à¦ª:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7842,7 +7971,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7887,7 +8016,7 @@ msgstr "বড় হাতের অকà§à¦·à¦°" msgid "Reset" msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¨/সংকোচন অপসারণ করà§à¦¨ (রিসেট জà§à¦®à§)" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "সমসà§à¦¯à¦¾/à¦à§à¦²" @@ -7948,6 +8077,10 @@ msgid "Instance Scene(s)" msgstr "দৃশà§à¦¯(সমূহ) ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "শীষà§à¦¯ নোড ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ পরিসà§à¦•ার করà§à¦¨" @@ -7984,6 +8117,12 @@ msgid "Save New Scene As..." msgstr "নতà§à¦¨ দৃশà§à¦¯ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¯à§‹à¦—à§à¦¯ অংশীদারীসমূহ" @@ -8062,6 +8201,11 @@ msgid "Clear Inheritance" msgstr "উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারতà§à¦¬ পরিসà§à¦•ার করà§à¦¨" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "নোড(সমূহ) অপসারণ করà§à¦¨" @@ -8070,15 +8214,16 @@ msgid "Add Child Node" msgstr "শীষà§à¦¯ নোড তৈরি করà§à¦¨" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "শীষà§à¦¯ নোড ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "ধরণ পরিবরà§à¦¤à¦¨ করà§à¦¨" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "অরà§à¦¥à¦ªà§‚রà§à¦¨!" @@ -8249,6 +8394,11 @@ msgid "Path is empty" msgstr "পথটি খালি" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "সংরকà§à¦·à¦£à§‡à¦° পথটি খালি!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "পথটি সà§à¦¥à¦¾à¦¨à§€à§Ÿ নয়" @@ -8348,20 +8498,9 @@ msgid "Bytes:" msgstr "বাইটস:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "সতরà§à¦•তা" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "সমসà§à¦¯à¦¾:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "উৎস:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "ফাংশন:" +#, fuzzy +msgid "Stack Trace" +msgstr "ফà§à¦°à§‡à¦®à¦¸à¦®à§‚হ সà§à¦¤à§‚প করà§à¦¨" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8393,18 +8532,6 @@ msgid "Stack Frames" msgstr "ফà§à¦°à§‡à¦®à¦¸à¦®à§‚হ সà§à¦¤à§‚প করà§à¦¨" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "চলক/à¦à§‡à¦°à¦¿à§Ÿà§‡à¦¬à¦²" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "সমসà§à¦¯à¦¾à¦¸à¦®à§‚হ:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "পদাঙà§à¦• সà§à¦¤à§‚প করà§à¦¨ (পà§à¦°à¦¯à§‹à¦œà§à¦¯ হলে):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦¾à¦°" @@ -8862,13 +8989,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "সিদà§à¦§/বেকà§â€Œ!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -#, fuzzy -msgid "Bake the navigation mesh." -msgstr "Navigation Mesh তৈরি করà§à¦¨" +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp #, fuzzy @@ -9178,6 +9300,10 @@ msgid "Base Type:" msgstr "তলের ধরণ (Base Type):" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "সদসà§à¦¯à¦—ণ (Members):" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "উপসà§à¦¥à¦¿à¦¤ নোডসমূহ:" @@ -9280,11 +9406,11 @@ msgid "Search VisualScript" msgstr "Shader Graph Node অপসারণ করà§à¦¨" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "মান পান (Get)" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9381,6 +9507,12 @@ msgstr "" "সফলà§à¦à¦¾à¦¬à§‡ কাজ করতে CollisionShape2D à¦à¦° à¦à¦•টি আকৃতি পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤ অনà§à¦—à§à¦°à¦¹ করে তার জনà§à¦¯ " "à¦à¦•টি আকৃতি তৈরি করà§à¦¨!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9426,6 +9558,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D à¦à¦•মাতà§à¦° Path2D à¦à¦° অংশ হিসেবে নিরà§à¦§à¦¾à¦°à¦¨ করালেই কাজ করে।" @@ -9556,6 +9694,16 @@ msgstr "" "সফলà§à¦à¦¾à¦¬à§‡ কাজ করতে CollisionShape à¦à¦° à¦à¦•টি আকৃতি পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤ অনà§à¦—à§à¦°à¦¹ করে তার জনà§à¦¯ à¦à¦•টি " "আকৃতি তৈরি করà§à¦¨!" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp #, fuzzy msgid "Plotting Meshes" @@ -9580,6 +9728,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D à¦à¦•মাতà§à¦° Path2D à¦à¦° অংশ হিসেবে নিরà§à¦§à¦¾à¦°à¦¨ করালেই কাজ করে।" + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D à¦à¦•মাতà§à¦° Path2D à¦à¦° অংশ হিসেবে নিরà§à¦§à¦¾à¦°à¦¨ করালেই কাজ করে।" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9614,7 +9782,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9692,11 +9860,6 @@ msgstr "সতরà§à¦•তা!" msgid "Please Confirm..." msgstr "অনà§à¦—à§à¦°à¦¹ করে নিশà§à¦šà¦¿à¦¤ করà§à¦¨..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "মেথড/পদà§à¦§à¦¤à¦¿ বাছাই করà§à¦¨" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9707,6 +9870,10 @@ msgstr "" "বà§à¦¯à¦¬à¦¹à¦¾à¦° না করেন। যদিও সমà§à¦ªà¦¾à¦¦à¦¨à§‡à¦° কাজে তা গà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯, কিনà§à¦¤à§ চালনার সময় তা লà§à¦•িয়ে " "যাবে।" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9779,6 +9946,129 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "জà§à¦®à§ (%):" + +#~ msgid "Class List:" +#~ msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° তালিকা:" + +#~ msgid "Search Classes" +#~ msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" + +#, fuzzy +#~ msgid "Public Methods" +#~ msgstr "সরà§à¦¬à¦œà¦¨à§€à¦¨/পà§à¦°à¦•াশà§à¦¯ মেথডসমূহ:" + +#~ msgid "Public Methods:" +#~ msgstr "সরà§à¦¬à¦œà¦¨à§€à¦¨/পà§à¦°à¦•াশà§à¦¯ মেথডসমূহ:" + +#, fuzzy +#~ msgid "GUI Theme Items" +#~ msgstr "GUI থিম à¦à¦° বসà§à¦¤à§à¦¸à¦®à§‚হ:" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI থিম à¦à¦° বসà§à¦¤à§à¦¸à¦®à§‚হ:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿:" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "ফোলà§à¦¡à¦¾à¦°à§‡à¦° অবসà§à¦¥à¦¾ ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼ হিসেবে অদলবদল/টগল করà§à¦¨" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "à¦à¦‡-মà§à¦¹à§‚রà§à¦¤à§‡ সমà§à¦ªà¦¾à¦¦à¦¿à¦¤ রিসোরà§à¦¸à¦Ÿà¦¿ সংরকà§à¦·à¦£ করà§à¦¨à¥¤" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "সমà§à¦ªà§‚রà§à¦£ শবà§à¦¦" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "অকà§à¦·à¦°à§‡à¦° মাতà§à¦°à¦¾ (বড়/ছোট-হাতের) মিল করà§à¦¨" + +#, fuzzy +#~ msgid "Filter: " +#~ msgstr "ফিলà§à¦Ÿà¦¾à¦°:" + +#~ msgid "Ok" +#~ msgstr "ঠিক আছে" + +#, fuzzy +#~ msgid "Show In File System" +#~ msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" + +#~ msgid "Search the class hierarchy." +#~ msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° কà§à¦°à¦®à§‡à¦¾à¦šà§à¦šà¦¤à¦¾ খà§à¦à¦œà§à¦¨à¥¤" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° তাদের অধিকারী দৃশà§à¦¯ লোড করা হলেই সমà§à¦ªà¦¾à¦¦à¦¨ করা যাবে" + +#, fuzzy +#~ msgid "Convert To Uppercase" +#~ msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª মোড:" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "০ ডিগà§à¦°à¦¿ ঘোরানà§" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "৯০ ডিগà§à¦°à¦¿ ঘোরানà§" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "১৮০ ডিগà§à¦°à¦¿ ঘোরানà§" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "২à§à§¦ ডিগà§à¦°à¦¿ ঘোরানà§â€Œ" + +#~ msgid "Warning" +#~ msgstr "সতরà§à¦•তা" + +#~ msgid "Error:" +#~ msgstr "সমসà§à¦¯à¦¾:" + +#~ msgid "Source:" +#~ msgstr "উৎস:" + +#~ msgid "Function:" +#~ msgstr "ফাংশন:" + +#~ msgid "Variable" +#~ msgstr "চলক/à¦à§‡à¦°à¦¿à§Ÿà§‡à¦¬à¦²" + +#~ msgid "Errors:" +#~ msgstr "সমসà§à¦¯à¦¾à¦¸à¦®à§‚হ:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "পদাঙà§à¦• সà§à¦¤à§‚প করà§à¦¨ (পà§à¦°à¦¯à§‹à¦œà§à¦¯ হলে):" + +#~ msgid "Bake!" +#~ msgstr "সিদà§à¦§/বেকà§â€Œ!" + +#, fuzzy +#~ msgid "Bake the navigation mesh." +#~ msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#~ msgid "Get" +#~ msgstr "মান পান (Get)" + #~ msgid "Change Scalar Constant" #~ msgstr "সà§à¦•েলার ধà§à¦°à§à¦¬à¦• পরিবরà§à¦¤à¦¨ করà§à¦¨" @@ -10193,10 +10483,6 @@ msgstr "" #~ msgid "Clear Emitter" #~ msgstr "Emitter পরিসà§à¦•ার করà§à¦¨" -#, fuzzy -#~ msgid "Fold Line" -#~ msgstr "লাইন-ঠযান" - #~ msgid " " #~ msgstr " " @@ -10281,9 +10567,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€à¦° উপ-গঠনবিনà§à¦¯à¦¾à¦¸ (subtexture) সংরকà§à¦·à¦£ অসমরà§à¦¥ হয়েছে:" -#~ msgid "Exporting for %s" -#~ msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡" - #~ msgid "Setting Up..." #~ msgstr "সà§à¦¥à¦¾à¦ªà¦¿à¦¤/বিনà§à¦¯à¦¸à§à¦¤ হচà§à¦›à§‡..." @@ -10382,9 +10665,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ফনà§à¦Ÿà§‡à¦° উৎস:" -#~ msgid "Source Font Size:" -#~ msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" - #~ msgid "Dest Resource:" #~ msgstr "রিসোরà§à¦¸à§‡à¦° গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨:" @@ -10463,9 +10743,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "আরমà§à¦(সমূহ)" -#~ msgid "Filters" -#~ msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" - #~ msgid "Source path is empty." #~ msgstr "উৎসের পথটি খালি।" @@ -10739,15 +11016,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "সà§à¦Ÿà§‡à¦°à¦¿à¦“" -#~ msgid "Pitch" -#~ msgstr "পিচà§â€Œ" - #~ msgid "Window" #~ msgstr "উইনà§à¦¡à§‹" -#~ msgid "Move Right" -#~ msgstr "ডানে সরান" - #~ msgid "Scaling to %s%%." #~ msgstr "%s%% -ঠমাপিত হচà§à¦›à§‡à¥¤" @@ -10812,9 +11083,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "à¦à¦‡à¦®à¦¾à¦¤à§à¦° চাপিত" -#~ msgid "just released" -#~ msgstr "à¦à¦‡à¦®à¦¾à¦¤à§à¦° অবà§à¦¯à¦¾à¦¹à¦¿à¦¤/মà§à¦•à§à¦¤" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " @@ -11145,9 +11413,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ পà§à¦°à¦•লà§à¦ª" -#~ msgid "Export Preset:" -#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° পà§à¦°à¦¿à¦¸à§‡à¦Ÿ:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance কোনো BakedLight রিসোরà§à¦¸ ধারণ করে না।" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 075b112224..c0ec1493a3 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -5,10 +5,11 @@ # BennyBeat <bennybeat@gmail.com>, 2017. # Javier Ocampos <xavier.ocampos@gmail.com>, 2018. # Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. +# Rubén Moreno <ruben.moreno.romero@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-26 12:25+0000\n" +"PO-Revision-Date: 2018-10-19 06:24+0000\n" "Last-Translator: Roger Blanco Ribera <roger.blancoribera@gmail.com>\n" "Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" "godot/ca/>\n" @@ -16,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.2.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -24,41 +25,38 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "L'argument per a convert() no és và lid, utilitzeu constants TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Manquen bytes per a descodificar els bytes, o el format no és và lid." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "L'entrada %i en l'expressió no és và lida (no transmesa)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "No es pot emprar \"self\" car l'instà ncia és nul·la (no transmesa)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "El nom de la propietat Ãndex '%s' del node %s no és và lid ." +msgstr "Els operands de %s, %s i %s no són và lids." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "El nom de la propietat Ãndex '%s' del node %s no és và lid ." +msgstr "L'Ãndex del tipus %s no és và lid per al tipus base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "L'Ãndex anomenat '%s' no és và lid per al tipus base %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argument no và lid del tipus: " +msgstr "Els arguments per a construir '%s' no són và lids" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "En la crida a '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -67,27 +65,23 @@ msgstr "Allibera" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Equilibrat" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Replica en l'eix X" +msgstr "Emmiralla" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Insereix una clau" +msgstr "Insereix una Clau aquÃ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplica la Selecció" +msgstr "Duplica les Claus seleccionades" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Elimina Seleccionats" +msgstr "Elimina les Claus seleccionades" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -118,46 +112,40 @@ msgid "Anim Change Call" msgstr "Modifica la Crida" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Propietat:" +msgstr "Pista de Propietats" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Tipus de Transformació" +msgstr "Pista de Transformació 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Pista de Crida de Mètodes" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Pista de Corbes Bezier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Pista de reproducció d'Àudio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Aturar la reproducció de l'animació. (S)" +msgstr "Pista de reproducció d'Animacions" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" msgstr "Afegeix una Pista" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Durada de l'Animació (en segons)." +msgstr "Durada de l'Animació (en segons)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Zoom de l'animació." +msgstr "Bucle de l'Animació" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -165,42 +153,36 @@ msgid "Functions:" msgstr "Funcions:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Receptor d'Àudio" +msgstr "Talls d'Àudio:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Clips" +msgstr "Talls d'Animació:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Mode Lliure de Distraccions." +msgstr "Activa/Desactiva la Pista." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Mode d'Actualització (Configuració d'aquesta propietat)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Node d'Animació" +msgstr "Mode d'Interpolació" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Mode de Bucle Continu (Interpola el final amb l'inici del bucle)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Treu la pista seleccionada." +msgstr "Treu la Pista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Durada de la fosa (s):" +msgstr "Temps (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -215,13 +197,12 @@ msgid "Trigger" msgstr "Activador" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "CaracterÃstiques" +msgstr "Captura" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "El de més a prop" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -230,15 +211,15 @@ msgstr "Lineal" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cúbic" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Limita la Interpolació del bucle" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Embolcalla la interpolació" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -246,14 +227,12 @@ msgid "Insert Key" msgstr "Insereix una clau" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplica els Nodes" +msgstr "Duplica les Claus" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Elimina els Nodes" +msgstr "Elimina les Claus" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -284,6 +263,7 @@ msgstr "Insereix una Animació" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" +"Un AnimationPlayer no pot animar-se a si mateix, només altres reproductors." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -300,6 +280,7 @@ msgstr "Insereix una Clau" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"Les pistes de Transformació només s'apliquen a nodes del tipus Espacial." #: editor/animation_track_editor.cpp msgid "" @@ -308,44 +289,49 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Les pistes de à udio només poden apuntar a nodes del tipus:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Les pistes d'Animació només poden apuntar a nodes AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Un reproductor d'Animacions no pot animar-se a si mateix, només altres " +"reproductors." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "No es pot afegir una nova pista sense cap arrel" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "El camà de la Pista no és và lid i per tant no s'hi poden afegir claus." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "No s'hi pot inserir cap Clau. La pista no és del tipus \"Spatial\"" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" +"No s'hi pot afegit cap clau de mètode. El camà de la pista no és và lid." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "Variable Get no trobada en l'Script: " +msgstr "No s'ha trobat el mètode en l'objecte: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Mou les Claus" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "El porta-retalls és buit!" +msgstr "El porta-retalls és buit" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -355,24 +341,23 @@ msgstr "Escala les Claus" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Aquesta opció no funciona per l'edició de Bézier, ja que és una pista única." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Mostra les pistes dels nodes seleccionats en l'arbre." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Agrupa les pistes per node o mostra-les en una llista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Pas (s):" +msgstr "Pas (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "L'arbre d'animació és và lid." +msgstr "Valor del pas d'Animació." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -384,19 +369,16 @@ msgid "Edit" msgstr "Edita" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Arbre d'Animació" +msgstr "Propietats de l'Animació." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Copia els Parà metres" +msgstr "Còpia les Pistes" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Enganxa els Parà metres" +msgstr "Enganxa les Pistes" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -406,8 +388,7 @@ msgstr "Escala la Selecció" msgid "Scale From Cursor" msgstr "Escala amb el Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplica la Selecció" @@ -416,16 +397,17 @@ msgid "Duplicate Transposed" msgstr "Duplica'l Transposat" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Elimina Seleccionats" +msgstr "Elimina la Selecció" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Vés al Pas Següent" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Vés al Pas Anterior" #: editor/animation_track_editor.cpp @@ -438,11 +420,11 @@ msgstr "Poleix l'Animació" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Tria el node per animar:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Fés servir Corbes Bézier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -490,7 +472,7 @@ msgstr "Relació d'Escala:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Tria les Pistes per copiar:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -528,11 +510,11 @@ msgstr "Cap Coincidència" msgid "Replaced %d occurrence(s)." msgstr "%d ocurrència/es reemplaçades." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Distingeix entre majúscules i minúscules" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Paraules senceres" @@ -561,16 +543,15 @@ msgid "Reset Zoom" msgstr "Reinicia el Zoom" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Avisos" +msgstr "Avisos:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Apropa" +msgid "Font Size:" +msgstr "Mida de la lletra:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "LÃnia:" @@ -603,6 +584,7 @@ msgstr "Afegeix" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -659,9 +641,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconnecta '%s' de '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Desconnecta '%s' de '%s'" +msgstr "Desconnecta-ho tot del senyal: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -673,19 +654,17 @@ msgid "Disconnect" msgstr "Desconnecta" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Connectant Senyal:" +msgstr "Connecta el Senyal: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Error en la connexió" +msgstr "Edita la Connexió: " #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Esteu segur que voleu executar més d'un projecte de cop?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Esteu segur que voleu eliminar totes les connexions d'aquest senyal?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -693,22 +672,19 @@ msgstr "Senyals" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Esteu segur que voleu eliminar totes les connexions d'aquest senyal?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Desconnecta" +msgstr "Desconnecta-ho Tot" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Edita" +msgstr "Edita..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Mètodes" +msgstr "Vés al Mètode" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -739,17 +715,14 @@ msgstr "Recents:" msgid "Search:" msgstr "Cerca:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Coincidències:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descripció:" @@ -810,9 +783,10 @@ msgid "Search Replacement Resource:" msgstr "Cerca Recurs Reemplaçant:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -845,7 +819,8 @@ msgid "Error loading:" msgstr "Error en carregar:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "No es pot carregar l'escena. Manquen dependències:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -904,14 +879,6 @@ msgstr "Modifica Valor del Diccionari" msgid "Thanks from the Godot community!" msgstr "Grà cies de la part de la Comunitat del Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "D'acord" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Col·laboradors de Godot Engine" @@ -1087,8 +1054,7 @@ msgid "Bus options" msgstr "Opcions del Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplica" @@ -1261,8 +1227,9 @@ msgstr "CamÃ:" msgid "Node Name:" msgstr "Nom del node:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nom" @@ -1332,12 +1299,17 @@ msgid "Template file not found:" msgstr "No s'ha trobat la Plantilla:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Selecciona el Directori Actual" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Fitxer Existent, Voleu sobreescriure'l?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Selecciona el Directori Actual" +#, fuzzy +msgid "Select This Folder" +msgstr "Selecciona aquest Directori" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1345,12 +1317,13 @@ msgstr "Copia CamÃ" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Mostra en el Gestor de Fitxers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Mostra en el Gestor de Fitxers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1386,7 +1359,8 @@ msgid "Open a File or Directory" msgstr "Obre un Fitxer o Directori" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Desa" @@ -1444,8 +1418,7 @@ msgstr "Directoris i Fitxers:" msgid "Preview:" msgstr "Vista prèvia:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Fitxer:" @@ -1461,24 +1434,11 @@ msgstr "Escaneja Fonts" msgid "(Re)Importing Assets" msgstr "(Re)Important Recursos" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Cerca Ajuda" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Llista de Classes:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Cerca Classes" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Dalt" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Classe:" @@ -1495,28 +1455,31 @@ msgid "Brief Description:" msgstr "Descripció breu:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Membres" +msgid "Properties" +msgstr "Propietats" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Membres:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Propietats:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Mètodes Públics" +msgid "Methods" +msgstr "Mètodes" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Mètodes públics:" +#, fuzzy +msgid "Methods:" +msgstr "Mètodes" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Elements del Tema de la GUI" +#, fuzzy +msgid "Theme Properties" +msgstr "Propietats" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Elements del Tema de la InterfÃcie :" +#, fuzzy +msgid "Theme Properties:" +msgstr "Propietats:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1543,10 +1506,16 @@ msgid "Constants:" msgstr "Constants:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Descripció" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Descripció:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Tutorials en lÃnia:" @@ -1561,11 +1530,13 @@ msgstr "" "$url2]sol·licitant-lo[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Propietats" +#, fuzzy +msgid "Property Descriptions" +msgstr "Descripció de la Propietat:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Descripció de la Propietat:" #: editor/editor_help.cpp @@ -1577,11 +1548,13 @@ msgstr "" "$color][url=$url] totaportant-ne una[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Mètodes" +#, fuzzy +msgid "Method Descriptions" +msgstr "Descripció del mètode:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Descripció del mètode:" #: editor/editor_help.cpp @@ -1592,18 +1565,67 @@ msgstr "" "Aquest mètode no disposa de cap descripció. Podeu contribuir [color=$color]" "[url=$url] tot aportant-ne una[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Cerca Ajuda" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Mostra les Normals" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Classes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Mètodes" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Signals Only" +msgstr "Senyals" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Constants" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Propietats" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Propietats" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Membres" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Classe:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Propietat:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Estableix" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Estableix Múltiples:" #: editor/editor_log.cpp msgid "Output:" @@ -1631,6 +1653,11 @@ msgstr "L'exportació del projecte ha fallat amb el codi d'error %d." msgid "Error saving resource!" msgstr "Error en desar recurs!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "D'acord" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Anomena i Desa el Recurs..." @@ -1649,7 +1676,7 @@ msgstr "Error en desar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "No es pot obrir '%s'. Comproveu si el fitxer s'ha mogut o eliminat." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1685,12 +1712,22 @@ msgstr "Aquesta operació no es pot fer sense cap arrel d'arbre." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "No s'ha pogut desar l'escena. Probablement, no s'han pogut establir totes " "les dependències (instà ncies o herències)." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "No s'ha pogut carregar MeshLibrary per combinar les dades!!" @@ -1949,6 +1986,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Error carregant l'Script complement des del camÃ: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"No s'ha carregat l'Script d'addon des del camÃ: L'Script '% s' no és en el " +"mode d'Eina." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1998,15 +2044,19 @@ msgstr "Elimina Disseny" msgid "Default" msgstr "Predeterminat" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "Mostra'l en el Sistema de Fitxers" + +#: editor/editor_node.cpp msgid "Play This Scene" -msgstr "Reprodueix Escena" +msgstr "Reprodueix aquesta Escena" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Tanca les altres pestanyes" +msgstr "Tanca la Pestanya" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2081,7 +2131,8 @@ msgid "Save Scene" msgstr "Desa Escena" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Desa Totes les Escenes" #: editor/editor_node.cpp @@ -2110,7 +2161,7 @@ msgid "Undo" msgstr "Desfés" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refés" @@ -2139,15 +2190,15 @@ msgid "Tools" msgstr "Eines" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Obre el Gestor de Projectes?" +msgstr "Obre el directori de Dades del Projecte" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Surt a la Llista de Projectes" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Depurar" @@ -2256,18 +2307,16 @@ msgid "Toggle Fullscreen" msgstr "Mode Pantalla Completa" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Configuració de l'Editor" +msgstr "Obre el directori de Dades/Configuració de l'Editor" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Obre el directori de Dades de l'Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Configuració de l'Editor" +msgstr "Obre el directori de Configuració de l'Editor" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2277,10 +2326,6 @@ msgstr "Gestor de Plantilles d'Exportació" msgid "Help" msgstr "Ajuda" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Classes" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2351,13 +2396,12 @@ msgstr "Reprodueix Escena Personalitzada" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Canviar el controlador de vÃdeo requereix reiniciar l'editor." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Desa i ReImporta" +msgstr "Desa i Reinicia" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2375,27 +2419,26 @@ msgstr "Actualitza Canvis" msgid "Disable Update Spinner" msgstr "Desactiva l'Indicador d'Actualització" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspector" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importa" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Sistema de Fitxers" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspector" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Expandir tot" +msgstr "Expandeix el Quadre inferior" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2474,9 +2517,8 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Edita PolÃgon" +msgstr "Edita Connector" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2500,15 +2542,13 @@ msgid "Status:" msgstr "Estat:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Edita" +msgstr "Edita:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Inicia!" +msgstr "Inicia" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2530,7 +2570,7 @@ msgstr "% del Fotograma" msgid "Physics Frame %" msgstr "Fotograma de FÃsica %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Temps:" @@ -2554,27 +2594,39 @@ msgstr "Temps" msgid "Calls" msgstr "Crides" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Activat" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Capa" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, valor %d." +msgstr "Bit %d, valor %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Buit]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Assigna" +msgstr "Assigna..." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2593,10 +2645,6 @@ msgstr "Nou %s" msgid "Make Unique" msgstr "Fes-lo Únic" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Mostra'l en el Sistema de Fitxers" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2605,7 +2653,8 @@ msgstr "Mostra'l en el Sistema de Fitxers" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Enganxa" @@ -2618,9 +2667,8 @@ msgstr "Converteix a %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Obre en l'Editor" +msgstr "Obre l'Editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -2628,25 +2676,23 @@ msgstr "El Node seleccionat no és una Vista!" #: editor/editor_properties_array_dict.cpp msgid "Size: " -msgstr "" +msgstr "Mida: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Pà gina: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Nou nom:" +msgstr "Nova Clau:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Nou nom:" +msgstr "Nou Valor:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Afegeix una Parella de Clau/Valor" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2739,9 +2785,8 @@ msgid "Can't open export templates zip." msgstr "No s'ha pogut obrir el zip amb les plantilles d'exportació." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "El format de version.txt dins de les plantilles no és và lid." +msgstr "El format de version.txt no és và lid dins de les plantilles: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2806,6 +2851,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"No s'han pogut instal·lar les plantilles. Els fitxers problemà tics es troben " +"a '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2886,9 +2933,8 @@ msgid "Download Templates" msgstr "Baixa plantilles" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Selecciona una rèplica: " +msgstr "Selecciona un mirror de la llista: (Maj+Clic: Obre en el Navegador)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2897,18 +2943,21 @@ msgstr "" "tipus de fitxers!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favorits:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "No es pot accedir a '%s'. No es troba en el sistema de fitxers!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Visualitza en una graella de miniatures" +msgstr "Visualitza en una graella de miniatures." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Visualitza en una llista" +msgstr "Mostra'ls en una llista." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2934,7 +2983,7 @@ msgstr "Error en duplicar:" msgid "Unable to update dependencies:" msgstr "No s'han pogut actualitzar les dependències:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Manca Nom" @@ -2971,22 +3020,6 @@ msgid "Duplicating folder:" msgstr "S'està duplicant el directori:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Expandir tot" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Col·lapsar tot" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Reanomena..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Mou cap a..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Obre Escenes" @@ -2995,6 +3028,16 @@ msgid "Instance" msgstr "Instà ncia" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favorits:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Treu del Grup" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Edita Dependències..." @@ -3002,19 +3045,35 @@ msgstr "Edita Dependències..." msgid "View Owners..." msgstr "Mostra Propietaris..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Reanomena..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplica..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Mou cap a..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Script Nou" +msgstr "Script Nou..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Anomena i Desa el Recurs..." +msgstr "Recurs Nou..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Expandir tot" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Col·lapsar tot" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3037,45 +3096,34 @@ msgstr "ReAnalitza Sistema de Fitxers" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Modifica l'estat del directori com a Favorit" +msgid "Toggle split mode" +msgstr "Commuta Mode" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Selecciona la sub-tessel·la en edició." +msgid "Search files" +msgstr "Cerca Fitxers" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instancia les escenes seleccionades com a filles del node seleccionat." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Cerca Classes" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "Analitzant Fitxers..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Mou" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Ja hi ha un directori amb el mateix nom en aquest camÃ." +msgstr "Ja hi existex un fitxer o directori amb aquest nom." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Sobreescriu" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3083,32 +3131,23 @@ msgstr "Crea un Script" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" -msgstr "Cerca Tessel·la" +msgid "Find in Files" +msgstr "Cerca en els fitxers" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "Troba" +msgid "Find:" +msgstr "Cerca: " #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Paraules senceres" +msgid "Folder:" +msgstr "Directori : " #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Distingeix entre majúscules i minúscules" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Filtre:" +msgid "Filters:" +msgstr "Filtres" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3124,52 +3163,48 @@ msgid "Cancel" msgstr "Cancel·la" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Cerca: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Reemplaça" +msgstr "Reemplaça: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Reemplaça-hoTot" +msgstr "Reemplaça-ho Tot (no es pot desfer)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Desant..." +msgstr "Cercant..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Cerca Text" +msgstr "Cerca completa" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ERROR: Ja existeix aquest nom d'Animació!" +msgstr "Aquest grup ja existeix." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Nom no và lid." +msgstr "El Nom del grup no és và lid." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grups" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Afegeix al Grup" +msgstr "Els nodes no es troben en el Grup" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Filtre els Nodes" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Afegeix al Grup" +msgstr "Nodes del Grup" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3180,9 +3215,8 @@ msgid "Remove from Group" msgstr "Treu del Grup" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Grups" +msgstr "Gestiona Grups" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3289,17 +3323,14 @@ msgstr "ReImportar" msgid "Failed to load resource." msgstr "No s'ha pogut carregar el recurs." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "D'acord" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Expandeix totes les propietats" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Col·lapsa totes les propietats" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3316,9 +3347,8 @@ msgid "Paste Params" msgstr "Enganxa els Parà metres" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "El porta-retalls de Recursos és buit!" +msgstr "Edita el Porta-retalls de Recursos" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3361,9 +3391,8 @@ msgid "Object properties." msgstr "Propietats de l'objecte." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtre els Nodes" +msgstr "Filtra les propietats" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3378,37 +3407,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Seleccioneu un Node per editar Senyals i Grups." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Edita PolÃgon" +msgstr "Edita un Connector" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Crea una solució en C#" +msgstr "Crea un Connector" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Connectors" +msgstr "Nom del Connector:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Subcarpeta:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Llengua" +msgstr "Llengua:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "L'Script és và lid" +msgstr "Nom de l'script:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Activar ara?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3467,15 +3491,16 @@ msgstr "Afegeix una Animació" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Carrega" +msgstr "Carrega..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Aquest tipus de node no es pot utilitzar. Només están autoritzats els nodes " +"arrel." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3485,66 +3510,63 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree inactiu.\n" +"Activa per permetre playback, comprova avisos de node si falla l'activació." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Estableix la posició de mescla dins de l'espai" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Selecciona i mou els punts, crea punts fent clic dret." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Elimina els Punts" +msgstr "Crea punts." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "Clic Dret: Eliminar un Punt." +msgstr "Elimina un Punt." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Mou el Punt" +msgstr "Punt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Node d'Animació" +msgstr "Obre un Node d'Animació" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "L'Acció '%s' ja existeix!" +msgstr "El triangle ja existeix" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D no pertany a cap node AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "En no haver-hi cap triangle, no es pot mesclar res." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Crea triangles connectant punts." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." -msgstr "" +msgstr "Elimina punts i triangles." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Genera automà ticament triangles de mescla (en comptes d'a mà )" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3552,6 +3574,11 @@ msgstr "" msgid "Snap" msgstr "Alinea" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Mescla:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3559,16 +3586,18 @@ msgstr "Edita Filtres" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "No es pot afegir el node de sortida a l'arbre de mescla." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." -msgstr "" +msgstr "No es pot connectar. El port és en ús o la connexió no és và lida." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"En no haver-se establert cap reproductor d'animacions, no es poden recuperar " +"els noms de les pistes." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." @@ -3935,10 +3964,6 @@ msgid "Amount:" msgstr "Quantitat:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Mescla:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Mescla 0:" @@ -4277,6 +4302,11 @@ msgstr "Modifica el elementCanvas" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Modifica el elementCanvas" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Modifica el elementCanvas" @@ -4342,6 +4372,11 @@ msgid "Rotate Mode" msgstr "Mode de Rotació" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Mode Escala (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4441,6 +4476,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Permet la selecció de nodes fills." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Mostra els Ossos" @@ -4492,6 +4532,10 @@ msgid "Show Viewport" msgstr "Mostra el Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centra la Selecció" @@ -4932,9 +4976,9 @@ msgid "Create Navigation Polygon" msgstr "Crea un PolÃgon de Navegació" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Generant AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Genera un Rectangle de Visibilitat" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4962,6 +5006,12 @@ msgstr "Esborra la Mà scara d'Emissió" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Converteix en majúscules" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "PartÃcules" @@ -5031,13 +5081,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Un material processador de tipus 'ParticlesMaterial' és obligatori." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Genera AABB" +msgid "Generating AABB" +msgstr "Generant AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Converteix en majúscules" +msgid "Generate AABB" +msgstr "Genera AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5382,22 +5431,22 @@ msgid "Paste Resource" msgstr "Enganxa el Recurs" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Obre en l'Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instà ncia:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tipus:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Obre en l'Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carrega un Recurs" @@ -5430,6 +5479,11 @@ msgstr "Error en desar TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Error - No s'ha pogut crea l'Script en el sistema de fitxers." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Error - No s'ha pogut crea l'Script en el sistema de fitxers." @@ -5531,11 +5585,8 @@ msgid "Copy Script Path" msgstr "Copia el camà de l'Script" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Mostra'l en el Sistema de Fitxers" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Anterior en l'Historial" #: editor/plugins/script_editor_plugin.cpp @@ -5606,7 +5657,8 @@ msgid "Keep Debugger Open" msgstr "Manté el Depurador Obert" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Depura amb un editor extern" #: editor/plugins/script_editor_plugin.cpp @@ -5614,10 +5666,6 @@ msgid "Open Godot online documentation" msgstr "Obre la Documentació en lÃnia" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Cerca dins la jerarquia de classes." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Cerca dins la documentació de referència." @@ -5655,21 +5703,9 @@ msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Cerca Ajuda" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Cerca Classes" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Només es poden editar els Scripts Integrats amb la seva escena associada " -"carregada" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5680,6 +5716,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Vés a la Funció..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Només s'hi poden deixar caure Recursos del sistema de fitxers." @@ -5767,11 +5808,13 @@ msgid "Trim Trailing Whitespace" msgstr "Retalla els espais en blanc al final" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Converteix la Sagnia en espais" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Converteix la Sagnia en Tabulacions" #: editor/plugins/script_text_editor.cpp @@ -5788,36 +5831,32 @@ msgid "Remove All Breakpoints" msgstr "Elimina tots els punts d'interrupció" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Vés al següent punt d'interrupció" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Vés a l'anterior punt d'interrupció" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Converteix en majúscules" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Converteix en minúscules" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Cerca l'Anterior" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrat de Fitxers..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Vés a la Funció..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Vés a la LÃnia..." #: editor/plugins/script_text_editor.cpp @@ -5914,6 +5953,15 @@ msgid "Animation Key Inserted." msgstr "S'ha insertit una Clau d'Animació." #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Pitch" +msgstr "commutador" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objectes Dibuixats" @@ -6080,6 +6128,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de la Velocitat de la Vista Lliure" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Mostra la Informació" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Dià leg XForm" @@ -6182,11 +6235,6 @@ msgid "Tool Scale" msgstr "Eina d'Escala" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Alinea-ho amb la graella" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Vista Lliure" @@ -6593,6 +6641,11 @@ msgid "Fix Invalid Tiles" msgstr "Nom no và lid." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Centra la Selecció" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "Pinta el TileMap" @@ -6639,24 +6692,31 @@ msgstr "Tria un Tessel·la" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Treu la Selecció" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Gira-ho 0 graus" +#, fuzzy +msgid "Rotate left" +msgstr "Mode de Rotació" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Gira-ho 90 graus" +#, fuzzy +msgid "Rotate right" +msgstr "Gira el PolÃgon" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Gira-ho 180 graus" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Gira-ho 270 graus" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Transforma" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6689,7 +6749,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6705,7 +6765,7 @@ msgid "Merge from scene?" msgstr "Combinar-ho a partir de l'escena?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6794,6 +6854,16 @@ 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 +#, fuzzy +msgid "Release" +msgstr "alliberat" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportació per a %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "Configuracions prestablertes" @@ -6802,6 +6872,11 @@ msgid "Add..." msgstr "Afegeix..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Exporta Projecte" + +#: editor/project_export.cpp msgid "Resources" msgstr "Recursos" @@ -6864,6 +6939,16 @@ msgid "Export PCK/Zip" msgstr "Exporta PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Mode d'Exportació:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exporta" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Manquen les plantilles d'exportació per aquesta plataforma:" @@ -7340,10 +7425,6 @@ msgstr "Configuració del Projecte (project.godot)" msgid "General" msgstr "General" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Propietat:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Substitutiu per a..." @@ -7477,10 +7558,6 @@ msgstr "Escull un Node" msgid "Bit %d, val %d." msgstr "Bit %d, valor %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Propietats:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Selecciona una Propietat" @@ -7571,7 +7648,7 @@ msgid "Step" msgstr "Pas:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7580,7 +7657,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7625,7 +7702,7 @@ msgstr "Majúscules" msgid "Reset" msgstr "Reinicia el Zoom" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Error" @@ -7686,6 +7763,10 @@ msgid "Instance Scene(s)" msgstr "Instà ncia les Escenes" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instancia una Escena Filla" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Esborra l'Script" @@ -7722,6 +7803,12 @@ msgid "Save New Scene As..." msgstr "Anomena i Desa la Nova Escena..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Fills Editables" @@ -7800,6 +7887,11 @@ msgid "Clear Inheritance" msgstr "Elimina l'Herència" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Obre la Documentació en lÃnia" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Elimina els Nodes" @@ -7808,15 +7900,16 @@ msgid "Add Child Node" msgstr "Afegeix un Node Fill" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Instancia una Escena Filla" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Modifica el Tipus" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Obre un Script" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "Entesos!" @@ -7981,6 +8074,11 @@ msgid "Path is empty" msgstr "El camà és Buit" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "El camà per desar és buit!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "El Camà no és local" @@ -8069,20 +8167,9 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "AvÃs" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Error:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Origen:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funció:" +#, fuzzy +msgid "Stack Trace" +msgstr "Fotogrames de la Pila" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8113,18 +8200,6 @@ msgid "Stack Frames" msgstr "Fotogrames de la Pila" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variable" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Errors:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Traça de la Pila (si s'escau):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Perfilador" @@ -8554,12 +8629,8 @@ msgid "End of inner exception stack trace" msgstr "Final de la traça de la pila d'excepció interna" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Calcula!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Precalcula la malla de navegació." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8842,6 +8913,10 @@ msgid "Base Type:" msgstr "Tipus Base:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Membres:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Nodes disponibles:" @@ -8945,11 +9020,11 @@ msgid "Search VisualScript" msgstr "Elimina el Node de VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Obtenir" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9045,6 +9120,12 @@ msgstr "" "S'ha de proporcionar una forma perquè *CollisionShape2D pugui funcionar. " "Creeu-li un recurs de forma (shape)!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9096,6 +9177,12 @@ msgstr "" "En Mancar un material per processar les partÃcules, no s'ha imprès cap " "Comportament." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9234,6 +9321,17 @@ msgstr "" "Cal proveir una forma perquè CollisionShape funcioni. Creeu-li un recurs de " "forma!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Res és visible perquè no s'ha assignat cap Malla a cap pas de Dibuix." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "S'està n traçant les Malles" @@ -9257,6 +9355,28 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "Res és visible perquè no s'ha assignat cap Malla a cap pas de Dibuix." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D només funciona si s'estableix com a fill d'un node Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D només funciona si s'estableix com a fill d'un node Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9297,7 +9417,7 @@ msgstr "" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9380,10 +9500,6 @@ msgstr "Ep!" msgid "Please Confirm..." msgstr "Confirmeu..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Selecciona aquest Directori" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9394,6 +9510,10 @@ msgstr "" "qualsevol de les funcions popup*(). És possible fer-les visibles mentre " "s'edita, però s'ocultaran durant l'execució." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9471,6 +9591,123 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Esteu segur que voleu eliminar totes les connexions de \"" + +#~ msgid "Class List:" +#~ msgstr "Llista de Classes:" + +#~ msgid "Search Classes" +#~ msgstr "Cerca Classes" + +#~ msgid "Public Methods" +#~ msgstr "Mètodes Públics" + +#~ msgid "Public Methods:" +#~ msgstr "Mètodes públics:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Elements del Tema de la GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Elements del Tema de la InterfÃcie :" + +#~ msgid "Property: " +#~ msgstr "Propietat: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Modifica l'estat del directori com a Favorit." + +#~ msgid "Show current scene file." +#~ msgstr "Mostra el fitxer de l'escena actual." + +#~ msgid "Enter tree-view." +#~ msgstr "Entra a la vista d'arbre." + +#~ msgid "Whole words" +#~ msgstr "Paraules senceres" + +#~ msgid "Match case" +#~ msgstr "Distingeix majúscules/minúscules" + +#~ msgid "Filter: " +#~ msgstr "Filtre: " + +#~ msgid "Ok" +#~ msgstr "D'acord" + +#~ msgid "Show In File System" +#~ msgstr "Mostra'l en el Sistema de Fitxers" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Cerca dins la jerarquia de classes." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Cerca Classes" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Només es poden editar els Scripts Integrats amb la seva escena associada " +#~ "carregada" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Converteix en majúscules" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Converteix en minúscules" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Alinea-ho amb la graella" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Gira-ho 0 graus" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Gira-ho 90 graus" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Gira-ho 180 graus" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Gira-ho 270 graus" + +#~ msgid "Warning" +#~ msgstr "AvÃs" + +#~ msgid "Error:" +#~ msgstr "Error:" + +#~ msgid "Source:" +#~ msgstr "Origen:" + +#~ msgid "Function:" +#~ msgstr "Funció:" + +#~ msgid "Variable" +#~ msgstr "Variable" + +#~ msgid "Errors:" +#~ msgstr "Errors:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Traça de la Pila (si s'escau):" + +#~ msgid "Bake!" +#~ msgstr "Calcula!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Precalcula la malla de navegació." + +#~ msgid "Get" +#~ msgstr "Obtenir" + #~ msgid "Change Scalar Constant" #~ msgstr "Modificar una constant escalar" @@ -9785,9 +10022,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "Seqüència" -#~ msgid "Switch" -#~ msgstr "commutador" - #~ msgid "Iterator" #~ msgstr "Iterador" @@ -9952,9 +10186,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "No s'ha pogut desar la subtextura de l'atles:" -#~ msgid "Exporting for %s" -#~ msgstr "Exportació per a %s" - #~ msgid "Setting Up..." #~ msgstr "Instal·lant..." @@ -10056,9 +10287,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Lletra:" -#~ msgid "Source Font Size:" -#~ msgstr "Mida de la lletra:" - #~ msgid "Dest Resource:" #~ msgstr "Recurs Objectiu:" @@ -10138,9 +10366,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Inici/s" -#~ msgid "Filters" -#~ msgstr "Filtres" - #~ msgid "Source path is empty." #~ msgstr "El camà d'origen és buit." @@ -10251,9 +10476,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "premut" -#~ msgid "just released" -#~ msgstr "alliberat" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " diff --git a/editor/translations/cs.po b/editor/translations/cs.po index 0da8ebee3c..9a1d88ba87 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -2,27 +2,26 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# # Fadex <vitekpaulik@gmail.com>, 2017. -# Jan 'spl!te' KondelÃk <j.kondelik@centrum.cz>, 2016. +# Jan 'spl!te' KondelÃk <j.kondelik@centrum.cz>, 2016, 2018. # Jiri Hysek <contact@jirihysek.com>, 2017. # Josef KuchaÅ™ <josef.kuchar267@gmail.com>, 2018. # LudÄ›k Novotný <gladosicek@gmail.com>, 2016, 2018. # Martin Novák <maidx@seznam.cz>, 2017. # zxey <r.hozak@seznam.cz>, 2018. -# +# VojtÄ›ch Å amla <auzkok@seznam.cz>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-21 12:36+0000\n" -"Last-Translator: Josef KuchaÅ™ <josef.kuchar267@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: VojtÄ›ch Å amla <auzkok@seznam.cz>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -31,10 +30,10 @@ msgstr "" "Neplatný typ argumentu funkce convert(), použijte nÄ›kterou z konstant TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "Nedostatek bajtů pro dekódovánà bajtů, nebo Å¡patný formát." +msgstr "Nedostatek bytů pro dekódovánà bytů, nebo Å¡patný formát." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -45,23 +44,20 @@ msgid "self can't be used because instance is null (not passed)" msgstr "" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Neplatné jméno vlastnosti '%s' v uzlu %s." +msgstr "Neplatné operandy pro operátor %s, %s a %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Neplatné jméno vlastnosti '%s' v uzlu %s." +msgstr "Neplatný index typu %s pro základnà typ %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" msgstr "" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Neplatný argument typu: " +msgstr "Neplatné argumenty pro konstrukci '%s'" #: core/math/expression.cpp msgid "On call to '%s':" @@ -83,9 +79,8 @@ msgid "Mirror" msgstr "Zrcadlit X" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Vložit klÃÄ" +msgstr "Vložit klÃÄ zde" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -126,46 +121,40 @@ msgid "Anim Change Call" msgstr "Animace: zmÄ›na volánÃ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Vlastnost:" +msgstr "Stopa vlastnosti" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Transformovat UV mapu" +msgstr "Stopa 3D transformace" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Stopa volánà metody" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Stopa Bézierovy kÅ™ivky" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Stopa pÅ™ehrávánà zvuku" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Zastavit pÅ™ehrávánà animace. (S)" +msgstr "Stopa pÅ™ehrávánà animace" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Animace: pÅ™idat stopu" +msgstr "PÅ™idat stopu" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Délka animace (v sekundách)." +msgstr "Délka animace (v sekundách)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "PÅ™iblÞenà animace." +msgstr "Opakovánà animace" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -174,39 +163,35 @@ msgstr "Funkce:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "" +msgstr "Audio klipy:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "AnimaÄnà klipy:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Zapnout nerozptylujÃcà režim." +msgstr "Aktivovat/Deaktivovat tuto stopu." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "NerozptylujÃcà režim" +msgstr "InterpolaÄnà režim" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Odstranit vybranou stopu." +msgstr "Odstranit tuto stopu." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "ÄŒas:" +msgstr "ÄŒas (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -221,13 +206,12 @@ msgid "Trigger" msgstr "Spoušť" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "BudoucÃ" +msgstr "Zachytit" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "NejbližšÃ" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -236,7 +220,7 @@ msgstr "LineárnÃ" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Kubická" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" @@ -252,14 +236,12 @@ msgid "Insert Key" msgstr "Vložit klÃÄ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplikovat uzel/uzly" +msgstr "Duplikovat klÃÄ(e)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Odstranit uzel/uzly" +msgstr "Odstranit klÃÄ(e)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -289,7 +271,7 @@ msgstr "Animace: vložit" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer nemůže animovat sám sebe, pouze ostatnÃ." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -314,10 +296,14 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Audio stopa může odkazovat pouze na uzly typu:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Stopa animae může odkazovat pouze na uzly AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." @@ -325,7 +311,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Nenà možné pÅ™idat novou stopu bez koÅ™enového uzlu" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." @@ -333,25 +319,23 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Stopa nenà typu Spatial, nelze vložit klÃÄ" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "PromÄ›nná pro zÃskánà nebyla ve skriptu nalezena: " +msgstr "Tato metoda nebyla v objektu nalezena: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Animace: pÅ™esunout klÃÄe" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Schránka je prázdná!" +msgstr "Schránka je prázdná" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -364,21 +348,19 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Zobrazit pouze stopy vybraných uzlů." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Seskupit stopy podle uzlu nebo je zobrazit jako jednoduchý seznam." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Krok (s):" +msgstr "PÅ™ichycenà (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Strom animace je platný." +msgstr "Hodnota animaÄnÃho kroku." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -390,19 +372,16 @@ msgid "Edit" msgstr "Upravit" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Strom animacÃ" +msgstr "Vlastnosti animace." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "KopÃrovat parametry" +msgstr "KopÃrovat stopy" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Vložit parametry" +msgstr "Vložit stopy" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -412,8 +391,7 @@ msgstr "ZmÄ›nit měřÃtko výbÄ›ru" msgid "Scale From Cursor" msgstr "ZmÄ›nit měřÃtko od kurzoru" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplikovat výbÄ›r" @@ -422,16 +400,17 @@ msgid "Duplicate Transposed" msgstr "Duplikovat transponované" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Smazat vybraný" +msgstr "Smazat vybÄ›r" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "JÃt k dalÅ¡Ãmu kroku" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "JÃt k pÅ™edchozÃmu kroku" #: editor/animation_track_editor.cpp @@ -444,11 +423,11 @@ msgstr "ProÄistit animaci" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Zvolit uzel k animaci:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "PoužÃt Bézierovy kÅ™ivky" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -496,7 +475,7 @@ msgstr "PomÄ›r zvÄ›tÅ¡enÃ:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Zvolte stopy ke zkopÃrovánÃ:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -520,7 +499,7 @@ msgstr "ZmÄ›nit hodnotu pole" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Běž na řádek" +msgstr "JÃt na řádek" #: editor/code_editor.cpp msgid "Line Number:" @@ -534,11 +513,11 @@ msgstr "Žádné shody" msgid "Replaced %d occurrence(s)." msgstr "Nahrazeno %d výskytů." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "RozliÅ¡ovat malá/velká" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Celá slova" @@ -567,16 +546,15 @@ msgid "Reset Zoom" msgstr "Obnovit původnà pÅ™iblÞenÃ" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "VarovánÃ" +msgstr "VarovánÃ:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "PÅ™iblÞit" +msgid "Font Size:" +msgstr "Pohled zepÅ™edu" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Řádek:" @@ -609,6 +587,7 @@ msgstr "PÅ™idat" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -665,9 +644,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Odpojit '%s' od '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Odpojit '%s' od '%s'" +msgstr "Odpojit vÅ¡e od signálu: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -684,14 +662,13 @@ msgid "Connect Signal: " msgstr "PÅ™ipojuji signál:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Chyba pÅ™ipojenÃ" +msgstr "Upravit pÅ™ipojenÃ: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Jste si jisti, že chcete spustit vÃce než jeden projekt?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" +"Jste si jisti, že chcete odstranit vÅ¡echna pÅ™ipojenà ze signálu \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -699,22 +676,19 @@ msgstr "Signály" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Jste si jistÃ, že chcete odstranit vÅ¡echna pÅ™ipojenà z tohoto signálu?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Odpojit" +msgstr "Odpojit vÅ¡e" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Upravit" +msgstr "Upravit..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Metody" +msgstr "PÅ™ejÃt na metodu" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -745,17 +719,14 @@ msgstr "Nedávné:" msgid "Search:" msgstr "Hledat:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Shody:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Popis:" @@ -816,9 +787,10 @@ msgid "Search Replacement Resource:" msgstr "Hledat náhradnà zdroj:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -850,7 +822,8 @@ msgid "Error loading:" msgstr "Chyba pÅ™i naÄÃtánÃ:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Scénu se nepodaÅ™ilo naÄÃst kvůli chybÄ›jÃcÃm závislostem:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -909,14 +882,6 @@ msgstr "ZmÄ›nit hodnotu slovnÃku" msgid "Thanks from the Godot community!" msgstr "DÄ›kujeme za komunitu Godotu!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "PÅ™ispÃvajÃcà do Godot Enginu" @@ -1092,8 +1057,7 @@ msgid "Bus options" msgstr "Možnosti Busu" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikovat" @@ -1223,11 +1187,11 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "PÅ™emÃstit Autoload" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "Odstranit Autoload" #: editor/editor_autoload_settings.cpp msgid "Enable" @@ -1235,7 +1199,7 @@ msgstr "Povolit" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "PÅ™eskupit Autoloady" #: editor/editor_autoload_settings.cpp msgid "Invalid Path." @@ -1262,8 +1226,9 @@ msgstr "Cesta:" msgid "Node Name:" msgstr "Název uzlu:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Název" @@ -1333,26 +1298,29 @@ msgid "Template file not found:" msgstr "Soubor Å¡ablony nenalezen:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Vybrat stávajÃcà složku" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Soubor už existuje. PÅ™epsat?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Vybrat stávajÃcà složku" +msgid "Select This Folder" +msgstr "Vybrat tuto složku" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "KopÃrovat cestu" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Ukázat ve správci souborů" +msgid "Open in File Manager" +msgstr "OtevÅ™Ãt ve správci souborů" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "Ukázat ve správci souborů" +msgid "Show in File Manager" +msgstr "Zobrazit ve správci souborů" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1387,7 +1355,8 @@ msgid "Open a File or Directory" msgstr "OtevÅ™Ãt soubor nebo složku" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Uložit" @@ -1445,8 +1414,7 @@ msgstr "Složky a soubory:" msgid "Preview:" msgstr "Náhled:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Soubor:" @@ -1462,24 +1430,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importovánà assetů" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Prohledat nápovÄ›du" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Seznam tÅ™Ãd:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Hledat tÅ™Ãdy" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "TÅ™Ãda:" @@ -1496,28 +1451,28 @@ msgid "Brief Description:" msgstr "StruÄný popis:" #: editor/editor_help.cpp -msgid "Members" -msgstr "ÄŒlenové" +msgid "Properties" +msgstr "Vlastnosti" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "ÄŒlenové:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Vlastnosti:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "VeÅ™ejné metody" +msgid "Methods" +msgstr "Metody" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "VeÅ™ejné metody:" +msgid "Methods:" +msgstr "Metody:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +msgid "Theme Properties" +msgstr "Vlastnosti motivu" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +msgid "Theme Properties:" +msgstr "Vlastnosti motivu:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1544,8 +1499,12 @@ msgid "Constants:" msgstr "Konstanty:" #: editor/editor_help.cpp -msgid "Description" -msgstr "Popis" +msgid "Class Description" +msgstr "Popis tÅ™Ãdy" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "Popis tÅ™Ãdy:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1562,11 +1521,11 @@ msgstr "" "$url2]zažádat[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Vlastnosti" +msgid "Property Descriptions" +msgstr "Popis vlastnosti" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "Popis vlastnosti:" #: editor/editor_help.cpp @@ -1578,11 +1537,11 @@ msgstr "" "nám tÃm, že ho[color=$color][url=$url]vytvoÅ™Ãte[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metody" +msgid "Method Descriptions" +msgstr "Popis metody" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "Popis metody:" #: editor/editor_help.cpp @@ -1593,12 +1552,53 @@ msgstr "" "V souÄasné dobÄ› neexistuje žádný popis pro tuto metodu. ProsÃm pomozte nám " "tÃm, že ho [color=$color][url=$url]vytvoÅ™Ãte[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Prohledat nápovÄ›du" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Zobrazit vÅ¡echny" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Pouze tÅ™Ãdy" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Pouze metody" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Pouze signály" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Pouze konstanty" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Pouze vlastnosti" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Pouze vlastnosti motivu" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Member Type" +msgstr "ÄŒlenové" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "TÅ™Ãda" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Vlastnost:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Nastavit" @@ -1626,15 +1626,20 @@ msgstr "Vymazat výstup" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Export projektu selhal s chybovým kódem %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "" +msgstr "Chyba pÅ™i ukládánà zdrojů!" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." -msgstr "" +msgstr "Uložit zdroj jako..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1650,7 +1655,7 @@ msgstr "Chyba pÅ™i ukládánÃ." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "Nelze otevÅ™Ãt '%s'. Soubor mohl být pÅ™esunut nebo smazán." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1682,6 +1687,12 @@ msgstr "VytvářÃm náhled" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." +msgstr "Tato operace nemůže být provedena bez koÅ™enového uzlu." + +#: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." msgstr "" #: editor/editor_node.cpp @@ -1692,13 +1703,17 @@ msgstr "" "NepodaÅ™ilo se uložit scénu. NejspÃÅ¡e se nepodaÅ™ilo uspokojit závislosti " "(instance nebo dÄ›diÄnosti)." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Nelze pÅ™epsat scénu, která je stále otevÅ™ená!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "" +msgstr "Chyba pÅ™i ukládánà MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" @@ -1706,11 +1721,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "" +msgstr "Chyba pÅ™i ukládánà TileSet!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "" +msgstr "Chyba pÅ™i pokusu uložit rozloženÃ!" #: editor/editor_node.cpp msgid "Default editor layout overridden." @@ -1718,7 +1733,7 @@ msgstr "Výchozà rozloženà editoru pÅ™epsáno." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "Jméno rozloženà nenalezeno!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." @@ -1730,18 +1745,25 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Tento zdroj patřà scénÄ›, která byla importována, takže ho nelze upravit.\n" +"PÅ™eÄtÄ›te si, prosÃm, dokumentaci týkajÃcà se importovánà scén, abyste lépe " +"pochopili tento proces." #: editor/editor_node.cpp msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it will not be kept when saving the current scene." msgstr "" +"Tento zdroj patřà scénÄ›, která byla instancovaná nebo podÄ›dÄ›ná.\n" +"Jeho zmÄ›ny nebudou zachovány pÅ™i uloženà aktuálnà scény." #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" +"Tento zdroj byl importován, takže jej nelze mÄ›nit. Změňte jeho nastavenà v " +"panelu Import a znovu ho importujte." #: editor/editor_node.cpp msgid "" @@ -1750,6 +1772,10 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Tato scéna byla importována, takže jejà zmÄ›ny nebudou zachovány.\n" +"Instancovánà nebo zdÄ›dÄ›nà umožnà provádÄ›t jejà zmÄ›ny.\n" +"PÅ™eÄtÄ›te si, prosÃm, dokumentaci týkajÃcà se importovánà scén, abyste lépe " +"pochopili tento proces." #: editor/editor_node.cpp msgid "" @@ -1757,6 +1783,9 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" +"Toto je vzdálený objekt, takže jeho zmÄ›ny nebudou zachovány.\n" +"PÅ™eÄtÄ›te si, prosÃm, dokumentaci týkajÃcà se debugovánÃ, abyste lépe " +"pochopili tento proces." #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -1841,7 +1870,7 @@ msgstr "Exportovat Mesh Library" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "" +msgstr "Tato operace nemůže být provedena bez koÅ™enového uzlu." #: editor/editor_node.cpp msgid "Export Tile Set" @@ -1849,7 +1878,7 @@ msgstr "Exportovat Tile Set" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "Tato operace nemůže být provedena bez vybraného uzlu." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -1923,6 +1952,14 @@ msgstr "Nelze naÄÃst skript rozÅ¡ÃÅ™enà z cesty: '%s'." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Nelze naÄÃst skript rozÅ¡ÃÅ™enà z cesty: '%s'. Zdá se, že se v kódu nacházà " +"chyba. ProsÃm, zkontrolujte syntax." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "NepodaÅ™ilo se naÄÃst addon skript z cesty: '%s'. Základnà typ nenà " @@ -1939,13 +1976,15 @@ msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" +"Scéna '%s' byla automaticky importována, takže nemůže být modifikována.\n" +"Abyste ji mohli zmÄ›nit, je možné vytvoÅ™it novou zdÄ›dÄ›nou scénu." #: editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"Chyba pÅ™i nahrávánà scény, musà být v cestÄ› projektu. POužijte 'Importovat' " +"Chyba pÅ™i nahrávánà scény, musà být v cestÄ› projektu. Použijte 'Importovat' " "k otevÅ™enà scény, pak ji uložte uvnitÅ™ projektu." #: editor/editor_node.cpp @@ -1969,15 +2008,18 @@ msgstr "Odstranit rozloženÃ" msgid "Default" msgstr "VýchozÃ" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Zobrazit v souborovém systému" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Spustit scénu" +msgstr "Spustit tuto scénu" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "ZavÅ™Ãt ostatnà záložky" +msgstr "ZavÅ™Ãt záložku" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2052,7 +2094,7 @@ msgid "Save Scene" msgstr "Uložit scénu" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Uložit vÅ¡echny scény" #: editor/editor_node.cpp @@ -2081,7 +2123,7 @@ msgid "Undo" msgstr "ZpÄ›t" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Znovu" @@ -2110,15 +2152,15 @@ msgid "Tools" msgstr "Nástroje" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "OtevÅ™Ãt Správce projektu?" +msgstr "OtevÅ™Ãt složku s daty projektu" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "UkonÄit do seznamu projektů" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "LadÄ›nÃ" @@ -2136,7 +2178,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Minimálnà nasazenà se sÃÅ¥ovým FS" #: editor/editor_node.cpp msgid "" @@ -2155,23 +2197,26 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "" +msgstr "Viditelné koliznà tvary" #: editor/editor_node.cpp msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" +"Koliznà tvary a raycast uzly (pro 2D a 3D) budou viditelné bÄ›hem hry, po " +"aktivaci této volby." #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "" +msgstr "Viditelná navigace" #: editor/editor_node.cpp msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" +"NavigaÄnà meshe a polygony budou viditelné bÄ›hem hry, po aktivaci této volby." #: editor/editor_node.cpp msgid "Sync Scene Changes" @@ -2222,18 +2267,16 @@ msgid "Toggle Fullscreen" msgstr "Celá obrazovka" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Nastavenà editoru" +msgstr "OtevÅ™Ãt složku s daty a nastavenÃm editoru" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "OtevÅ™Ãt složku s daty editoru" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Nastavenà editoru" +msgstr "OtevÅ™Ãt složku s nastavenÃm editoru" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2243,10 +2286,6 @@ msgstr "Spravovat exportnà šablony" msgid "Help" msgstr "NápovÄ›da" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "TÅ™Ãdy" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2317,13 +2356,12 @@ msgstr "Spustit vlastnà scénu" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "ZmÄ›na grafického ovladaÄe vyžaduje restart editoru." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Uložit a ukonÄit" +msgstr "Uložit a restartovat" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2341,24 +2379,24 @@ msgstr "Akualizovat zmÄ›ny" msgid "Disable Update Spinner" msgstr "Vypnout aktualizaÄnà koleÄko" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspektor" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importovat" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Souborový systém" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspektor" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Uzel" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" @@ -2420,7 +2458,7 @@ msgstr "OtevÅ™Ãt editor skriptů" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "" +msgstr "OtevÅ™Ãt knihovnu assetů" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -2439,9 +2477,8 @@ msgid "Thumbnail..." msgstr "Náhled..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Pluginy" +msgstr "Upravit plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2465,15 +2502,13 @@ msgid "Status:" msgstr "Stav:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Upravit" +msgstr "Upravit:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Start!" +msgstr "Start" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2495,7 +2530,7 @@ msgstr "SnÃmek %" msgid "Physics Frame %" msgstr "Fyzikálnà snÃmek %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "ÄŒas:" @@ -2519,30 +2554,45 @@ msgstr "ÄŒas" msgid "Calls" msgstr "VolánÃ" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Vrstva" #: editor/editor_properties.cpp msgid "Bit %d, value %d" -msgstr "" +msgstr "Bit %d, hodnota %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Prázdné]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "PÅ™iÅ™adit" +msgstr "PÅ™iÅ™adit.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Nelze vytvoÅ™it ViewportTexture na zdroji uloženém jako soubor.\n" +"Zdroj musà patÅ™it scénÄ›." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "" +msgstr "Vyberte Viewport" #: editor/editor_properties.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_editor.cpp @@ -2557,10 +2607,6 @@ msgstr "Nový %s" msgid "Make Unique" msgstr "VytvoÅ™it unikátnÃ" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Zobrazit v souborovém systému" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2569,7 +2615,8 @@ msgstr "Zobrazit v souborovém systému" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Vložit" @@ -2582,35 +2629,32 @@ msgstr "Konvertovat na %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "OtevÅ™Ãt v editoru" +msgstr "OtevÅ™Ãt editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "" +msgstr "Vybraný uzel nenà Viewport!" #: editor/editor_properties_array_dict.cpp msgid "Size: " -msgstr "" +msgstr "Velikost: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Strana: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Nové jméno:" +msgstr "Nový klÃÄ:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Nové jméno:" +msgstr "Nová hodnota:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Vložte pár klÃÄ/hodnota" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2634,7 +2678,6 @@ msgid "Write your logic in the _run() method." msgstr "NapiÅ¡te svůj kód v _run() metodÄ›." #: editor/editor_run_script.cpp -#, fuzzy msgid "There is an edited scene already." msgstr "NÄ›jaka scéna už je upravována." @@ -2648,11 +2691,11 @@ msgstr "NezapomnÄ›li jste na klÃÄové slovo 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Nelze spustit skript:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "NezapomÄ›l jste metodu '_run'?" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -2664,49 +2707,48 @@ msgstr "" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Import z uzlu:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Stáhnout znovu" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "" +msgstr "Odinstalovat" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(Instalováno)" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download" -msgstr "" +msgstr "Stáhnout" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(Nenalezeno)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(AktuálnÃ)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." -msgstr "" +msgstr "ZÃskávánà zrcadel, prosÃm Äekejte..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "Odstranit Å¡ablonu verze '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." msgstr "Nelze otevÅ™Ãt zip soubor exportnÃch Å¡ablon." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Neplatný formát version.txt uvnitÅ™ Å¡ablon." +msgstr "Neplatný formát version.txt uvnitÅ™ Å¡ablon: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2722,18 +2764,20 @@ msgstr "Extrakce exportnÃch Å¡ablon" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "ImportovánÃ:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Nebyly nalezeny odkazy pro staženà této verze. PÅ™Ãmé staženà je dostupné " +"pouze pro oficiálnà vydánÃ." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Nelze vyÅ™eÅ¡it." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2743,7 +2787,7 @@ msgstr "Nelze se pÅ™ipojit." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Žádná odpovÄ›Ä." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2753,22 +2797,23 @@ msgstr "Požadavek se nezdaÅ™il." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "Zacyklené pÅ™esmÄ›rovánÃ." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" +msgstr "Selhalo:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Stahovánà dokonÄeno." #: editor/export_template_manager.cpp msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Instalace Å¡ablon selhala. Problémové archivy Å¡ablon lze nalézt na '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2784,11 +2829,11 @@ msgstr "Odpojeno" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "ŘeÅ¡Ãm" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Nelze vyÅ™eÅ¡it" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2818,19 +2863,19 @@ msgstr "Chyba pÅ™ipojenÃ" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "Selhánà SSL handshaku" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Aktuálnà verze:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Instalované verze:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Instalovat ze souboru" #: editor/export_template_manager.cpp msgid "Remove Template" @@ -2842,7 +2887,7 @@ msgstr "Vybrat soubor Å¡ablony" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "" +msgstr "Správce exportnÃch Å¡ablon" #: editor/export_template_manager.cpp msgid "Download Templates" @@ -2850,35 +2895,43 @@ msgstr "Stáhnout Å¡ablony" #: editor/export_template_manager.cpp msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "" +msgstr "Zvolte zrcadlo ze seznamu: (Shift + Klik: OtevÅ™it v prohlÞeÄi)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"Nelze otevÅ™Ãt file_type_cache.cch pro zápis, cache typů souborů nenà " +"ukládána!" + +#: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "OblÃbené" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" -msgstr "" +msgstr "Nelze pÅ™ejÃt k '%s', protože nebylo nalezeno v souborovém systému!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." -msgstr "" +msgstr "Zobrazit položky jako mřÞku náhledů." #: editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "" +msgstr "Zobrazit položky jako seznam." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" +"Status: import souboru selhal. Opravte, prosÃm, soubor a naimportujte ho " +"znovu ruÄnÄ›." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "Nelze pÅ™esunout/pÅ™ejmenovat koÅ™en zdrojů." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "Nelze pÅ™esunout složku do sebe samé." #: editor/filesystem_dock.cpp msgid "Error moving:" @@ -2890,19 +2943,19 @@ msgstr "Chyba duplikovánÃ:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "NepodaÅ™ilo se aktualizovat závisloti:" +msgstr "NepodaÅ™ilo se aktualizovat závislosti:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" -msgstr "" +msgstr "Nebylo poskytnuto žádné jméno" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "Poskytnuté jméno obsahuje neplatné znaky" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "" +msgstr "Nebylo poskytnuto žádné jméno." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." @@ -2910,7 +2963,7 @@ msgstr "Jméno obsahuje neplatné znaky." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Soubor nebo složka s tÃmto názvem již existuje." #: editor/filesystem_dock.cpp msgid "Renaming file:" @@ -2918,7 +2971,7 @@ msgstr "PÅ™ejmenovávánà souboru:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "PÅ™ejmenovánà složky:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" @@ -2926,23 +2979,7 @@ msgstr "Duplikace souboru:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Sbalit vÅ¡e" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "PÅ™ejmenovat..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "PÅ™esunout do..." +msgstr "Duplikace složky:" #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2953,6 +2990,14 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "PÅ™idat do oblÃbených" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Odebrat z oblÃbených" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Upravit závislosti..." @@ -2960,26 +3005,40 @@ msgstr "Upravit závislosti..." msgid "View Owners..." msgstr "Zobrazit vlastnÃky..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "PÅ™ejmenovat..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplikovat..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "PÅ™esunout do..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Nový skript" +msgstr "Nový skript..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Zdroj" +msgstr "Nový zdroj..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "Rozbalit vÅ¡e" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Sbalit vÅ¡e" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp #: editor/scene_tree_dock.cpp msgid "Rename" -msgstr "" +msgstr "PÅ™ejmenovat" #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2991,81 +3050,60 @@ msgstr "NásledujÃcà adresář" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Znovu skenovat souborový systém" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Zobrazit oblÃbené" +msgid "Toggle split mode" +msgstr "PÅ™epnout režim" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "VytvoÅ™it složku" +msgid "Search files" +msgstr "Hledat soubory" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Hledat tÅ™Ãdy" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" +"Skenovánà souborů,\n" +"ProsÃm, Äekejte..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" -msgstr "" +msgstr "PÅ™esunout" #: editor/filesystem_dock.cpp msgid "There is already file or folder with the same name in this location." -msgstr "" +msgstr "Soubor nebo složka se stejným názvem již na tomto mÃstÄ› existuje." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "PÅ™epsat" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "VytvoÅ™it skript" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "%d vÃce souborů" +msgid "Find in Files" +msgstr "NajÃt v souborech" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "NajÃt" +msgid "Find:" +msgstr "NajÃt:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "Celá slova" +msgid "Folder:" +msgstr "Složka:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "RozliÅ¡ovat malá/velká" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Filtr:" +msgid "Filters:" +msgstr "Filtry:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3081,34 +3119,32 @@ msgid "Cancel" msgstr "ZruÅ¡it" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "NajÃt: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Nahradit" +msgstr "Nahradit: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Nahradit vÅ¡echny" +msgstr "Nahradit vÅ¡echny (bez možnosti vrácenÃ)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Hledat" +msgstr "Hledám..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Prohledat text" +msgstr "Vyhledávánà dokonÄeno" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "Chyba: Jméno animace už existuje!" +msgstr "Název skupiny již existuje." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Neplatný název." +msgstr "Neplatný název skupiny." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" @@ -3116,7 +3152,7 @@ msgstr "Skupiny" #: editor/groups_editor.cpp msgid "Nodes not in Group" -msgstr "" +msgstr "Uzly nejsou ve skupinÄ›" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" @@ -3124,20 +3160,19 @@ msgstr "Filtrovat uzly" #: editor/groups_editor.cpp msgid "Nodes in Group" -msgstr "" +msgstr "Uzly jsou ve skupinÄ›" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "PÅ™idat do skupiny" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Odebrat ze skupiny" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Skupiny" +msgstr "Spravovat skupiny" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3182,11 +3217,11 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Importovat scénu" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene..." -msgstr "" +msgstr "Importuji scénu..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -3214,7 +3249,7 @@ msgstr "" #: editor/import/resource_importer_scene.cpp msgid "Saving..." -msgstr "" +msgstr "UkládánÃ..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -3242,19 +3277,14 @@ msgstr "Znovu importovat" #: editor/inspector_dock.cpp msgid "Failed to load resource." -msgstr "" - -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" +msgstr "Selhalo nahránà zdroje." #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "Rozbalit vÅ¡echny vlastnosti" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "Sbalit vÅ¡echny vlastnosti" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3277,7 +3307,7 @@ msgstr "Schránka zdroje je prázdná!" #: editor/inspector_dock.cpp msgid "Copy Resource" -msgstr "" +msgstr "KopÃrovat zdroj" #: editor/inspector_dock.cpp msgid "Make Built-In" @@ -3293,19 +3323,19 @@ msgstr "OtevÅ™Ãt v nápovÄ›dÄ›" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." -msgstr "" +msgstr "VytvoÅ™it nový zdroj v pamÄ›ti a editovat ho." #: editor/inspector_dock.cpp msgid "Load an existing resource from disk and edit it." -msgstr "" +msgstr "Nahrát existujÃcà zdroj z disku a editovat ho." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "" +msgstr "JÃt na pÅ™edeÅ¡lý editovaný objekt v historii." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "" +msgstr "JÃt na následujÃcà editovaný objekt v historii." #: editor/inspector_dock.cpp msgid "History of recently edited objects." @@ -3316,9 +3346,8 @@ msgid "Object properties." msgstr "Vlastnosti objektu." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtrovat uzly" +msgstr "Filtrovat vlastnosti" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3330,65 +3359,60 @@ msgstr "" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "" +msgstr "Zvolit uzel pro editaci signálů a skupin." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Upravit IK Å™etÄ›zec" +msgstr "Editovat plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "VytvoÅ™it C# Å™eÅ¡enÃ" +msgstr "VytvoÅ™it plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Pluginy" +msgstr "Název pluginu:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Podsložka:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Jazyk" +msgstr "Jazyk:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Skript je validnÃ" +msgstr "Název skriptu:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Aktivovat nynÃ?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "" +msgstr "VytvoÅ™it polygon" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly" -msgstr "" +msgstr "Editovat polygon" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Vložit polygon" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "" +msgstr "Upravit polygon (Odstranit bod)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Odstranit polygon a bod" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" @@ -3401,6 +3425,10 @@ msgid "" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Upravit existujÃcà polygon:\n" +"LMB: PÅ™esunout bod.\n" +"Ctrl+LMB: RozdÄ›lit segment.\n" +"RMB: Vymazat bod." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" @@ -3418,15 +3446,14 @@ msgstr "PÅ™idat animaci" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "NaÄÃst" +msgstr "NaÄÃst.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "Tento typ uzlu nelze použÃt. Jsou povoleny pouze koÅ™enové uzly." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3445,37 +3472,32 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Zvolte a pÅ™esuňte body. Nové uzly vytvoÅ™te pomocà RMB." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Odstranit body" +msgstr "VytvoÅ™it body." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "RMB: Vymazat bod." +msgstr "Vymazat body." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "PÅ™esunout bod" +msgstr "Bod" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Jméno animace:" +msgstr "OtevÅ™Ãt uzel animace" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Akce '%s' již existuje!" +msgstr "TrojúhelnÃk již existuje" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." @@ -3503,6 +3525,11 @@ msgstr "" msgid "Snap" msgstr "PÅ™ichytit" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "ProlÃnánÃ:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3534,15 +3561,13 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "PÅ™idat uzel" +msgstr "PÅ™idat uzel.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Editovat filtry" +msgstr "Upravit filtrované stopy:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Enable filtering" @@ -3554,15 +3579,15 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Nový název animace:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "" +msgstr "Nová animace" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "ZmÄ›nit název animace:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -3574,14 +3599,12 @@ msgid "Remove Animation" msgstr "Smazat animaci" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "Chyba: Neplatné jméno animace!" +msgstr "Neplatné jméno animace!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "Chyba: Jméno animace už existuje!" +msgstr "Jméno animace už existuje!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3605,9 +3628,8 @@ msgid "Duplicate Animation" msgstr "Duplikovat animaci" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ERROR: Nevybrána animace pro kopÃrovánÃ!" +msgstr "Žádná animace pro kopÃrovánÃ!" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -3623,9 +3645,8 @@ msgid "Paste Animation" msgstr "Vložit animaci" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ERROR: Nevybrána animace pro úpravu!" +msgstr "Žádná animace pro úpravu!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3669,14 +3690,12 @@ msgid "New" msgstr "Nový" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "PÅ™echody" +msgstr "Upravit pÅ™echody..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "OtevÅ™Ãt v editoru" +msgstr "OtevÅ™Ãt v inspektoru" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3769,7 +3788,7 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "" +msgstr "Konec" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" @@ -3804,14 +3823,12 @@ msgid "" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "VytvoÅ™it nový %s" +msgstr "VytvoÅ™it nové uzly." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "PÅ™ipojit uzly" +msgstr "PÅ™ipojit uzly." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy @@ -3827,9 +3844,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "PÅ™echod" +msgstr "PÅ™echod: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3883,10 +3899,6 @@ msgid "Amount:" msgstr "MnožstvÃ:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "ProlÃnánÃ:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "ProlÃnánà 0:" @@ -3929,7 +3941,7 @@ msgstr "Strom animace je neplatný." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "Uzel animace" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "OneShot Node" @@ -4025,17 +4037,15 @@ msgstr "Neúspěšná kontrola sha256 hashe" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "Chyba pÅ™i stahovánà assetu:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Stahuji" +msgstr "Stahuji (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Stahuji" +msgstr "Stahuji..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4059,17 +4069,15 @@ msgstr "Chyba pÅ™i stahovánÃ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Stahovánà tohoto assetu právÄ› probÃhá!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "prvnÃ" +msgstr "PrvnÃ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "PÅ™edchozà záložka" +msgstr "PÅ™edchozÃ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4077,7 +4085,7 @@ msgstr "DalÅ¡Ã" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "PoslednÃ" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4198,29 +4206,29 @@ msgid "Create new horizontal and vertical guides" msgstr "VytvoÅ™it nové vodorovné a svislé vodÃtka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "PÅ™emÃstit stÅ™ed" +msgstr "PÅ™emÃstit pivot" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Upravit CanvasItem" +msgstr "Rotovat CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "PÅ™esunout akci" +msgstr "PÅ™esunout kotvu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Upravit CanvasItem" +msgstr "ZmÄ›nit velikost CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Rotovat CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "Upravit CanvasItem" +msgstr "PÅ™emÃstit CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4283,6 +4291,11 @@ msgid "Rotate Mode" msgstr "Režim otáÄenÃ" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Režim zvÄ›tÅ¡ovánà (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4298,16 +4311,14 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "PÅ™epnout pÅ™ichycovánÃ" +msgstr "PÅ™epnout pÅ™ichycovánÃ." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "PoužÃt pÅ™ichycovánÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "Možnosti pÅ™ichytávánÃ" @@ -4346,16 +4357,15 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "" +msgstr "PÅ™ichytit ke stranám uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "PÅ™ichytit k rodiÄovi" +msgstr "PÅ™ichytit ke stÅ™edu uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" -msgstr "" +msgstr "PÅ™ichytit k jiným uzlům" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" @@ -4364,12 +4374,12 @@ msgstr "PÅ™ichytit k vodÃtkům" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "" +msgstr "UzamÄÃt vybraný objekt na mÃstÄ› (nemůže být pÅ™esunut)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "" +msgstr "Uvolnit vybraný objekt (může být pÅ™esunut)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." @@ -4380,6 +4390,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Kostra" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Zobrazit kosti" @@ -4427,9 +4442,12 @@ msgid "Show Origin" msgstr "Zobrazit poÄátek" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "Zobrazit pomocné" +msgstr "Zobrazit Viewport" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4444,13 +4462,12 @@ msgid "Layout" msgstr "RozloženÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Vložit klÃÄe" +msgstr "Vložit klÃÄe." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "" +msgstr "Vložit klÃÄ (existujÃcà stopy)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -4509,9 +4526,8 @@ msgid "Set Handle" msgstr "" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "Vrcholy" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4667,7 +4683,7 @@ msgstr "VytvoÅ™it Navigation Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "" +msgstr "Obsažená mesh nenà typu ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" @@ -4675,12 +4691,12 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "" +msgstr "Žádná mesh pro debugovánÃ." #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/sprite_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "" +msgstr "Model nemá UV v této vrstvÄ›" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -4771,10 +4787,11 @@ msgstr "Aktualizovat ze scény" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" +"Zdroj meshe nenà specifikován (a žádná MultiMesh nenà nastavena v uzlu)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "" +msgstr "Zdroj meshe nenà specifikován (a MultiMesh neobsahuje žádnou Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." @@ -4782,11 +4799,11 @@ msgstr "Zdroj meshe je neplatný (neplatná cesta)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "Zdroj meshe je neplatný (nenà MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "" +msgstr "Zdroj meshe je neplatný (neobsahuje žádný Mesh zdroj)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." @@ -4830,11 +4847,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "CÃlový povrch:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Zdrojová mesh:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -4854,11 +4871,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "" +msgstr "Náhodná rotace:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "" +msgstr "Náhodné naklonÄ›nÃ:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" @@ -4870,12 +4887,12 @@ msgstr "Naplnit" #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "" +msgstr "VytvoÅ™it navigaÄnà polygon" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Generovánà C# projektu..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4903,6 +4920,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Konvertovat na velká pÃsmena" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4972,13 +4995,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Vygenerovat AABB" +msgid "Generating AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Konvertovat na velká pÃsmena" +msgid "Generate AABB" +msgstr "Vygenerovat AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5027,12 +5049,12 @@ msgstr "Shift+TáhnutÃ:" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "KliknutÃ: PÅ™idat bod" +msgstr "Klik: PÅ™idat bod" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "" +msgstr "Pravý klik: Smazat bod" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -5079,9 +5101,8 @@ msgid "Curve Point #" msgstr "Bod kÅ™ivky #" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Odstranit signál" +msgstr "Nastavit pozici bodu kÅ™ivky" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" @@ -5192,9 +5213,8 @@ msgid "Bones" msgstr "VytvoÅ™it kosti" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "VytvoÅ™it Poly3D" +msgstr "VytvoÅ™it polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -5258,9 +5278,8 @@ msgid "Clear UV" msgstr "Vymazat UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Nastavenà GridMap" +msgstr "Nastavenà mřÞky" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5271,29 +5290,24 @@ msgid "Grid" msgstr "MřÞka" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Nastavenà pÅ™ichycovánÃ" +msgstr "Nastavit mřÞku:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Offset mřÞky:" +msgstr "Offset mřÞky X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Offset mřÞky:" +msgstr "Offset mřÞky Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Krok mřÞky:" +msgstr "Krok mřÞky X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Krok mřÞky:" +msgstr "Krok mřÞky Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5323,12 +5337,7 @@ msgstr "Schránka zdroje je prázdná!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "OtevÅ™Ãt v editoru" +msgstr "Vložit zdroj" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp @@ -5337,11 +5346,16 @@ msgstr "Instance:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Typ:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "OtevÅ™Ãt v editoru" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "NaÄÃst zdroj" @@ -5352,12 +5366,11 @@ msgstr "Zdroj" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree nemá nastavenou cestu k AnimstionPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Strom animace je neplatný." +msgstr "Cesta k AnimationPlayer je neplatná" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5368,19 +5381,20 @@ msgid "Close and save changes?" msgstr "ZavÅ™Ãt a uložit zmÄ›ny?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Chyba pÅ™i naÄÃtánÃ:" +msgstr "Chyba pÅ™i zápisu textového souboru:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Chyba: nelze naÄÃst soubor." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Chyba - Nelze vytvoÅ™it skript v souborovém systému." +msgstr "Chyba nelze naÄÃst soubor." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Chyba pÅ™i naÄÃtánÃ:" +msgstr "Chyba pÅ™i ukládánà souboru!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5399,19 +5413,16 @@ msgid "Error importing" msgstr "Chyba pÅ™i importu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Nová složka..." +msgstr "Nový textový soubor..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "OtevÅ™Ãt soubor" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Uložit jako..." +msgstr "Uložit soubor jako..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5458,9 +5469,8 @@ msgid "File" msgstr "Soubor" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Zobrazit soubory" +msgstr "Nový textový soubor" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5475,11 +5485,8 @@ msgid "Copy Script Path" msgstr "ZkopÃrovat cestu ke skriptu" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Zobrazit v systému souborů" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Historie pÅ™edchozÃ" #: editor/plugins/script_editor_plugin.cpp @@ -5489,7 +5496,7 @@ msgstr "Historie dalÅ¡Ã" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" -msgstr "" +msgstr "Téma" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" @@ -5551,18 +5558,14 @@ msgid "Keep Debugger Open" msgstr "Nechat ladÃcà program otevÅ™ený" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "Debugovat externÃm editorem" +msgid "Debug with External Editor" +msgstr "Debugovat v externÃm editoru" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "OtevÅ™Ãt Godot online dokumentaci" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Hledat v hierarchii tÅ™Ãd." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Hledat v referenÄnà dokumentaci." @@ -5583,6 +5586,8 @@ msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" +"NásledujÃcà soubory majà novÄ›jšà verzi na disku.\n" +"Jaká akce se má vykonat?:" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" @@ -5597,29 +5602,20 @@ msgid "Debugger" msgstr "Ladicà program" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Prohledat nápovÄ›du" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Hledat tÅ™Ãdy" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"VestavÄ›né skripty lze editovat pouze pokud scéna, které náležÃ, je naÄtená" +msgid "Search Results" +msgstr "Výsledky hledánÃ" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Řádek:" +msgstr "Řádek" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignorovat)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "PÅ™ejÃt na funkci" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5634,9 +5630,8 @@ msgid "Pick Color" msgstr "Vyberte barvu" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp -#, fuzzy msgid "Convert Case" -msgstr "PÅ™evest pÃsmena" +msgstr "ZmÄ›nit velikost pÃsmen" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" @@ -5652,7 +5647,7 @@ msgstr "Velká pÃsmena" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "ZvýrazňovaÄ syntaxe" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" @@ -5709,11 +5704,11 @@ msgid "Trim Trailing Whitespace" msgstr "Osekat koncové mezery" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "PÅ™evést odsazenà na mezery" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "PÅ™evést odsazenà na taby" #: editor/plugins/script_text_editor.cpp @@ -5730,36 +5725,27 @@ msgid "Remove All Breakpoints" msgstr "Odstranit vÅ¡echny breakpointy" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "PÅ™ejÃt na dalšà breakpoint" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "PÅ™ejÃt na pÅ™edchozà breakpoint" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Konvertovat na velká pÃsmena" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Konvertovat na malá pÃsmena" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "NajÃt pÅ™edchozÃ" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Filtrovat soubory..." +msgid "Find in Files..." +msgstr "NajÃt v souborech..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "PÅ™ejÃt na funkci..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "PÅ™ejÃt na řádek..." #: editor/plugins/script_text_editor.cpp @@ -5775,9 +5761,8 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Singleton" +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" @@ -5788,24 +5773,20 @@ msgid "Set Bones to Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "VytvoÅ™it Navigation Mesh" +msgstr "VytvoÅ™it fyzické kosti" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Singleton" +msgstr "Kostra" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "VytvoÅ™it C# Å™eÅ¡enÃ" +msgstr "VytvoÅ™it fyzickou kostru" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Spustit" +msgstr "Spustit IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5857,6 +5838,14 @@ msgid "Animation Key Inserted." msgstr "AnimaÄnà klÃÄ vložen." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objekty vykreslené" @@ -6023,6 +6012,11 @@ msgid "Freelook Speed Modifier" msgstr "Rychlost volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Zobrazit informace" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm Dialog" @@ -6125,11 +6119,6 @@ msgid "Tool Scale" msgstr "Nástroj ZvÄ›tÅ¡enÃ" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "PÅ™ichytit k mřÞce" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "PÅ™epnout volný pohled" @@ -6248,9 +6237,8 @@ msgid "Post" msgstr "Po" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Mesh je prázdný!" +msgstr "Sprite je prázdný!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." @@ -6265,14 +6253,12 @@ msgid "Sprite" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Konvertovat na %s" +msgstr "Konvertovat na 2D mesh" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "VytvoÅ™it mesh obrysu" +msgstr "VytvoÅ™it 2D mesh" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " @@ -6288,9 +6274,8 @@ msgid "Update Preview" msgstr "Náhled" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "NastavenÃ" +msgstr "NastavenÃ:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6349,9 +6334,8 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "ZkopÃrovat uzly" +msgstr "PÅ™emÃstit (pÅ™ed)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" @@ -6538,6 +6522,11 @@ msgid "Fix Invalid Tiles" msgstr "Neplatný název." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Vycentrovat výbÄ›r" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6584,24 +6573,31 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Odstranit výbÄ›r" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "OtoÄit o 0 stupňů" +#, fuzzy +msgid "Rotate left" +msgstr "Režim otáÄenÃ" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "OtoÄit polygon" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "OtoÄit o 90 stupňů" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "OtoÄit o 180 stupňů" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "OtoÄit o 270 stupňů" +#, fuzzy +msgid "Clear transform" +msgstr "Animace: zmÄ›na transformace" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6632,7 +6628,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6648,7 +6644,7 @@ msgid "Merge from scene?" msgstr "SlouÄit ze scény?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6733,6 +6729,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Exportnà šablony pro tuto platformu chybà nebo jsou poÅ¡kozené:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "právÄ› uvolnÄ›no" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportovat" + +#: editor/project_export.cpp msgid "Presets" msgstr "PÅ™edvolby" @@ -6741,6 +6747,11 @@ msgid "Add..." msgstr "PÅ™idat..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Exportovat projekt" + +#: editor/project_export.cpp msgid "Resources" msgstr "Zdroje" @@ -6800,6 +6811,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Expertnà režim:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exportovat" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Exportnà šablony pro tuto platformu chybÃ:" @@ -7009,18 +7030,20 @@ msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" +"V této chvÃli nemáte žádný projekt.\n" +"PÅ™ejete si prozkoumat oficiálnà ukázkové projekty v knihovnÄ› assetů?" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "" +msgstr "Klávesa " #: editor/project_settings_editor.cpp msgid "Joy Button" -msgstr "" +msgstr "TlaÄÃtko gamepadu" #: editor/project_settings_editor.cpp msgid "Joy Axis" -msgstr "" +msgstr "Osa gamepadu" #: editor/project_settings_editor.cpp msgid "Mouse Button" @@ -7264,10 +7287,6 @@ msgstr "Nastavenà projektu (project.godot)" msgid "General" msgstr "VÅ¡eobecné" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Vlastnost:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7401,10 +7420,6 @@ msgstr "Vybrat uzel" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Vlastnosti:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Vybrat vlastnost" @@ -7432,11 +7447,11 @@ msgstr "RozliÅ¡ovat malá/velká" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Prefix" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Sufix" #: editor/rename_dialog.cpp #, fuzzy @@ -7457,18 +7472,16 @@ msgid "Node's parent name, if available" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Vyhledat typ uzlu" +msgstr "Typ uzlu" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Aktuálnà scéna" +msgstr "Název aktuálnà scény" #: editor/rename_dialog.cpp msgid "Root node name" -msgstr "" +msgstr "Název koÅ™enového uzlu" #: editor/rename_dialog.cpp msgid "" @@ -7489,12 +7502,11 @@ msgid "Initial value for the counter" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Krok:" +msgstr "Krok" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7503,14 +7515,13 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "ZmÄ›nit výraz" +msgstr "Regulárnà výrazy" #: editor/rename_dialog.cpp msgid "Post-Process" @@ -7533,21 +7544,19 @@ msgid "Case" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Malá pÃsmena" +msgstr "Na malá pÃsmena" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Velká pÃsmena" +msgstr "Na velká pÃsmena" #: editor/rename_dialog.cpp #, fuzzy msgid "Reset" msgstr "Obnovit původnà pÅ™iblÞenÃ" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Chyba" @@ -7606,6 +7615,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Vymazat skript" @@ -7642,6 +7655,12 @@ msgid "Save New Scene As..." msgstr "Uložit novou scénu jako..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7717,6 +7736,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "OtevÅ™Ãt Godot online dokumentaci" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Odstranit uzel/uzly" @@ -7725,15 +7749,16 @@ msgid "Add Child Node" msgstr "PÅ™idat podÅ™Ãzený uzel" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "ZmÄ›nit typ" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "OtevÅ™Ãt skript" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "Dává smysl!" @@ -7883,6 +7908,11 @@ msgid "Path is empty" msgstr "Cesta je prázdná" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Sprite je prázdný!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Cesta nenà mÃstnÃ" @@ -7972,20 +8002,8 @@ msgid "Bytes:" msgstr "Bajtů:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "VarovánÃ" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Chyba:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Zdroj:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funkce:" +msgid "Stack Trace" +msgstr "" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8016,20 +8034,8 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "PromÄ›nná" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Chyby:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "" +msgstr "Profiler" #: editor/script_editor_debugger.cpp msgid "Monitor" @@ -8053,7 +8059,7 @@ msgstr "Celkem:" #: editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "" +msgstr "Video pamÄ›t" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -8396,7 +8402,7 @@ msgstr "" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Název tÅ™Ãdy nemůže být rezervované klÃÄové slovo" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8420,7 +8426,7 @@ msgstr "Hotovo" #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create C# project." -msgstr "" +msgstr "VytvoÅ™enà C# projektu selhalo." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" @@ -8436,7 +8442,7 @@ msgstr "VytvoÅ™it C# Å™eÅ¡enÃ" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Builds" -msgstr "" +msgstr "SestavenÃ" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Build Project" @@ -8456,11 +8462,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8745,6 +8747,10 @@ msgid "Base Type:" msgstr "Základnà typ:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "ÄŒlenové:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Dostupné uzly:" @@ -8847,11 +8853,11 @@ msgid "Search VisualScript" msgstr "Odstranit VisualScript uzel" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "ZÃskat" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8946,6 +8952,12 @@ msgid "" "shape resource for it!" msgstr "CollisionShape2D musà obsahovat tvar. ProsÃm vytvoÅ™te zdrojový tvar." +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8990,6 +9002,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D funguje pouze když je dÃtÄ›tem uzlu Path2D." @@ -9118,6 +9136,16 @@ msgstr "" "Aby CollisionShape mohl fungovat, musà mu být poskytnut tvar. VytvoÅ™te mu " "prosÃm zdroj tvar!" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9141,6 +9169,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D funguje pouze když je dÃtÄ›tem uzlu Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D funguje pouze když je dÃtÄ›tem uzlu Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9178,7 +9226,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9254,10 +9302,6 @@ msgstr "Pozor!" msgid "Please Confirm..." msgstr "PotvrÄte prosÃm..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Vybrat tuto složku" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9268,6 +9312,10 @@ msgstr "" "popup*() funkcÃ. I když je jejich zviditelnÄ›nà pro úpravu v pořádku, za bÄ›hu " "budou skryty." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9343,6 +9391,99 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "PÅ™iblÞit:" + +#~ msgid "Class List:" +#~ msgstr "Seznam tÅ™Ãd:" + +#~ msgid "Search Classes" +#~ msgstr "Hledat tÅ™Ãdy" + +#~ msgid "Public Methods" +#~ msgstr "VeÅ™ejné metody" + +#~ msgid "Public Methods:" +#~ msgstr "VeÅ™ejné metody:" + +#~ msgid "Property: " +#~ msgstr "Vlastnost: " + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Zobrazit oblÃbené" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "VytvoÅ™it složku" + +#~ msgid "Whole words" +#~ msgstr "Celá slova" + +#~ msgid "Match case" +#~ msgstr "RozliÅ¡ovat velikost pÃsmen" + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Zobrazit v systému souborů" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Hledat v hierarchii tÅ™Ãd." + +#~ msgid "Search in files" +#~ msgstr "Hledat v souborech" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "VestavÄ›né skripty lze editovat pouze pokud scéna, které náležÃ, je naÄtená" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Konvertovat na velká pÃsmena" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Konvertovat na malá pÃsmena" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "PÅ™ichytit k mřÞce" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "OtoÄit o 0 stupňů" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "OtoÄit o 90 stupňů" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "OtoÄit o 180 stupňů" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "OtoÄit o 270 stupňů" + +#~ msgid "Warning" +#~ msgstr "VarovánÃ" + +#~ msgid "Error:" +#~ msgstr "Chyba:" + +#~ msgid "Source:" +#~ msgstr "Zdroj:" + +#~ msgid "Function:" +#~ msgstr "Funkce:" + +#~ msgid "Variable" +#~ msgstr "PromÄ›nná" + +#~ msgid "Errors:" +#~ msgstr "Chyby:" + +#~ msgid "Get" +#~ msgstr "ZÃskat" + #~ msgid "Change Scalar Constant" #~ msgstr "ZmÄ›nit skalárnà konstantu" @@ -9645,9 +9786,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "právÄ› stisknuto" -#~ msgid "just released" -#~ msgstr "právÄ› uvolnÄ›no" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " diff --git a/editor/translations/da.po b/editor/translations/da.po index d3a036452a..c92d2f2ece 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -8,18 +8,19 @@ # Kim Nielsen <kimmowich@stofanet.dk>, 2017, 2018. # Michael Madsen <mim@michael-madsen.dk>, 2017. # Christoffer Schindel <ceas@outlook.com>, 2018. +# frederikzt <frederikzt@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-15 20:35+0000\n" -"Last-Translator: David Lamhauge <davidlamhauge@gmail.com>\n" +"PO-Revision-Date: 2018-11-21 19:07+0000\n" +"Last-Translator: frederikzt <frederikzt@gmail.com>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\n" "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 3.2-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +28,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Ugyldigt type argument til convert(), brug TYPE_* konstanter." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Ikke nok bytes til afkodning af bytes, eller ugyldigt format." @@ -46,18 +47,16 @@ msgid "Invalid operands to operator %s, %s and %s." msgstr "Ugyldigt indeks egenskabsnavn '%s' i noden %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Ugyldigt indeks egenskabsnavn '%s' i noden %s." +msgstr "Ugyldigt indeks af type %s for basistype %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" msgstr "" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Ugyldigt argument af typen: " +msgstr "Ugyldige argumenter til at konstruere '%s'" #: core/math/expression.cpp msgid "On call to '%s':" @@ -77,19 +76,16 @@ msgid "Mirror" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Anim Indsæt Nøgle" +msgstr "Indsæt nøgle her" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplikér Valgte" +msgstr "Duplikér valgte nøgle(r)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Slet Valgte" +msgstr "Slet valgte nøgle(r)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -145,14 +141,12 @@ msgid "Animation Playback Track" msgstr "Stop animation afspilning. (S)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Anim Tilføj Spor" +msgstr "Tilføj Spor" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Animations Længde (i sekunder)." +msgstr "Animations længde (i sekunder)" #: editor/animation_track_editor.cpp #, fuzzy @@ -402,8 +396,7 @@ msgstr "Skalér Valgte" msgid "Scale From Cursor" msgstr "Skaler Fra Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplikér Valgte" @@ -417,11 +410,13 @@ msgid "Delete Selection" msgstr "Slet Valgte" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "GÃ¥ Til Næste Trin" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "GÃ¥ Til Forrige Trin" #: editor/animation_track_editor.cpp @@ -524,11 +519,11 @@ msgstr "Ingen Match" msgid "Replaced %d occurrence(s)." msgstr "Erstattede %d forekomst(er)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Match stor/lille" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Hele Ord" @@ -561,11 +556,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Zoom Ind" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linje:" @@ -598,6 +592,7 @@ msgstr "Tilføj" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -678,7 +673,7 @@ msgid "Edit Connection: " msgstr "Forbindelses fejl" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -733,17 +728,14 @@ msgstr "Seneste:" msgid "Search:" msgstr "Søgning:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Matches:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Beskrivelse:" @@ -804,9 +796,10 @@ msgid "Search Replacement Resource:" msgstr "Søg Erstatnings Ressource:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -839,7 +832,8 @@ msgid "Error loading:" msgstr "Fejl under indlæsning:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Indlæs af Scene fejler, fordi den er afhængig af noget der mangler:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -898,14 +892,6 @@ msgstr "Ændre Dictionary Værdi" msgid "Thanks from the Godot community!" msgstr "Tak fra Godot fællesskabet!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Ok" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine bidragsydere" @@ -1081,8 +1067,7 @@ msgid "Bus options" msgstr "Bus muligheder" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikere" @@ -1158,7 +1143,7 @@ msgstr "Indlæs" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "Indlæs et eksisterende Bus Layout" +msgstr "Indlæs et eksisterende Bus Layout." #: editor/editor_audio_buses.cpp msgid "Save As" @@ -1255,8 +1240,9 @@ msgstr "Sti:" msgid "Node Name:" msgstr "Node Navn:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Navn" @@ -1326,12 +1312,17 @@ msgid "Template file not found:" msgstr "Skabelonfil ikke fundet:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Vælg nurværende mappe" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Filen Eksisterer, Overskrives?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Vælg nurværende mappe" +#, fuzzy +msgid "Select This Folder" +msgstr "Vælg Method" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1339,12 +1330,13 @@ msgstr "Kopier Sti" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Vis I Fil Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Vis I Fil Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1380,7 +1372,8 @@ msgid "Open a File or Directory" msgstr "Ã…ben en Fil eller Mappe" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Gem" @@ -1438,8 +1431,7 @@ msgstr "Mapper & Filer:" msgid "Preview:" msgstr "ForhÃ¥ndsvisning:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Fil:" @@ -1455,24 +1447,11 @@ msgstr "Skan Kilder" msgid "(Re)Importing Assets" msgstr "(Gen)Importér Aktiver" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Søg i Hjælp" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Class Liste:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Søg Classes" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Top" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Class:" @@ -1489,28 +1468,31 @@ msgid "Brief Description:" msgstr "Kort Beskrivelse:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Medlemmer" +msgid "Properties" +msgstr "Egenskaber" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Medlemmer:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Public Methods" +msgid "Methods" +msgstr "Metoder" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Public Methods:" +#, fuzzy +msgid "Methods:" +msgstr "Metoder" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI Temaelementer" +#, fuzzy +msgid "Theme Properties" +msgstr "Egenskaber" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI Temaelementer:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Egenskaber" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1537,10 +1519,16 @@ msgid "Constants:" msgstr "Constants:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Beskrivelse" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Beskrivelse:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Online Undervisning:" @@ -1555,11 +1543,13 @@ msgstr "" "beskrivelse!" #: editor/editor_help.cpp -msgid "Properties" -msgstr "Egenskaber" +#, fuzzy +msgid "Property Descriptions" +msgstr "Beskrivelse af Egenskaber:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Beskrivelse af Egenskaber:" #: editor/editor_help.cpp @@ -1571,11 +1561,13 @@ msgstr "" "ved at give os dit [color=$color][url=$url]bidrag[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metoder" +#, fuzzy +msgid "Method Descriptions" +msgstr "Metode Beskrivelse:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Metode Beskrivelse:" #: editor/editor_help.cpp @@ -1587,12 +1579,61 @@ msgstr "" "hjælp, hvis du kan [color=$color][url=$url]bidrage[/url][/color] med en " "beskrivelse!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Søg i Hjælp" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Erstat Alle" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Klasser" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metoder" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Signals Only" +msgstr "Signaler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Constants" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Egenskaber" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "Egenskaber" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Medlemmer" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Class:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1626,6 +1667,11 @@ msgstr "Projekt eksport fejlede med fejlkode %d." msgid "Error saving resource!" msgstr "Fejl, kan ikke gemme ressource!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Ok" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Gem Ressource Som..." @@ -1681,12 +1727,22 @@ msgstr "Denne handling kan ikke foretages uden tree root" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Kunne ikke gemme scene. Der er nogle afhængigheder (forekomster) som ikke " "kunne opfyldes." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Can't load MeshLibrary for merging!" @@ -1943,6 +1999,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Kan ikke indlæse addon script fra stien: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Kan ikke indlæse addon script fra sti: '%s' Script er ikke i " +"værktøjstilstand." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1991,6 +2056,12 @@ msgstr "Slet Layout" msgid "Default" msgstr "Standard" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Vis I Fil Manager" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2077,7 +2148,8 @@ msgid "Save Scene" msgstr "Gem Scene" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Gem alle Scener" #: editor/editor_node.cpp @@ -2106,7 +2178,7 @@ msgid "Undo" msgstr "Fortryd" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Annuller Fortyd" @@ -2145,6 +2217,7 @@ msgid "Quit to Project List" msgstr "Afslut til Projekt Listen" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp #, fuzzy msgid "Debug" msgstr "Debug" @@ -2275,10 +2348,6 @@ msgstr "Organiser Eksport Skabeloner" msgid "Help" msgstr "Hjælp" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Klasser" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2373,24 +2442,24 @@ msgstr "Opdater Ændringer" msgid "Disable Update Spinner" msgstr "SlÃ¥ Opdaterings Snurrer Fra" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspektør" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importer" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Fil System" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspektør" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Udvid alle" @@ -2528,7 +2597,7 @@ msgstr "Frame %" msgid "Physics Frame %" msgstr "Fysik Frame %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tid:" @@ -2555,7 +2624,7 @@ msgstr "Tid:" msgid "Calls" msgstr "Kald" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2567,7 +2636,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2575,6 +2644,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2592,10 +2675,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2604,7 +2683,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Indsæt" @@ -2899,6 +2979,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "Kan ikke skrive til file_type_cache.cch. Gemmer ikke fil type cache!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favoritter:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "Kan ikke navigere til '%s' da det ikke blev fundet i filsystemet!" @@ -2944,7 +3029,7 @@ msgstr "Fejl under indlæsning:" msgid "Unable to update dependencies:" msgstr "Kan ikke opdatere afhængigheder:\n" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Intet navn angivet" @@ -2983,22 +3068,6 @@ msgid "Duplicating folder:" msgstr "Omdøber mappe:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Udvid alle" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Klap alle sammen" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Omdøb..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Flyt Til..." - -#: editor/filesystem_dock.cpp #, fuzzy msgid "Open Scene(s)" msgstr "Ã…bn Scene" @@ -3008,6 +3077,16 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favoritter:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Fjern fra Gruppe" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Rediger Afhængigheder..." @@ -3015,12 +3094,20 @@ msgstr "Rediger Afhængigheder..." msgid "View Owners..." msgstr "Vis Ejere..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Omdøb..." + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Duplikere" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Flyt Til..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Hurtig Ã…bn Script..." @@ -3030,6 +3117,16 @@ msgstr "Hurtig Ã…bn Script..." msgid "New Resource..." msgstr "Gem Ressource Som..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Udvid alle" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Klap alle sammen" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3051,28 +3148,19 @@ msgstr "Gen-scan Filsystemet" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Skift mappe status til Favorit" +msgid "Toggle split mode" +msgstr "Skifter Modus" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Gem den aktuelt redigerede ressource." +msgid "Search files" +msgstr "Søg Classes" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Søg Classes" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3080,7 +3168,7 @@ msgstr "" "Scanner Filer,\n" "Vent Venligst..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Flyt" @@ -3099,31 +3187,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d flere filer" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Find" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Hele Ord" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Match stor/lille" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Opret Mappe" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filter:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3141,6 +3220,11 @@ msgstr "Annuller" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Find" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Erstat" @@ -3305,17 +3389,14 @@ msgstr "Genimporter" msgid "Failed to load resource." msgstr "Fejler med at indlæse ressource." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Udvid alle egenskaber" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Klap alle egenskaber sammen" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3564,6 +3645,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3947,10 +4033,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4276,6 +4358,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4339,6 +4425,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Skifter Modus" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4434,6 +4525,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4485,6 +4581,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4924,8 +5024,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4954,6 +5053,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Konverter Til %s" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -5023,13 +5128,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Konverter Til %s" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5368,22 +5472,22 @@ msgid "Paste Resource" msgstr "Indsæt Ressource" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5416,6 +5520,11 @@ msgstr "Error loading skrifttype." #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Fejl - kunne ikke oprette script i filsystem." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Fejl - kunne ikke oprette script i filsystem." @@ -5519,12 +5628,8 @@ msgstr "Kopier Sti" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "Vis I Fil Manager" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +msgid "History Previous" +msgstr "Forrige fane" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5594,7 +5699,8 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Debug med ekstern editor" #: editor/plugins/script_editor_plugin.cpp @@ -5602,10 +5708,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5641,19 +5743,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Søg i Hjælp" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Søg Classes" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5664,6 +5756,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Tilføj Funktion" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5751,12 +5848,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "Konverter Til %s" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "Konverter Til %s" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5772,20 +5871,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "GÃ¥ Til Næste Trin" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Konverter til smÃ¥ bogstaver" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Skift/Toggle Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5793,16 +5886,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrer filer..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Fjern Funktion" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "GÃ¥ til linje" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5897,6 +5992,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6062,6 +6165,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6163,10 +6270,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6569,6 +6672,11 @@ msgid "Fix Invalid Tiles" msgstr "Ugyldigt navn." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Ryd Markerede" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6615,25 +6723,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Fjern Markering" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Anim Skift Transformering" + #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Add Texture(s) to TileSet" @@ -6663,7 +6776,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6679,7 +6792,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6759,6 +6872,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Eksporter" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6767,6 +6889,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Eksporter Projekt" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6825,6 +6952,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Eksporter Projekt" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Eksporter" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7286,10 +7423,6 @@ msgstr "" msgid "General" msgstr "Generelt" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7423,10 +7556,6 @@ msgstr "Vælg en Node" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Vælg Property" @@ -7516,7 +7645,7 @@ msgid "Step" msgstr "Trin:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7525,7 +7654,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7568,7 +7697,7 @@ msgstr "" msgid "Reset" msgstr "Nulstil Zoom" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7627,6 +7756,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Ryd Script" @@ -7663,6 +7796,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7738,6 +7877,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Ã…ben Seneste" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7746,12 +7890,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Ã…ben script" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7905,6 +8050,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7994,19 +8143,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8039,18 +8176,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8479,11 +8604,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8762,6 +8883,10 @@ msgid "Base Type:" msgstr "Basis Type:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Medlemmer:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Tilgængelige Noder:" @@ -8866,11 +8991,11 @@ msgid "Search VisualScript" msgstr "Fjern VisualScript Node" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8967,6 +9092,12 @@ msgstr "" "En figur skal gives CollisionShape2D for at det fungerer. Opret venligst en " "figur ressource for den!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9013,6 +9144,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9141,6 +9278,16 @@ msgstr "" "En figur skal gives for at CollisionShape fungerer. Opret en figur ressource " "til det!" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9164,6 +9311,28 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D virker kun, nÃ¥r den angives som et barn af en Path2D node." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D virker kun, nÃ¥r den angives som et barn af en Path2D node." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9198,7 +9367,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9274,11 +9443,6 @@ msgstr "Advarsel!" msgid "Please Confirm..." msgstr "Bekræft venligst..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Vælg Method" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9289,6 +9453,10 @@ msgstr "" "popup*() funktionerne. At gøre dem synlige for redigering er fint, men de " "bliver skjult under afvikling." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9359,6 +9527,55 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom Ind" + +#~ msgid "Class List:" +#~ msgstr "Class Liste:" + +#~ msgid "Search Classes" +#~ msgstr "Søg Classes" + +#~ msgid "Public Methods" +#~ msgstr "Public Methods" + +#~ msgid "Public Methods:" +#~ msgstr "Public Methods:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI Temaelementer" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI Temaelementer:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Egenskaber" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Skift mappe status til Favorit" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Gem den aktuelt redigerede ressource." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Hele Ord" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Match stor/lille" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Søg Classes" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Konverter til smÃ¥ bogstaver" + #~ msgid "Disabled" #~ msgstr "Deaktiveret" diff --git a/editor/translations/de.po b/editor/translations/de.po index 641d06841b..fc6396fd5b 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -31,12 +31,16 @@ # Gordon <gkone@gmx.net>, 2018. # chillhelm <wilhelm@neubert.online>, 2018. # Mathias Schmalisch <mathias.schmalisch@gmail.com>, 2018. +# Robin Bauknecht <robin.bauknecht@gmail.com>, 2018. +# Julian Retzlaff <julian.retzlaff@googlemail.com>, 2018. +# asyncial <mahlburg@posteo.de>, 2018. +# ssantos <ssantos@web.de>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-08-14 08:38+0000\n" -"Last-Translator: Mathias Schmalisch <mathias.schmalisch@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: ssantos <ssantos@web.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -44,7 +48,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 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -53,7 +57,7 @@ msgstr "" "Ungültiger Argument-Typ in convert()-Aufruf, TYPE_*-Konstanten benötigt." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -61,34 +65,31 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ungültige Eingabe %i (nicht bestanden) in Ausdruck" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "'self' kann nicht benutzt werden da die Instanz null ist (ungültig)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Ungültiger Indexeigenschaftsname ‚%s‘ in Node %s." +msgstr "Ungültige Operanden für Operator %s: %s und %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Ungültiger Indexeigenschaftsname ‚%s‘ in Node %s." +msgstr "Ungültiger Index des Typs ‚%s‘ für Grundtyp %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Ungültiger benannter Index ‚%s‘ für Grundtyp %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Ungültiger Parameter vom Typ: " +msgstr "Ungültige Parameter für die Konstruktion von ‚%s‘" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Im Aufruf von ‚%s‘:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -97,27 +98,23 @@ msgstr "Kostenlos" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Ausgeglichen" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "X-Koordinaten spiegeln" +msgstr "Gespiegelt" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Schlüsselbild einfügen" +msgstr "Hier Schlüsselbild einfügen" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Auswahl duplizieren" +msgstr "Ausgewählte Schlüssel duplizieren" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Ausgewähltes löschen" +msgstr "Ausgewählte Schlüssel löschen" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -148,46 +145,40 @@ msgid "Anim Change Call" msgstr "Aufruf ändern" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Eigenschaft:" +msgstr "Eigenschaftenspur" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Typ der Transformation" +msgstr "3D-Transformspur" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Methodenaufrufsspur" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Bezierkurvenspur" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Audiospur" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Stoppe Animations-Wiedergabe. (S)" +msgstr "Animationsspielerspur" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" msgstr "Spur hinzufügen" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Animationsdauer (in Sekunden)." +msgstr "Animationsdauer (in Sekunden)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Animation zoomen." +msgstr "Animationswiederholung" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -195,42 +186,36 @@ msgid "Functions:" msgstr "Funktionen:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Audiosenke" +msgstr "Audioschnipsel:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Ausschnitte" +msgstr "Animationsschnipsel:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Ablenkungsfreien Modus umschalten." +msgstr "Diese Spur an-/abschalten." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Aktualisierungs-Modus (wie Eigenschaften gesetzt werden)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Animations-Node" +msgstr "Interpolationsmodus" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Schleifen-Wiederhol-Modus (Interpoliert Ende und Start der Schleife)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Ausgewählte Spur entfernen." +msgstr "Diese Spur entfernen." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Überblendungszeit (s):" +msgstr "Zeit (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -245,13 +230,12 @@ msgid "Trigger" msgstr "Auslöser" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Funktionen" +msgstr "Aufnahme" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Nächste" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -260,16 +244,15 @@ msgstr "Linear" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Kubisch" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Ändere Animationswiederholung" +msgstr "Klammer-Wdrhol-Interpol" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Wickel-Wdrhol-Interpol" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -277,14 +260,12 @@ msgid "Insert Key" msgstr "Schlüsselbild einfügen" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Dupliziere Node(s)" +msgstr "Schlüsselbilder duplizieren" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Node(s) löschen" +msgstr "Schlüsselbilder entfernen" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -314,7 +295,7 @@ msgstr "Einfügen" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer kann sich nicht selbst animieren, nur andere Objekte." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -330,7 +311,7 @@ msgstr "Schlüsselbild einfügen" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Transformationsspuren gelten nur für Nodes die auf Spatial basieren." #: editor/animation_track_editor.cpp msgid "" @@ -339,44 +320,49 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Audiospuren können nur auf die folgenden Objekte zeigen:\n" +"- AudioStreamPlayer\n" +"- AudioStreamPlayer2D\n" +"- AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Animationsspuren können nur auf AnimationPlayer-Nodes zeigen." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Ein AnimationPlayer kann sich nicht selbst animieren, nur andere Objekte." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Ohne eine Wurzel kann keine neue Spur hinzugefügt werden" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Spurpfad ist ungültig, Schlüssel kann nicht hinzugefügt werden." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" msgstr "" +"Spur ist nicht vom Typ Spatial, Schlüssel kann nicht hinzugefügt werden" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" +"Spurpfad ist ungültig, Methoden-Schlüssel kann nicht hinzugefügt werden." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet nicht im Skript gefunden: " +msgstr "Methode nicht im Objekt gefunden: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Schlüsselbilder bewegen" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Zwischenablage ist leer!" +msgstr "Zwischenablage ist leer" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -386,24 +372,24 @@ msgstr "Schlüsselbilder skalieren" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Die Option ist nicht in Verbindung mit Bezier-Bearbeitung verwendbar, da es " +"sich nur um eine einzige Spur handelt." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Nur Spuren der aktuell ausgewählten Nodes anzeigen." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Spuren nach Node gruppieren oder nacheinander anzeigen." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Einrasten (Pixel):" +msgstr "Einrasten (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Animationsbaum ist gültig." +msgstr "Animationsschrittwert." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -415,19 +401,16 @@ msgid "Edit" msgstr "Bearbeiten" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimationTree" +msgstr "Animationseigenschaften." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Parameter kopieren" +msgstr "Spuren kopieren" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Parameter einfügen" +msgstr "Spuren einfügen" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -437,8 +420,7 @@ msgstr "Auswahl skalieren" msgid "Scale From Cursor" msgstr "Vom Cursor skalieren" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Auswahl duplizieren" @@ -447,17 +429,16 @@ msgid "Duplicate Transposed" msgstr "Transponierte duplizieren" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Ausgewähltes löschen" +msgstr "Auswahl löschen" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" -msgstr "Gehe zum nächsten Schritt" +msgid "Go to Next Step" +msgstr "Zum nächsten Schritt" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" -msgstr "Gehe zum vorherigen Schritt" +msgid "Go to Previous Step" +msgstr "Zum vorherigen Schritt" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -469,11 +450,11 @@ msgstr "Animation bereinigen" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Zu animierendes Node auswählen:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Bezier-Kurven nutzen" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -521,7 +502,7 @@ msgstr "Skalierungsverhältnis:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Zu kopierende Spuren auswählen:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -559,11 +540,11 @@ msgstr "Keine Übereinstimmungen" msgid "Replaced %d occurrence(s)." msgstr "Suchbegriff wurde %d mal ersetzt." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Groß-/Kleinschreibung berücksichtigen" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Ganze Wörter" @@ -592,16 +573,15 @@ msgid "Reset Zoom" msgstr "Vergrößerung zurücksetzen" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Warnungen" +msgstr "Warnungen:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Vergrößerung (%):" +msgid "Font Size:" +msgstr "Quellschriftgröße:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Zeile:" @@ -634,6 +614,7 @@ msgstr "Hinzufügen" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -690,9 +671,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' von '%s' trennen" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "'%s' von '%s' trennen" +msgstr "Alle Verbindungen des Signal trennen: ‚%s‘" #: editor/connections_dialog.cpp msgid "Connect..." @@ -704,19 +684,16 @@ msgid "Disconnect" msgstr "Trennen" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Signal verbinden:" +msgstr "Signal verbinden: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Verbindungen bearbeiten" +msgstr "Verbindung bearbeiten: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Sollen wirklich mehrere Projekte ausgeführt werden?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Sollen wirklich alle Verbindungen des Signals „%s“ entfernt werden?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -724,22 +701,19 @@ msgstr "Signale" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Sollen wirklich alle Verbindungen mit diesem Signal entfernt werden?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Trennen" +msgstr "Alle Verbindungen lösen" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Bearbeiten" +msgstr "Bearbeiten..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Methoden" +msgstr "Zur Methode springen" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -770,17 +744,14 @@ msgstr "Kürzlich:" msgid "Search:" msgstr "Suche:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Treffer:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Beschreibung:" @@ -841,9 +812,10 @@ msgid "Search Replacement Resource:" msgstr "Ersatzressource suchen:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -878,9 +850,8 @@ msgid "Error loading:" msgstr "Fehler beim Laden:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "" -"Die Szene konnte aufgrund fehlender Abhängigkeiten nicht geladen werden:" +msgid "Load failed due to missing dependencies:" +msgstr "Ladefehler aufgrund fehlender Abhängigkeiten:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -939,14 +910,6 @@ msgstr "Wörterbuchwert ändern" msgid "Thanks from the Godot community!" msgstr "Die Godot-Gemeinschaft bedankt sich!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Mitwirkende der Godot Engine" @@ -1123,8 +1086,7 @@ msgid "Bus options" msgstr "Audiobusoptionen" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplizieren" @@ -1297,8 +1259,9 @@ msgstr "Pfad:" msgid "Node Name:" msgstr "Node-Name:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Name" @@ -1368,26 +1331,29 @@ msgid "Template file not found:" msgstr "Vorlagendatei nicht gefunden:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Gegenwärtigen Ordner auswählen" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Datei existiert bereits. Überschreiben?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Gegenwärtigen Ordner auswählen" +msgid "Select This Folder" +msgstr "Diesen Ordner auswählen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Pfad kopieren" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Zeige im Dateimanager" +msgid "Open in File Manager" +msgstr "Im Dateimanager öffnen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "Zeige im Dateimanager" +msgid "Show in File Manager" +msgstr "Im Dateimanager anzeigen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1422,7 +1388,8 @@ msgid "Open a File or Directory" msgstr "Datei oder Verzeichnis öffnen" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Speichern" @@ -1480,8 +1447,7 @@ msgstr "Verzeichnisse & Dateien:" msgid "Preview:" msgstr "Vorschau:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Datei:" @@ -1497,62 +1463,49 @@ msgstr "Lese Quellen" msgid "(Re)Importing Assets" msgstr "Importiere Nutzerinhalte erneut" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Hilfe durchsuchen" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Klassenliste:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Klassen suchen" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Oben" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Klasse:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "Erbt:" +msgstr "Erbt von:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "Geerbt von:" +msgstr "Vererbt an:" #: editor/editor_help.cpp msgid "Brief Description:" msgstr "Kurze Beschreibung:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Mitglieder" +msgid "Properties" +msgstr "Eigenschaften" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Mitglieder:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Eigenschaften:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Öffentliche Methoden" +msgid "Methods" +msgstr "Methoden" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Öffentliche Methoden:" +msgid "Methods:" +msgstr "Methoden:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI-Thema-Elemente" +msgid "Theme Properties" +msgstr "Motiv-Eigenschaften" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI-Theme-Elemente:" +msgid "Theme Properties:" +msgstr "Motiv-Eigenschaften:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1579,8 +1532,12 @@ msgid "Constants:" msgstr "Konstanten:" #: editor/editor_help.cpp -msgid "Description" -msgstr "Beschreibung" +msgid "Class Description" +msgstr "Klassenbeschreibung" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "Klassenbeschreibung:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1597,12 +1554,12 @@ msgstr "" "$url2]Meldung von Problemen[/url][/color] sind sehr erwünscht." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Eigenschaften" +msgid "Property Descriptions" +msgstr "Eigenschaften-Beschreibung" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "Eigenschaft-Beschreibung:" +msgid "Property Descriptions:" +msgstr "Eigenschaften-Beschreibung:" #: editor/editor_help.cpp msgid "" @@ -1613,11 +1570,11 @@ msgstr "" "$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Methoden" +msgid "Method Descriptions" +msgstr "Methoden-Beschreibung" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "Methoden-Beschreibung:" #: editor/editor_help.cpp @@ -1628,18 +1585,58 @@ msgstr "" "Es gibt zurzeit keine Beschreibung dieser Methode. [color=$color][url=" "$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Hilfe durchsuchen" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Alles anzeigen" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Nur Klassen" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Nur Methoden" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Nur Signale" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Nur Konstanten" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Nur Eigenschaften" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Nur Motiv-Eigenschaften" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Mitgliedstyp" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "Klasse" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Eigenschaft:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" -msgstr "Setzen" +msgstr "Setze" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Setze mehrere:" #: editor/editor_log.cpp msgid "Output:" @@ -1667,6 +1664,11 @@ msgstr "Projekt-Export ist fehlgeschlagen mit Fehlercode %d." msgid "Error saving resource!" msgstr "Fehler beim speichern der Ressource!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Speichere Ressource als..." @@ -1686,6 +1688,8 @@ msgstr "Fehler beim speichern." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" +"Datei ‚%s‘ kann nicht geöffnet werden. Die Datei könnte verschoben oder " +"gelöscht sein." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1721,12 +1725,22 @@ msgstr "Diese Aktion kann nicht ohne eine Wurzel ausgeführt werden." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Szene konnte nicht gespeichert werden. Wahrscheinlich werden Abhängigkeiten " "(Instanzen oder Vererbungen) nicht erfüllt." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Momentan geöffnete Szenen können nicht überschrieben werden!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "MeshLibrary konnte nicht zum vereinen geladen werden!" @@ -1989,6 +2003,14 @@ msgstr "Erweiterungsskript konnte nicht geladen werden: ‚%s‘." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Erweiterungsskript konnte nicht von folgendem Pfad geladen werden: ‚%s‘. Es " +"scheint ein Fehler im Quellcode zu sein. Bitte Syntax überprüfen." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Erweiterungsskript konnte nicht geladen werden: ‚%s‘ Basistyp ist nicht " @@ -2040,15 +2062,18 @@ msgstr "Layout löschen" msgid "Default" msgstr "Standard" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Im Dateisystem anzeigen" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Szene starten" +msgstr "Diese Szene abspielen" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Andere Tabs schließen" +msgstr "Tab schließen" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2123,7 +2148,7 @@ msgid "Save Scene" msgstr "Szene speichern" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Alle Szenen speichern" #: editor/editor_node.cpp @@ -2144,7 +2169,7 @@ msgstr "Mesh-Bibliothek..." #: editor/editor_node.cpp msgid "TileSet..." -msgstr "TileSet..." +msgstr "Tile Set…" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2152,7 +2177,7 @@ msgid "Undo" msgstr "Rückgängig machen" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Wiederherstellen" @@ -2181,15 +2206,15 @@ msgid "Tools" msgstr "Werkzeuge" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Projektverwaltung öffnen?" +msgstr "Projektdatenordner öffnen" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Verlasse zur Projektverwaltung" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Debuggen" @@ -2298,18 +2323,16 @@ msgid "Toggle Fullscreen" msgstr "Vollbildmodus umschalten" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Editoreinstellungen" +msgstr "Editordaten-/Einstellungenordner öffnen" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Editor-Dateiverzeichnis öffnen" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Editoreinstellungen" +msgstr "Editoreinstellungenordner öffnen" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2319,10 +2342,6 @@ msgstr "Verwalte Exportvorlagen" msgid "Help" msgstr "Hilfe" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Klassen" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2393,13 +2412,12 @@ msgstr "Spiele angepasste Szene" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Das Ändern des Video-Treibers erfordert einen Neustart des Editors." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Speichern & neu importieren" +msgstr "Speichern & Neu starten" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2417,27 +2435,26 @@ msgstr "Änderungen aktualisieren" msgid "Disable Update Spinner" msgstr "Update-Anzeigerad deaktivieren" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspektor" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Import" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Dateisystem" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspektor" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Alle expandieren" +msgstr "Unteres Panel vergrößern" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2516,9 +2533,8 @@ msgid "Thumbnail..." msgstr "Vorschau..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Polygon bearbeiten" +msgstr "Plugin bearbeiten" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2542,15 +2558,13 @@ msgid "Status:" msgstr "Status:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Bearbeiten" +msgstr "Bearbeiten:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Start!" +msgstr "Start" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2558,31 +2572,31 @@ msgstr "Messung:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "Bild Zeit (Sek)" +msgstr "Renderzeit (Sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "Durchschnittszeit (Sek)" +msgstr "Renderzeit ⌀ (sek)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "Bild %" +msgstr "Relative Renderzeit %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "Physik-Frame %" +msgstr "Physik-relative Renderzeit %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Zeit:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "Inklusive" +msgstr "Gesamt" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Selbst" +msgstr "Eigenanteil" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2596,27 +2610,46 @@ msgstr "Zeit" msgid "Calls" msgstr "Aufrufe" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "An" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Schicht" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, Wert %d." +msgstr "Bit %d, Wert %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[leer]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Zuweisen" +msgstr "Zuweisen.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"ViewportTextures können nicht für Ressourcen erstellt werden die als Datei " +"gespeichert sind.\n" +"Diese Ressourcen müssen zu einer Szene gehören." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"ViewportTexture kann für diese Ressource nicht erstellt werden weil sie " +"nicht als lokal zu einer Szene markiert wurde.\n" +"Bitte die ‚Lokal zu Szene‘-Eigenschaft an dieser Ressource aktivieren (und " +"an allen Ressourcen die sie enthalten, bis zum nächsten Node)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2635,10 +2668,6 @@ msgstr "Neues %s" msgid "Make Unique" msgstr "Einzigartig machen" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Im Dateisystem anzeigen" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2647,7 +2676,8 @@ msgstr "Im Dateisystem anzeigen" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Einfügen" @@ -2660,36 +2690,32 @@ msgstr "Umwandeln zu %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Im Editor öffnen" +msgstr "Editor öffnen" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Ausgewähltes Node ist kein Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Zellgröße:" +msgstr "Größe: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Seite: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Neuer Name:" +msgstr "Neuer Schlüssel:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Neuer Name:" +msgstr "Neuer Wert:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Schlüssel-Wert-Paar hinzufügen" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2782,9 +2808,8 @@ msgid "Can't open export templates zip." msgstr "Exportvorlagen-ZIP-Datei konnte nicht geöffnet werden." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Ungültiges version.txt-Format in Templates." +msgstr "Ungültiges version.txt-Format in Templates: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2849,6 +2874,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Template-Installation fehlgeschlagen. Des problematische Template-Archiv " +"befindet sich hier: ‚%s‘." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2929,9 +2956,8 @@ msgid "Download Templates" msgstr "Lade Template herunter" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Mirror aus Liste auswählen: " +msgstr "Mirror aus Liste auswählen: (Umsch-Klick: In Browser öffnen)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2940,20 +2966,22 @@ msgstr "" "Der Dateityp-Cache wird nicht gespeichert!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Favoriten" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Kann nicht zu '%s' navigierien, da es sich nicht im Dateisystem gefunden " "wurde!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Einträge in Vorschaugitter anzeigen" +msgstr "Einträge in Vorschaugitter anzeigen." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Einträge als Liste anzeigen" +msgstr "Einträge als Liste anzeigen." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2980,7 +3008,7 @@ msgstr "Fehler beim Duplizieren:" msgid "Unable to update dependencies:" msgstr "Fehler beim Aktualisieren der Abhängigkeiten:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Kein Name angegeben" @@ -3017,22 +3045,6 @@ msgid "Duplicating folder:" msgstr "Dupliziere Ordner:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Alle expandieren" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Alle einklappen" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Umbenennen..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Verschiebe zu..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Szene(n) öffnen" @@ -3041,6 +3053,14 @@ msgid "Instance" msgstr "Instanz" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Zu Favoriten hinzufügen" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Aus Favoriten entfernen" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Abhängigkeiten bearbeiten..." @@ -3048,19 +3068,33 @@ msgstr "Abhängigkeiten bearbeiten..." msgid "View Owners..." msgstr "Zeige Besitzer..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Umbenennen..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplizieren..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Verschiebe zu..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Neues Skript" +msgstr "Neues Skript..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Speichere Ressource als..." +msgstr "Neue Ressource..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "Alle ausklappen" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Alle einklappen" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3082,29 +3116,18 @@ msgid "Re-Scan Filesystem" msgstr "Dateisystem erneut einlesen" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Favoriten-Verzeichnisstatus umschalten" +msgid "Toggle split mode" +msgstr "Geteilten Modus umschalten" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Speichere die so eben bearbeitete Unterkachel." +msgid "Search files" +msgstr "Dateien suchen" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instantiiere gewählte Szene(n) als Unterobjekt des ausgewählten Nodes." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Klassen suchen" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3112,51 +3135,38 @@ msgstr "" "Lese Dateien,\n" "Bitte warten..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Verschieben" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." msgstr "" -"Es existiert bereits ein Ordner an diesem Pfad mit dem angegebenen Namen." +"Es existiert bereits eine Datei oder ein Ordner an diesem Pfad mit dem " +"angegebenen Namen." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Überschreiben" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "Erstelle Skript" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Finde Kachel" +msgid "Find in Files" +msgstr "In Dateien suchen" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Finden" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "Ganze Wörter" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Groß-/Kleinschreibung berücksichtigen" +msgid "Find:" +msgstr "Suche:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Verzeichnis:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filter:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3173,52 +3183,48 @@ msgid "Cancel" msgstr "Abbrechen" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Suche: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Ersetzen" +msgstr "Ersetzen: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Alle ersetzen" +msgstr "Alle ersetzen (nicht rückgängig)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Speichere..." +msgstr "Am suchen..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Suchtext" +msgstr "Suche abgeschlossen" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "FEHLER: Animationsname existiert bereits!" +msgstr "Gruppenname existiert bereits." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Ungültiger Name." +msgstr "Ungültiger Gruppenname." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Gruppen" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Zu Gruppe hinzufügen" +msgstr "Nodes nicht in der Gruppe" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Nodes filtern" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Gruppen bearbeiten" +msgstr "Nodes in der Gruppe" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3229,9 +3235,8 @@ msgid "Remove from Group" msgstr "Aus Gruppe entfernen" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Bildergruppen" +msgstr "Gruppen verwalten" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3312,7 +3317,7 @@ msgstr "Speichere..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "Standard für ‚%s‘ setzen" +msgstr "Als Standard für ‚%s‘ setzen" #: editor/import_dock.cpp msgid "Clear Default for '%s'" @@ -3338,17 +3343,12 @@ msgstr "Neuimport" msgid "Failed to load resource." msgstr "Laden der Ressource gescheitert." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "Alle Eigenschaften ausklappen" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "Alle Eigenschaften einklappen" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3365,9 +3365,8 @@ msgid "Paste Params" msgstr "Parameter einfügen" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Zwischenablage für Ressourcen ist leer!" +msgstr "Ressourcen-Zwischenablage bearbeiten" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3379,7 +3378,7 @@ msgstr "Einbetten" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" -msgstr "Unter-Ressource Einzigartig Machen" +msgstr "Unter-Ressource einzigartig machen" #: editor/inspector_dock.cpp msgid "Open in Help" @@ -3410,9 +3409,8 @@ msgid "Object properties." msgstr "Objekteigenschaften." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Nodes filtern" +msgstr "Eigenschaften filtern" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3427,37 +3425,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Node auswählen um Signale und Gruppen zu bearbeiten." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Polygon bearbeiten" +msgstr "Ein Plugin bearbeiten" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Erzeuge C#-Lösung" +msgstr "Ein Plugin erstellen" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Plugin Liste:" +msgstr "Pluginname:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Unterverzeichnis:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Sprache" +msgstr "Sprache:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Skript gültig" +msgstr "Skriptname:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Sofort aktivieren?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3516,15 +3509,15 @@ msgstr "Animation hinzufügen" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Lade" +msgstr "Lade.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Dieser Node-Type kann nicht verwendet werden. Nur Wurzel-Nodes sind möglich." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3534,67 +3527,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree ist inaktiv.\n" +"Aktivieren um Abspielen zu starten, Node-Warnungen sollten überprüft werden " +"falls Aktivierung fehlschlägt." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Übergangsposition innerhalb des Raums setzen" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Punkte auswählen und verschieben, erstellen mit RMT." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Punkte entfernen" +msgstr "Punkte erstellen." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "RMT: Punkt entfernen." +msgstr "Punkte löschen." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Punkt verschieben" +msgstr "Punkt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Animations-Node" +msgstr "Animations-Node öffnen" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Aktion ‚%s‘ existiert bereits!" +msgstr "Dreieck existiert bereits" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D gehört nicht zu einem AnimationTree-Node." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Es existieren keine Dreiecke, Vermischen nicht möglich." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Dreiecke durch Punkteverbinden herstellen." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "Analysiere %d Dreiecke:" +msgstr "Punkte und Dreiecke löschen." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Vermischungsdreiecke automatisch erstellen (statt manuell)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3602,6 +3592,11 @@ msgstr "" msgid "Snap" msgstr "Einrasten" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Blende:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3609,20 +3604,24 @@ msgstr "Filter bearbeiten" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Ausgabe-Node kann nicht zum Mischungsbaum hinzugefügt werden." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Verbindung nicht möglich, Port ist eventuell bereits in Benutzung oder " +"Verbindung ist ungültig." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Kein Animationsspieler festgelegt, Spurnamen können nicht abgerufen werden." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Animationsspieler-Pfad ist ungültig, Spurnamen können nicht abgerufen werden." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3630,23 +3629,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Animationsspieler hat keinen gültigen Wurzel-Node-Pfad, Spurnamen können " +"nicht abgerufen werden." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Node hinzufügen" +msgstr "Node hinzufügen.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Filter bearbeiten" +msgstr "Gefilterte Spuren bearbeiten:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "bearbeitbare Unterobjekte" +msgstr "Filtern aktivieren" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3674,14 +3672,12 @@ msgid "Remove Animation" msgstr "Animation entfernen" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "FEHLER: ungültiger Animationsname!" +msgstr "Ungültiger Animationsname!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "FEHLER: Animationsname existiert bereits!" +msgstr "Animationsname existiert bereits!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3705,14 +3701,12 @@ msgid "Duplicate Animation" msgstr "Animation duplizieren" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "Fehler: Keine Animation zum kopieren!" +msgstr "Keine Animation zum kopieren!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "FEHLER: Keine Animations-Ressource im Zwischenspeicher!" +msgstr "Keine Animations-Ressource in der Zwischenablage!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3723,9 +3717,8 @@ msgid "Paste Animation" msgstr "Animation einfügen" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "FEHLER: Keine Animation zum bearbeiten!" +msgstr "Keine Animation zum bearbeiten!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3769,14 +3762,12 @@ msgid "New" msgstr "Neu" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Bearbeite Verbindungen..." +msgstr "Übergänge bearbeiten..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Im Editor öffnen" +msgstr "Im Inspektor öffnen" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3835,9 +3826,8 @@ msgid "Include Gizmos (3D)" msgstr "Griffe (3D) einbeziehen" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Animation einfügen" +msgstr "Animationsspieler anheften" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3868,34 +3858,32 @@ msgid "Cross-Animation Blend Times" msgstr "Übergangszeiten kreuzender Animationen" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" msgstr "Ende" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Unmittelbar" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Synchronisieren" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Am Ende" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Fortlaufend" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Star- und End-Nodes werden für Sub-Transition benötigt." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Nicht im Ressourcen-Pfad." +msgstr "Keine Abspiel-Ressource festgelegt im Pfad: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3903,34 +3891,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Node auswählen und verschieben.\n" +"RMT zum Hinzufügen neuer Nodes.\n" +"Umsch-LMT um Verbindungen herzustellen." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "%s erstellen" +msgstr "Neue Nodes erstellen." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Nodes verbinden" +msgstr "Nodes verbinden." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Ausgewählte Spur entfernen." +msgstr "Ausgewähltes Node oder Übergang entfernen" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Automatische Abspielen dieser Animation zum Start, Neustart oder bei Sprung " +"zu Null festlegen." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "End-Animation festlegen. Hilfreich bei Sub-Transitionen." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Übergang" +msgstr "Übergang: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3984,10 +3973,6 @@ msgid "Amount:" msgstr "Menge:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Blende:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Blende 0:" @@ -4128,14 +4113,12 @@ msgid "Asset Download Error:" msgstr "Nutzerinhalte-Download-Fehler:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Wird heruntergeladen" +msgstr "Wird heruntergeladen (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Wird heruntergeladen" +msgstr "Wird heruntergeladen..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4162,14 +4145,12 @@ msgid "Download for this asset is already in progress!" msgstr "Dieser Nutzerinhalt wird bereits herunter geladen!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "Anfang" +msgstr "Erste" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Vorheriger Tab" +msgstr "Vorherige" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4177,7 +4158,7 @@ msgstr "Nächste" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Letzte" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4305,29 +4286,28 @@ msgid "Create new horizontal and vertical guides" msgstr "Neue horizontale und vertikale Hilfslinien erstellen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "Mittelpunkt bewegen" +msgstr "Pivotpunkt bewegen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "CanvasItem bearbeiten" +msgstr "CanvasItem rotieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "Aktion verschieben" +msgstr "Anker verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "CanvasItem bearbeiten" +msgstr "CanvasItem in Größe anpassen" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "CanvasItem skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "CanvasItem bearbeiten" +msgstr "CanvasItem verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4346,17 +4326,14 @@ msgid "Paste Pose" msgstr "Pose einfügen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" msgstr "Verkleinern" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" msgstr "Vergrößerung zurücksetzen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" msgstr "Vergrößern" @@ -4391,6 +4368,10 @@ msgid "Rotate Mode" msgstr "Rotationsmodus" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Skalierungsmodus" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4409,16 +4390,14 @@ msgid "Pan Mode" msgstr "Schwenkmodus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Einrasten umschalten" +msgstr "Einrasten umschalten." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "Einrasten aktivieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "Einrasteinstellungen" @@ -4460,9 +4439,8 @@ msgid "Snap to node sides" msgstr "An Node-Seiten einrasten" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "Am Node-Anker einrasten" +msgstr "Am Node-Mittelpunkt einrasten" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4492,6 +4470,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "Macht Unterobjekte dieses Objekts wieder auswählbar." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "Skelett-Einstellungen" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Knochen anzeigen" @@ -4505,12 +4487,11 @@ msgstr "IK-Kette zurücksetzen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Erstelle eigenständige(n) Knochen aus Node(s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Knochen entfernen" +msgstr "Spezielle Knochen löschen" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4543,6 +4524,10 @@ msgid "Show Viewport" msgstr "Zeige Ansichtsfenster (Viewport)" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Gruppe zeigen und Icons sperren" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Auswahl zentrieren" @@ -4555,9 +4540,8 @@ msgid "Layout" msgstr "Layout" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Schlüsselbilder einfügen" +msgstr "Schlüsselbilder einfügen." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4622,9 +4606,8 @@ msgid "Set Handle" msgstr "Wähle Griff" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "Partikel" +msgstr "CPU-Partikel" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4985,9 +4968,8 @@ msgid "Create Navigation Polygon" msgstr "Erzeuge Navigationspolygon" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Erzeuge AABB" +msgid "Generating Visibility Rect" +msgstr "Generiere Sichtbarkeits-Rechteck" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5017,6 +4999,11 @@ msgstr "Emissionsmaske leeren" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Zu CPU-Partikeln konvertieren" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Partikel" @@ -5086,13 +5073,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Ein Verarbeitungsmaterial des Typs ‚ParticlesMaterial‘ wird benötigt." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "Erzeuge AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "In Großbuchstaben konvertieren" +msgid "Generate AABB" +msgstr "Erzeuge AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5180,12 +5166,12 @@ msgstr "Optionen" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Griffwinkel spiegeln" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Grifflängen spiegeln" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5220,56 +5206,50 @@ msgid "Remove In-Control Point" msgstr "Eingangskontrollpunkt löschen" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Punkt verschieben" +msgstr "Gelenk verschieben" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" msgstr "" +"Die Skeleton-Eigenschaft des Polygon2Ds zeigt nicht auf ein Skeleton2D-Node" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Knochen anzeigen" +msgstr "Knochen synchronisieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Erzeuge UV-Map" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Polygon erstellen" +msgstr "Polygon und UV erstellen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Teile Punkt mit sich selbst." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "Teilen kann keine existierende Kante erstellen." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "Aktion ‚%s‘ existiert bereits!" +msgstr "Teilung existiert bereits." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Punkt hinzufügen" +msgstr "Teilung hinzufügen" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Ungültiger Pfad!" +msgstr "Ungültige Teilung: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Punkt entfernen" +msgstr "Teilung entfernen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5277,7 +5257,7 @@ msgstr "Transformiere UV-Map" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Knochengewichte malen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5285,25 +5265,21 @@ msgstr "Polygon2D-UV-Editor" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Polygon bearbeiten" +msgstr "Poly" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Pfad aufteilen" +msgstr "Teilungen" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Knochen erstellen" +msgstr "Knochen" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Polygon erstellen" @@ -5337,24 +5313,23 @@ msgstr "Polygon skalieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Zwei Punkte verbinden um Teilung zu erstellen" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Zuerst Einstellungspunkt auswählen!" +msgstr "Teilung zum entfernen auswählen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Gewichte mit angegebener Intensität malen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Gewichte mit angegebener Intensität weg malen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "Radius:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5369,9 +5344,8 @@ msgid "Clear UV" msgstr "Leere UV-Map" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "GridMap-Einstellungen" +msgstr "Gittereinstellungen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5379,37 +5353,31 @@ msgstr "Einrasten aktivieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "Raster" +msgstr "Gitter" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Einrasten konfigurieren" +msgstr "Gitter einstellen:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Gitterversatz:" +msgstr "Gitterversatz X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Gitterversatz:" +msgstr "Gitterversatz Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Gitterabstand:" +msgstr "Gitterabstand X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Gitterabstand:" +msgstr "Gitterabstand Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Polygon skalieren" +msgstr "Knochen mit Polygon synchronisieren" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5437,22 +5405,22 @@ msgid "Paste Resource" msgstr "Ressource einfügen" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Im Editor öffnen" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instanz:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Typ:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Im Editor öffnen" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Ressource laden" @@ -5464,11 +5432,11 @@ msgstr "Ressourcen-Vorlader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" +"Es wurde kein Pfad zu einem AnimationPlayer im AnimationTree festgelegt" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Animationsbaum ist ungültig." +msgstr "Pfad zum Animationsspieler ist ungültig" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5479,19 +5447,20 @@ msgid "Close and save changes?" msgstr "Schließen und Änderungen speichern?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Fehler beim Dateiverschieben:\n" +msgstr "Fehler beim Schreiben von Textdatei:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Fehler: Datei konnte nicht geladen werden." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Konnte Bild nicht laden" +msgstr "Fehler: Datei konnte nicht geladen werden." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Fehler beim speichern des TileSet!" +msgstr "Fehler beim Speichern der Datei!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5510,19 +5479,16 @@ msgid "Error importing" msgstr "Fehler beim Importieren" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Neuer Ordner..." +msgstr "Neue Textdatei..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "Datei öffnen" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Speichern als..." +msgstr "Datei speichern als..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5538,7 +5504,7 @@ msgstr " Klassenreferenz" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Alphabetische Sortierung der Methodenliste umschalten." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5569,9 +5535,8 @@ msgid "File" msgstr "Datei" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Dateien anzeigen" +msgstr "Neue Textdatei" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5586,11 +5551,7 @@ msgid "Copy Script Path" msgstr "Skriptpfad kopieren" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Im Dateisystem anzeigen" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "Zurück im Verlauf" #: editor/plugins/script_editor_plugin.cpp @@ -5649,7 +5610,7 @@ msgstr "Hineinspringen" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "Unterbrechung" +msgstr "Unterbrechen" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp @@ -5661,7 +5622,7 @@ msgid "Keep Debugger Open" msgstr "Debugger offen halten" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "Mit externem Editor debuggen" #: editor/plugins/script_editor_plugin.cpp @@ -5669,10 +5630,6 @@ msgid "Open Godot online documentation" msgstr "Öffne Godot-Referenzdokumentation" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Durchsuche die Klassenhierarchie." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Durchsuche die Referenzdokumentation." @@ -5709,39 +5666,28 @@ msgid "Debugger" msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Hilfe durchsuchen" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Klassen suchen" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Eingebettete Skripte können nur bearbeitet werden wenn die entsprechende " -"Szene geladen ist" +msgid "Search Results" +msgstr "Suchergebnisse" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Zeile:" +msgstr "Zeile" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignorieren)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Springe zu Funktion" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Nur Ressourcen aus dem Dateisystem können hier fallen gelassen werden." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Symbol vervollständigen" +msgstr "Symbol nachschlagen" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5765,11 +5711,11 @@ msgstr "Kapitalisiere" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "Syntaxhervorhebung" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Standard" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5783,7 +5729,7 @@ msgstr "Alles auswählen" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "Linie löschen" +msgstr "Zeile löschen" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -5819,14 +5765,14 @@ msgstr "Symbol vervollständigen" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "kürze Leerraum am Zeilenende" +msgstr "Kürze Leerraum am Zeilenende" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "Konvertiere Einrückung zu Leerzeichen" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "Konvertiere Einrückung zu Tabulatoren" #: editor/plugins/script_text_editor.cpp @@ -5843,36 +5789,27 @@ msgid "Remove All Breakpoints" msgstr "Lösche alle Haltepunkte" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "Springe zum nächsten Haltepunkt" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "Springe zum vorigen Haltepunkt" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "In Großbuchstaben konvertieren" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "In Kleinbuchstaben konvertieren" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Finde Vorheriges" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Dateien filtern..." +msgid "Find in Files..." +msgstr "In Dateien suchen..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Springe zu Funktion..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "Springe zu Zeile..." #: editor/plugins/script_text_editor.cpp @@ -5886,39 +5823,36 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" +"Dieses Skelett hat keine Knochen, Bone2D-Nodes sollten als Unterobjekte " +"hinzugefügt werden." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Skelett..." +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Ruhe-Pose erstellen (aus Knochen)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Kochen in Ruhe-Pose setzen" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Navigations-Mesh erzeugen" +msgstr "Physikalische Knochen erstellen" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Skelett..." +msgstr "Skelett" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Erzeuge C#-Lösung" +msgstr "Physikalisches Skelett erzeugen" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Starten" +msgstr "IK abspielen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5926,7 +5860,7 @@ msgstr "Orthogonal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective" -msgstr "Perspektive" +msgstr "Perspektivisch" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." @@ -5969,6 +5903,14 @@ msgid "Animation Key Inserted." msgstr "Animationsschlüsselbild eingefügt." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Neigen" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "Gieren" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Gezeichnete Objekte" @@ -6026,7 +5968,7 @@ msgstr "Rechts" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Sicht von Vorne." +msgstr "Sicht von vorne." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -6053,9 +5995,8 @@ msgid "This operation requires a single selected node." msgstr "Diese Aktion benötigt ein einzelnes ausgewähltes Node." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Sicht-Informationen" +msgstr "Sichtrotation sperren" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6102,9 +6043,8 @@ msgid "Doppler Enable" msgstr "Dopplereffekt aktivieren" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Mesh-Vorschauen erzeugen" +msgstr "Cinematische Vorschau" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6135,6 +6075,10 @@ msgid "Freelook Speed Modifier" msgstr "Freisicht Geschwindigkeitsregler" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "Sichtrotation gesperrt" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Transformationsdialog" @@ -6190,7 +6134,7 @@ msgstr "Sicht von hinten" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "Sicht von Vorne" +msgstr "Sicht von vorne" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" @@ -6237,11 +6181,6 @@ msgid "Tool Scale" msgstr "Werkzeug Skalieren" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Am Gitter einrasten" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Freie Kamera umschalten" @@ -6251,7 +6190,7 @@ msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Objekt am Boden einrasten" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6282,9 +6221,8 @@ msgid "4 Viewports" msgstr "Vier Ansichten" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Griffe anzeigen" +msgstr "Griffe" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6360,51 +6298,46 @@ msgid "Post" msgstr "Nachher" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Speicherpfad ist leer!" +msgstr "Sprite ist leer!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." msgstr "" +"Ein Sprite das Animationsbilder nutzt kann nicht zu einem Mesh konvertiert " +"werden." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Ungültige Geometrie, Mesh kann nicht ersetzt werden." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "Sprite-Einzelbilder" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Umwandeln zu %s" +msgstr "Zu 2D-Mesh umwandeln" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Erzeuge Umriss-Mesh" +msgstr "2D-Mesh erzeugen" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Vereinfachung: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "Einrasten (Pixel):" +msgstr "Wachsen (Pixel): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Atlas-Vorschau" +msgstr "Vorschau aktualisieren" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Einstellungen" +msgstr "Einstellungen:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6508,10 +6441,9 @@ msgstr "Schritt:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Trenner:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Texturbereich" @@ -6644,9 +6576,12 @@ msgid "Erase Selection" msgstr "Auswahl löschen" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Ungültiger Name." +msgstr "Ungültige Kacheln reparieren" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Auswahl ausschneiden" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6669,9 +6604,8 @@ msgid "Erase TileMap" msgstr "Lösche TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Finde Kachel" +msgstr "Kachel finden" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6694,35 +6628,36 @@ msgid "Pick Tile" msgstr "Wähle Kachel" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "Auswahl entfernen" +msgid "Copy Selection" +msgstr "Auswahl kopieren" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate left" +msgstr "Nach links rotieren" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Drehe auf 0 Grad" +msgid "Rotate right" +msgstr "Nach rechts rotieren" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Drehe auf 90 Grad" +msgid "Flip horizontally" +msgstr "Horizontal spiegeln" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Drehe auf 180 Grad" +msgid "Flip vertically" +msgstr "Vertikal spiegeln" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Drehe auf 270 Grad" +msgid "Clear transform" +msgstr "Transform löschen" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "Node(s) aus Szenenbaum hinzufügen" +msgstr "Texturen zu TileSet hinzufügen" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Aktuellen Eintrag entfernen" +msgstr "Aktuelle Textur aus TileSet entfernen" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6742,15 +6677,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Kachelnamen anzeigen (Alt-Taste halten)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Ausgewählte Textur und ALLE sie nutzenden Kacheln entfernen?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Keine Textur zum Entfernen ausgewählt." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6761,76 +6696,78 @@ msgid "Merge from scene?" msgstr "Aus Szene vereinen?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" +"%s Datei(en) wurde(n) nicht hinzugefügt weil sie schon in der Liste " +"vorhanden war(en)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Griff ziehen um Rechteck zu bearbeiten.\n" +"Auf andere Kachel drücken um sie zu bearbeiten." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" "LMT: Bit anstellen.\n" -"RMT: Bit ausstellen." +"RMT: Bit ausstellen.\n" +"Auf andere Kachel klicken um diese zu bearbeiten." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Speichere die so eben bearbeitete Unterkachel." +msgstr "" +"Speichere die so eben bearbeitete Unterkachel.\n" +"Auf andere Kachel drücken um diese zu bearbeiten." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" "Unterkachel zur Benutzung als Icon auswählen, dieses wird auch für ungültige " -"Autokachelzuordnungen benutzt werden." +"Autokachelzuordnungen benutzt werden.\n" +"Auf andere Kachel drücken um diese zu bearbeiten." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Unterkachel auswählen um ihre Priorität zu ändern." +msgstr "" +"Unterkachel auswählen um ihre Priorität zu ändern.\n" +"Auf andere Kachel drücken um diese zu bearbeiten." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Diese Aktion kann nicht ohne eine Szene ausgeführt werden." +msgstr "Diese Eigenschaft kann nicht geändert werden." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Kachelsatz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Vertices" +msgstr "Vertex" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" msgstr "Fragment" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Rechts" +msgstr "Licht" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "VisualShader" #: editor/project_export.cpp msgid "Runnable" @@ -6849,6 +6786,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Export-Vorlagen für dieses Systeme fehlen / sind fehlerhaft:" #: editor/project_export.cpp +msgid "Release" +msgstr "Veröffentlichung" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "Exportiere alles" + +#: editor/project_export.cpp msgid "Presets" msgstr "Vorlagen" @@ -6857,6 +6802,10 @@ msgid "Add..." msgstr "Hinzufügen..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "Exportpfad:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Ressourcen" @@ -6919,6 +6868,14 @@ msgid "Export PCK/Zip" msgstr "Exportiere PCK/Zip" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "Export-Modus?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "Alles exportieren" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Export-Templates für diese Systeme fehlen:" @@ -6931,22 +6888,20 @@ msgid "The path does not exist." msgstr "Dieser Pfad existiert nicht." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "Ein Ordner ohne ‚project.godot‘-Datei muss ausgewählt werden." +msgstr "Ungültige Projekt-Zipdatei, enthält keine ‚project.godot‘-Datei." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Bitte einen leeren Ordner auswählen." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Eine ‚project.godot‘-Datei auswählen." +msgstr "Eine ‚project.godot‘-Datei oder Zipdatei auswählen." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "Das Verzeichnis beinhaltet bereits ein Godot-Projekt." #: editor/project_manager.cpp msgid "Imported Project" @@ -7038,9 +6993,8 @@ msgid "Project Path:" msgstr "Projektpfad:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Projektpfad:" +msgstr "Projektinstallationspfad:" #: editor/project_manager.cpp msgid "Browse" @@ -7163,13 +7117,12 @@ msgid "Mouse Button" msgstr "Maustaste" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" "Ungültiger Aktionsname. Er kann weder leer sein noch ‚/‘, ‚:‘, ‚=‘, ‘\\‘ " -"oder ‚\"‘ enthalten." +"oder ‚\"‘ enthalten" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7180,18 +7133,16 @@ msgid "Rename Input Action Event" msgstr "Eingabeaktionsereignis umbenennen" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Animationsname ändern:" +msgstr "Nullschwelle der Aktion ändern" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Eingabeaktionsereignis hinzufügen" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Gerät" +msgstr "Alle Geräte" #: editor/project_settings_editor.cpp msgid "Device" @@ -7238,24 +7189,20 @@ msgid "Wheel Down Button" msgstr "Mausrad herunter" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Mausrad hoch" +msgstr "Mausrad links" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Rechte Taste" +msgstr "Mausrad rechts" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Taste 6" +msgstr "X-Knopf 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Taste 6" +msgstr "X-Knopf 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7283,7 +7230,7 @@ msgstr "Ereignis hinzufügen" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Schaltfläche" +msgstr "Knopf" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -7397,21 +7344,17 @@ msgstr "Projekteinstellungen (project.godot)" msgid "General" msgstr "Allgemein" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Eigenschaft:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Überschreiben für..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Damit Änderungen Wirkung zeigen muss der Editor neu gestartet werden" #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "Eingabe Zuordnung" +msgstr "Eingabe-Zuordnung" #: editor/project_settings_editor.cpp msgid "Action:" @@ -7423,7 +7366,7 @@ msgstr "Aktion" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Nullschwelle" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7533,10 +7476,6 @@ msgstr "Node auswählen" msgid "Bit %d, val %d." msgstr "Bit %d, Wert %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Eigenschaften:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Eigenschaft auswählen" @@ -7559,97 +7498,93 @@ msgstr "" "Umgewandeltes Bild kann mittels PVRTC-Werkzeug nicht zurück geladen werden:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Umbenennen" +msgstr "Stapelweise Umbenennung" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Prefix" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Suffix" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Einrasteinstellungen" +msgstr "Erweiterte Einstellungen" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Ersatz" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Node-Name:" +msgstr "Node-Name" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Name des Eltern-Nodes, falls vorhanden" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Node-Typ finden" +msgstr "Node-Typ" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Aktuelle Szene" +msgstr "Aktueller Szenenname" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Name des Root-Node:" +msgstr "Name des Root-Nodes" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Sequenzieller ganzzahliger Zähler.\n" +"Zahleroptionen vergleichen." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Pro-Ebene-Zähler" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" msgstr "" +"Falls gesetzt startet dieser Zähler für jede Gruppe aus Unterobjekten neu" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Anfangswert für Zähler" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Schritt:" +msgstr "Schritt" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "Wert um welchen der Zähler für jedes Node erhöht wird" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Versatz" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Minimale Anzahl an Ziffern für diesen Zähler.\n" +"Fehlende Ziffern werden mit führenden Nullen ergänzt." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Ausdruck ändern" +msgstr "Reguläre Ausdrücke" #: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "Post-Process Skript:" +msgstr "Nachbearbeitung" #: editor/rename_dialog.cpp msgid "Keep" @@ -7657,32 +7592,29 @@ msgstr "Behalten" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase zu unter_strich" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "unter_strich zu CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Form" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Kleinbuchstaben" +msgstr "Zu Kleinbuchstaben" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Großbuchstaben" +msgstr "Zu Großbuchstaben" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Vergrößerung zurücksetzen" +msgstr "Zurücksetzen" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Fehler" @@ -7744,6 +7676,10 @@ msgid "Instance Scene(s)" msgstr "Instanz-Szene(n)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Szene hier instantiieren" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Skript leeren" @@ -7781,6 +7717,14 @@ msgid "Save New Scene As..." msgstr "Speichere neue Szene als..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" +"Wenn „Editierbare Instanz“ deaktiviert wird, werden alle Eigenschaften " +"dieses Nodes wieder in ihren Ausgangszustand zurückgesetzt." + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "bearbeitbare Unterobjekte" @@ -7793,29 +7737,24 @@ msgid "Make Local" msgstr "Lokal machen" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Erzeuge Node" +msgstr "Erzeuge Wurzel-Node:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Szene" +msgstr "2D Szene" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Szene" +msgstr "3D Szene" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Leere Vererbung" +msgstr "Benutzerschnittstelle" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Nodes trennen" +msgstr "Selbst-erstelltes Node" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7858,6 +7797,10 @@ msgid "Clear Inheritance" msgstr "Leere Vererbung" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "Dokumentation öffnen" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Node(s) löschen" @@ -7866,17 +7809,16 @@ msgid "Add Child Node" msgstr "Node hier anhängen" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Szene hier instantiieren" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Typ ändern" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "Skript erweitern" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Verstehe!" +msgstr "Szenen-Wurzel erstellen" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7912,7 +7854,7 @@ msgstr "Ein neues oder existierendes Skript zum ausgewählten Node hinzufügen." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "Leere ein Skript für das ausgewählte Node." +msgstr "Entferne Skript von ausgewähltem Node." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -7927,7 +7869,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Vererbung wirklich leeren? (Lässt sich nicht rückgängig machen!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Sichtbarkeit umschalten" @@ -7936,13 +7877,12 @@ msgid "Node configuration warning:" msgstr "Node-Konfigurationswarnung:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"Node hat Verbindungen und Gruppen\n" -"Hier klicken zur Signalverwaltung." +"Node hat Verbindungen und Gruppen.\n" +"Klicken um Signalverwaltung aufzurufen." #: editor/scene_tree_editor.cpp msgid "" @@ -7961,27 +7901,24 @@ msgstr "" "Hier klicken zur Gruppenverwaltung." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Skript öffnen" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "Node ist gesperrt.\n" -"Hier klicken zum entsperren" +"Zum Entsperren klicken." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "Unterobjekte sind nicht auswählbar.\n" -"Hier klicken um auswählbar zu machen" +"Zum auswählbar machen klicken." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7992,6 +7929,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer ist angeheftet.\n" +"Zum Losheften klicken." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -8031,15 +7970,18 @@ msgid "N/A" msgstr "Nicht verfügbar" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Skripteditor öffnen" +msgstr "Skript öffnen / Ort wählen" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Pfad ist leer" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Dateiname ist leer" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Pfad ist nicht lokal" @@ -8101,7 +8043,7 @@ msgstr "Sprache" #: editor/script_create_dialog.cpp msgid "Inherits" -msgstr "Erbt" +msgstr "Erbt von" #: editor/script_create_dialog.cpp msgid "Class Name" @@ -8128,20 +8070,8 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Warnung" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Fehler:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Quelle:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funktion:" +msgid "Stack Trace" +msgstr "Stacktrace" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8157,7 +8087,7 @@ msgstr "Unterprozess verbunden" #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "Kopierfehler" +msgstr "Fehlermeldung kopieren" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -8169,19 +8099,7 @@ msgstr "Nächste Instanz untersuchen" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "Einzelbilder stapeln" - -#: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variable" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Fehler:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Stack Trace (falls geeignet):" +msgstr "Aufrufsverlauf" #: editor/script_editor_debugger.cpp msgid "Profiler" @@ -8272,9 +8190,8 @@ msgid "Change Camera Size" msgstr "Ändere Kameragröße" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Ändere Ausmaße des Benachrichtigers" +msgstr "Benachrichtigendes AABB ändern" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8286,53 +8203,47 @@ msgstr "Sondenausmaße ändern" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "Ändere Radius der Kugelform" +msgstr "Kugelformradius ändern" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "Ändere Ausmaße der Kastenform" +msgstr "Kastenformausmaße ändern" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "Ändere Radius der Kapselform" +msgstr "Kapselfromradius ändern" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "Ändere Höhe der Kapselform" +msgstr "Kapselformhöhe ändern" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Ändere Radius der Kapselform" +msgstr "Zylinderformradius ändern" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Ändere Höhe der Kapselform" +msgstr "Zylinderformhöhe ändern" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Ändere Länge der Strahlenform" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Ändere Lichtradius" +msgstr "Zylinderradius ändern" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Ändere Höhe der Kapselform" +msgstr "Zylinderhöhe ändern" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Ändere Radius der Kugelform" +msgstr "Inneren Torusradius ändern" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Ändere Lichtradius" +msgstr "Äußeren Torusradius ändern" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8453,9 +8364,8 @@ msgid "GridMap Delete Selection" msgstr "GridMap-Auswahl löschen" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "GridMap-Auswahl löschen" +msgstr "GridMap-Auswahl füllen" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8538,9 +8448,8 @@ msgid "Clear Selection" msgstr "Auswahl leeren" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Alle auswählen" +msgstr "Auswahl füllen" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8611,12 +8520,8 @@ msgid "End of inner exception stack trace" msgstr "Ende des inneren Exception-Stack-Traces" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Vorrendern!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Das Navigations-Mesh backen." +msgid "Bake NavMesh" +msgstr "NavMesh backen" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8845,14 +8750,12 @@ msgid "Connect Nodes" msgstr "Nodes verbinden" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Nodes verbinden" +msgstr "Node-Daten verbinden" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Nodes verbinden" +msgstr "Node-Sequenzen verbinden" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8899,6 +8802,10 @@ msgid "Base Type:" msgstr "Basistyp:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Mitglieder:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Verfügbare Nodes:" @@ -8936,9 +8843,8 @@ msgid "Paste Nodes" msgstr "Nodes einfügen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Mitglieder" +msgstr "Mitglied bearbeiten" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8999,17 +8905,16 @@ msgstr "" "String (für Fehler) sein." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "VisualScript-Node entfernen" +msgstr "VisualScript suchen" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Abfragen" +msgid "Get %s" +msgstr "%s abrufen" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "%s setzen" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9061,15 +8966,14 @@ msgstr "" "Rest wird ignoriert." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" "Dieses Node besitzt keine untergeordneten Formen, es kann deshalb nicht mit " -"dem Raum interagieren.\n" -"Es wird empfohlen CollisionShape2D oder CollisionPolygon2D Unterobjekte " +"anderen Objekten kollidieren oder interagieren.\n" +"Es wird empfohlen CollisionShape2D- oder CollisionPolygon2D-Unterobjekte " "hinzuzufügen um seine Form festzulegen." #: scene/2d/collision_polygon_2d.cpp @@ -9106,6 +9010,14 @@ msgstr "" "Damit CollisionShape2D funktionieren kann, muss eine Form angegeben werden. " "Bitte erzeuge eine Shape-Ressource dafür!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"CPUParticles2D-Animationen benötigen ein CanvasItemMaterial mit der " +"Eigenschaft „Particles Animation“ aktiviert." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9159,6 +9071,14 @@ msgstr "" "Es ist kein Material zum Verarbeiten der Partikel zugewiesen, deshalb ist " "kein Verhalten definiert." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Particles2D-Animationen benötigen ein CanvasItemMaterial mit der Eigenschaft " +"„Particles Animation“ aktiviert." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9184,16 +9104,20 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Diese Bone2D-Kette sollte an einem Skeleton2D-Node enden." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Ein Bone2D kann nur zusammen mit einem Skeleton2D oder einem anderen Bone2D " +"als Eltern-Objekt funktionieren." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Dieser Knochen hat keine korrekte Ruhe-Pose. Diese kann am Skeleton2D-Node " +"festgelegt werden." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9260,15 +9184,14 @@ msgid "Lighting Meshes: " msgstr "Beleuchte Meshe: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" "Dieses Node besitzt keine untergeordneten Formen, es kann deshalb nicht mit " -"dem Raum interagieren.\n" -"Es wird empfohlen CollisionShape oder CollisionPolygon Unterobjekte " +"anderen Objekten kollidieren oder interagieren.\n" +"Es wird empfohlen CollisionShape- oder CollisionPolygon-Unterobjekte " "hinzuzufügen um seine Form festzulegen." #: scene/3d/collision_polygon.cpp @@ -9303,6 +9226,19 @@ msgstr "" "Damit CollisionShape funktionieren kann, muss eine Form vorhanden sein. " "Bitte erzeuge eine shape Ressource dafür!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nichts ist sichtbar da kein Mesh zugewiesen wurden." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"CPUParticles-Animationen benötigen ein SpatialMaterial mit der Eigenschaft " +"„Billboard Particles“ aktiviert." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Plotte Mesh" @@ -9327,6 +9263,30 @@ msgid "" msgstr "" "Nichts ist sichtbar da keine Meshe den Zeichendurchläufen zugewiesen wurden." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"Particles-Animationen benötigen ein SpatialMaterial mit der Eigenschaft " +"„Billboard Particles“ aktiviert." + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow funktioniert nur, wenn es als Unterobjekt eines Path-Nodes " +"gesetzt wird." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"OrientedPathFollow funktioniert nur, wenn es als Unterobjekt eines Path-" +"Nodes gesetzt wird." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "OrientedPathFollow benötigt im Elternpfad aktivierte Aufwärtsvektoren." + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9364,17 +9324,16 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Diese Körper wird ignoriert werden bis ein Mesh gesetzt wurde" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Größenänderungen von RigidBody (in Character- oder Rigid-Modus) werden " -"überschrieben wenn die Physikengine läuft.\n" +"Größenänderungen an SoftBody werden von der Physikengine überschrieben wenn " +"sie läuft.\n" "Die Größe der entsprechenden Collisionshape-Unterobjekte sollte stattdessen " "geändert werden." @@ -9397,45 +9356,43 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "In BlendTree-Node ‚%s‘, Animation nicht gefunden: ‚%s‘" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Animationswerkzeuge" +msgstr "Animation nicht gefunden: ‚%s‘" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "In Node ‚%s‘, ungültige Animation: ‚%s‘." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "FEHLER: ungültiger Animationsname!" +msgstr "Ungültige Animation: ‚%s‘." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "'%s' von '%s' trennen" +msgstr "Nichts ist mit dem Eingang ‚%s‘ von Node ‚%s‘ verbunden." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "Für diesen Graphen wurde kein Wurzel-Animation-Node festgelegt." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"AnimationPlayer aus dem Szenenbaum auswählen um Animationen zu bearbeiten." +"Es ist kein Pfad zu einem Animationsspieler mit Animationen festgelegt " +"worden." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"Der Pfad der als AnimationSpieler festgelegt wurde führt nicht zu einem " +"AnimationPlayer-Node." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Animationsbaum ist ungültig." +msgstr "Die Wurzel des Animationsspieler ist kein gültiges Node." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9453,10 +9410,6 @@ msgstr "Warnung!" msgid "Please Confirm..." msgstr "Bitte bestätigen..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Diesen Ordner auswählen" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9468,6 +9421,10 @@ msgstr "" "machen ist in Ordnung, aber sie werden zur Laufzeit automatisch wieder " "versteckt." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "Wenn exp_edit true ist muss min_value größer als null sein." + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9522,31 +9479,143 @@ msgid "Invalid font size." msgstr "Ungültige Schriftgröße." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Eingang hinzufügen" +msgstr "Eingang" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Nichts>" +msgstr "Nichts" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Fehlerhafte Quelle!" +msgstr "Ungültige Quelle für Shader." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Zuweisung an Funktion." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Zuweisung an Uniform." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." + +#~ msgid "Zoom:" +#~ msgstr "Vergrößerung:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Sollen wirklich alle Verbindungen entfernt werden von „" + +#~ msgid "Class List:" +#~ msgstr "Klassenliste:" + +#~ msgid "Search Classes" +#~ msgstr "Klassen suchen" + +#~ msgid "Public Methods" +#~ msgstr "Öffentliche Methoden" + +#~ msgid "Public Methods:" +#~ msgstr "Öffentliche Methoden:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI-Thema-Elemente" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI-Theme-Elemente:" + +#~ msgid "Property: " +#~ msgstr "Eigenschaft: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Favoriten-Verzeichnisstatus umschalten." + +#~ msgid "Show current scene file." +#~ msgstr "Aktuelle Szenendatei anzeigen." + +#~ msgid "Enter tree-view." +#~ msgstr "Zur Baumansicht." + +#~ msgid "Whole words" +#~ msgstr "Ganze Wörter" + +#~ msgid "Match case" +#~ msgstr "Groß-/Kleinschreibung berücksichtigen" + +#~ msgid "Filter: " +#~ msgstr "Filter: " + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Im Dateisystem anzeigen" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Durchsuche die Klassenhierarchie." + +#~ msgid "Search in files" +#~ msgstr "In Dateien suchen" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Eingebettete Skripte können nur bearbeitet werden wenn die entsprechende " +#~ "Szene geladen ist" + +#~ msgid "Convert To Uppercase" +#~ msgstr "In Großbuchstaben konvertieren" + +#~ msgid "Convert To Lowercase" +#~ msgstr "In Kleinbuchstaben konvertieren" + +#~ msgid "Snap To Floor" +#~ msgstr "Am Boden einrasten" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Drehe auf 0 Grad" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Drehe auf 90 Grad" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Drehe auf 180 Grad" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Drehe auf 270 Grad" + +#~ msgid "Warning" +#~ msgstr "Warnung" + +#~ msgid "Error:" +#~ msgstr "Fehler:" + +#~ msgid "Source:" +#~ msgstr "Quelle:" + +#~ msgid "Function:" +#~ msgstr "Funktion:" + +#~ msgid "Variable" +#~ msgstr "Variable" + +#~ msgid "Errors:" +#~ msgstr "Fehler:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Stack Trace (falls geeignet):" + +#~ msgid "Bake!" +#~ msgstr "Vorrendern!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Das Navigations-Mesh backen." + +#~ msgid "Get" +#~ msgstr "Abfragen" #~ msgid "Change Scalar Constant" #~ msgstr "Ändere skalare Konstante" @@ -10052,9 +10121,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Atlas Untertextur konnte nicht gespeichert werden:" -#~ msgid "Exporting for %s" -#~ msgstr "Exportiere für %s" - #~ msgid "Setting Up..." #~ msgstr "Bereite vor..." @@ -10161,9 +10227,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Quellschriftart:" -#~ msgid "Source Font Size:" -#~ msgstr "Quellschriftgröße:" - #~ msgid "Dest Resource:" #~ msgstr "Ziel-Ressource:" @@ -10240,9 +10303,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Start" -#~ msgid "Filters" -#~ msgstr "Filter" - #~ msgid "Source path is empty." #~ msgstr "Quellpfad ist leer." @@ -10516,15 +10576,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Stereo" -#~ msgid "Pitch" -#~ msgstr "Tonhöhe" - #~ msgid "Window" #~ msgstr "Fenster" -#~ msgid "Move Right" -#~ msgstr "nach rechts" - #~ msgid "Scaling to %s%%." #~ msgstr "Skaliere auf %s%%." @@ -10592,9 +10646,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "gerade gedrückt" -#~ msgid "just released" -#~ msgstr "gerade losgelassen" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" @@ -10927,9 +10978,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Projekt exportieren" -#~ msgid "Export Preset:" -#~ msgstr "Exportvorlage:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance enthält keine BakedLight-Ressource." diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index 3c10dc874c..4ec0459cf0 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -24,7 +24,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -391,8 +391,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -406,11 +405,11 @@ msgid "Delete Selection" msgstr "Script hinzufügen" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -513,11 +512,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -550,10 +549,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -585,6 +584,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -664,7 +664,7 @@ msgid "Edit Connection: " msgstr "Connections editieren" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -719,17 +719,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -786,9 +783,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -818,8 +816,9 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "" +#, fuzzy +msgid "Load failed due to missing dependencies:" +msgstr "Szene '%s' hat kapute Abhängigkeiten:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -878,14 +877,6 @@ msgstr "Typ ändern" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Okay" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1061,8 +1052,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1232,8 +1222,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1303,12 +1294,17 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "Node(s) löschen" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Datei existiert, Überschreiben?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "Node(s) löschen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1317,13 +1313,14 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Datei öffnen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "Datei öffnen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1358,7 +1355,8 @@ msgid "Open a File or Directory" msgstr "Datei oder Verzeichnis öffnen" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Speichern" @@ -1416,8 +1414,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1433,24 +1430,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1467,28 +1451,30 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "Node erstellen" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties:" +msgstr "Node erstellen" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1516,7 +1502,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Description" +msgid "Class Description" +msgstr "Script hinzufügen" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" msgstr "Script hinzufügen" #: editor/editor_help.cpp @@ -1531,12 +1522,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "Script hinzufügen" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "Script hinzufügen" #: editor/editor_help.cpp msgid "" @@ -1545,12 +1538,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "Script hinzufügen" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "Script hinzufügen" #: editor/editor_help.cpp msgid "" @@ -1558,11 +1553,52 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1597,6 +1633,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Okay" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1655,10 +1696,20 @@ msgstr "Ohne eine Szene kann das nicht funktionieren." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1892,6 +1943,12 @@ msgstr "Fehler beim Instanzieren der %s Szene" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1932,6 +1989,12 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Szene kann nicht gespeichert werden." + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2016,7 +2079,7 @@ msgstr "" #: editor/editor_node.cpp #, fuzzy -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Neue Szene speichern als..." #: editor/editor_node.cpp @@ -2045,7 +2108,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2084,6 +2147,7 @@ msgid "Quit to Project List" msgstr "Zurück zur Projektliste" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2194,10 +2258,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2293,24 +2353,24 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" +msgid "FileSystem" +msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" msgstr "" #: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" @@ -2448,7 +2508,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2472,7 +2532,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2484,7 +2544,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2492,6 +2552,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2510,10 +2584,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2522,7 +2592,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2815,6 +2886,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2853,7 +2928,7 @@ msgstr "Szene kann nicht gespeichert werden." msgid "Unable to update dependencies:" msgstr "Szene '%s' hat kapute Abhängigkeiten:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2893,29 +2968,22 @@ msgid "Duplicating folder:" msgstr "Node(s) duplizieren" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" +#, fuzzy +msgid "Open Scene(s)" +msgstr "Datei(en) öffnen" #: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "Datei(en) öffnen" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +msgid "Remove from favorites" +msgstr "Ungültige Bilder löschen" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -2925,12 +2993,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Node(s) duplizieren" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Script hinzufügen" @@ -2939,6 +3015,14 @@ msgstr "Script hinzufügen" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2959,24 +3043,15 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Node(s) löschen" - -#: editor/filesystem_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Enter tree-view." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp -msgid "Search files" +msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp @@ -2985,7 +3060,7 @@ msgid "" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -3002,28 +3077,21 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "Node Filter editieren" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Node erstellen" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3040,6 +3108,10 @@ msgid "Cancel" msgstr "Abbrechen" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3200,18 +3272,14 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Okay" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "Node erstellen" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3456,6 +3524,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -3839,10 +3912,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4173,6 +4242,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4235,6 +4308,11 @@ msgid "Rotate Mode" msgstr "Node erstellen" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "TimeScale-Node" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4329,6 +4407,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Bild einfügen" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4380,6 +4463,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4822,8 +4909,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4853,6 +4939,12 @@ msgstr "Inhalt der Emissions-Masken löschen" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Verbindung zu Node:" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4926,13 +5018,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Verbindung zu Node:" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5266,22 +5357,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5312,6 +5403,10 @@ msgid "Error writing TextFile:" msgstr "Szene kann nicht gespeichert werden." #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5412,11 +5507,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5487,7 +5578,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5495,10 +5586,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5533,18 +5620,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search in files" -msgstr "Szene kann nicht gespeichert werden." - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +msgid "Search Results" +msgstr "Ungültige Bilder löschen" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5555,6 +5633,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5643,12 +5725,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "Verbindung zu Node:" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "Verbindung zu Node:" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5664,36 +5748,27 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Convert To Lowercase" -msgstr "Verbindung zu Node:" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5787,6 +5862,14 @@ msgid "Animation Key Inserted." msgstr "Animationsbild eingefügt." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5954,6 +6037,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6056,10 +6143,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6464,6 +6547,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Script hinzufügen" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6509,23 +6597,29 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Script hinzufügen" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "Node erstellen" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +#, fuzzy +msgid "Rotate right" +msgstr "Node erstellen" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip vertically" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Clear transform" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6557,7 +6651,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6573,7 +6667,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6652,6 +6746,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6660,6 +6762,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Projekt exportieren" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6721,6 +6828,15 @@ msgid "Export PCK/Zip" msgstr "Exportiere das Projekt PCK" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Projekt exportieren" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7187,10 +7303,6 @@ msgstr "Projekteinstellungen" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7327,10 +7439,6 @@ msgstr "TimeScale-Node" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7416,7 +7524,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7425,7 +7533,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7467,7 +7575,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7526,6 +7634,10 @@ msgid "Instance Scene(s)" msgstr "Instanziere Szene(n)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "Script hinzufügen" @@ -7564,6 +7676,12 @@ msgid "Save New Scene As..." msgstr "Neue Szene speichern als..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7639,6 +7757,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Node(s) löschen" @@ -7647,14 +7769,15 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Typ ändern" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Script hinzufügen" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" msgstr "" @@ -7806,6 +7929,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7899,19 +8026,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7944,18 +8059,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8381,11 +8484,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8675,6 +8774,10 @@ msgid "Base Type:" msgstr "Typ ändern" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Available Nodes:" msgstr "TimeScale-Node" @@ -8778,11 +8881,11 @@ msgid "Search VisualScript" msgstr "Ungültige Bilder löschen" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8866,6 +8969,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8913,6 +9022,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9037,6 +9152,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9056,6 +9181,30 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D funktioniert nur, wenn sie als Unterobjekt eines Path2D Nodes " +"gesetzt wird." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D funktioniert nur, wenn sie als Unterobjekt eines Path2D Nodes " +"gesetzt wird." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9089,7 +9238,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9160,11 +9309,6 @@ msgstr "Alert!" msgid "Please Confirm..." msgstr "Bitte bestätigen..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Node(s) löschen" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9172,6 +9316,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9238,6 +9386,17 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Node(s) löschen" + +#~ msgid "Ok" +#~ msgstr "Okay" + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "Verbindung zu Node:" + #~ msgid "Edit Node Curve" #~ msgstr "Node Kurve editieren" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 4437b58965..beba25ff56 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -18,7 +18,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -371,8 +371,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -385,11 +384,11 @@ msgid "Delete Selection" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -492,11 +491,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -529,10 +528,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -563,6 +562,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -640,7 +640,7 @@ msgid "Edit Connection: " msgstr "" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -692,17 +692,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -759,9 +756,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -791,7 +789,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -850,14 +848,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1029,8 +1019,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1197,8 +1186,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1268,11 +1258,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1280,12 +1274,12 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1321,7 +1315,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1379,8 +1374,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1396,24 +1390,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1430,27 +1411,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1478,7 +1459,11 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" msgstr "" #: editor/editor_help.cpp @@ -1493,11 +1478,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" +msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1507,11 +1492,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" +msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1520,11 +1505,52 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1558,6 +1584,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1612,10 +1643,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1843,6 +1884,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1883,6 +1930,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1964,7 +2016,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -1993,7 +2045,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2030,6 +2082,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2137,10 +2190,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2234,21 +2283,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2385,7 +2434,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2409,7 +2458,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2421,7 +2470,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2429,6 +2478,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2446,10 +2509,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2458,7 +2517,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2739,6 +2799,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2774,7 +2838,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2811,39 +2875,39 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +#: editor/filesystem_dock.cpp +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2854,6 +2918,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2874,11 +2946,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2886,20 +2958,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2916,27 +2980,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2953,6 +3009,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3109,17 +3169,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3355,6 +3410,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3720,10 +3780,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4045,6 +4101,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4105,6 +4165,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4199,6 +4263,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4249,6 +4317,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4683,8 +4755,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4713,6 +4784,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4782,11 +4858,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5113,22 +5189,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5158,6 +5234,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5254,11 +5334,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5329,7 +5405,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5337,10 +5413,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5375,16 +5447,7 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +msgid "Search Results" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5396,6 +5459,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5482,11 +5549,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5503,19 +5570,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5523,15 +5582,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5623,6 +5682,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5787,6 +5854,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5886,10 +5957,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6287,6 +6354,10 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6331,23 +6402,27 @@ msgid "Pick Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Move Selection" +msgid "Copy Selection" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6377,7 +6452,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6393,7 +6468,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6469,6 +6544,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6477,6 +6560,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6535,6 +6622,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -6983,10 +7078,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7119,10 +7210,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7206,7 +7293,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7215,7 +7302,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7255,7 +7342,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7314,6 +7401,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7350,6 +7441,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7420,6 +7517,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7428,11 +7529,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7582,6 +7683,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7670,19 +7775,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7714,18 +7807,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8142,11 +8223,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8416,6 +8493,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8514,11 +8595,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8596,6 +8677,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8634,6 +8721,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8751,6 +8844,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8770,6 +8873,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8802,7 +8923,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8871,10 +8992,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8882,6 +8999,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" diff --git a/editor/translations/el.po b/editor/translations/el.po index 6dc1f9459d..1eec84e7e5 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-04 20:39+0000\n" +"PO-Revision-Date: 2018-09-25 10:28+0000\n" "Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" @@ -14,7 +14,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 3.1.1\n" +"X-Generator: Weblate 3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -23,70 +23,65 @@ msgstr "" "Μη ÎγκυÏη παÏάμετÏος στην convert(). ΧÏησιμοποιήστε τις σταθεÏÎÏ‚ TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Δεν υπάÏχουν αÏκετά byte για την αποκωδικοποίηση, ή άκυÏη μοÏφή." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "ΆκυÏη είσοδος %i (δεν Ï€ÎÏασε) στην ÎκφÏαση" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" +"Το self δεν μποÏεί να χÏησιμοποιηθεί επειδή το στιγμιότυπο είναι null (δεν " +"Ï€ÎÏασε)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "ΆκυÏο όνομα ιδιότητας δείκτη '%s' στον κόμβο %s." +msgstr "ΆκυÏοι ÏŒÏοι στον τελεστή %s, %s και %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "ΆκυÏο όνομα ιδιότητας δείκτη '%s' στον κόμβο %s." +msgstr "ΆκυÏος δείκτης Ï„Ïπου %s για βασικό Ï„Ïπο %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "ΆκυÏος επώνυμος δείκτης '%s' για βασικό Ï„Ïπο %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": ΆκυÏη παÏάμετÏος Ï„Ïπου: " +msgstr "ΆκυÏα οÏίσματα στην κατασκευή του '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Στην κλήση στο '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "ΔωÏεάν" +msgstr "ΕλεÏθεÏο" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "ΙσοÏÏοπημÎνο" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "ΣυμμετÏία στον άξονα Χ" +msgstr "ΚατοπτÏισμός" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Εισαγωγή κλειδιοÏ" +msgstr "Εισαγωγή ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï ÎµÎ´ÏŽ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" msgstr "Διπλασιασμός επιλογής" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "ΔιαγÏαφή επιλεγμÎνου" +msgstr "ΔιαγÏαφή επιλογής" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -117,46 +112,40 @@ msgid "Anim Change Call" msgstr "Anim Αλλαγή κλήσης" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Ιδιότητα:" +msgstr "Κομμάτι Ιδιότητας" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Είδος μετασχηματισμοÏ" +msgstr "Κομμάτι 3D μετασχηματισμοÏ" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Κομμάτι κλήσης μεθόδου" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Κομμάτι καμπÏλης Bezier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Κομμάτι αναπαÏαγωγής ήχου" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Πάυση αναπαÏγωγής κίνησης. (S)" +msgstr "Κομμάτι αναπαÏαγωγής κίνησης" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Anim Î Ïοσθήκη κομματιοÏ" +msgstr "Î Ïοσθήκη κομματιοÏ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Μήκος animation (σε δευτεÏόλεπτα)." +msgstr "Μήκος κίνησης (δευτεÏόλεπτα)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "ΜεγÎθυνση animation." +msgstr "Επανάληψη κίνησης" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -164,42 +153,36 @@ msgid "Functions:" msgstr "ΣυναÏτήσεις:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "ΑκÏοατής ήχου" +msgstr "Αποσπάσματα ήχου:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Αποσπάσματα" +msgstr "Αποσπάσματα κίνησης:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Εναλλαγή λειτουÏγίας χωÏίς πεÏισπασμοÏÏ‚." +msgstr "Εναλλαγή ÎºÎ¿Î¼Î¼Î±Ï„Î¹Î¿Ï on/off." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "ΜÎθοδος ανανÎωσης (της ιδιότητας)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Κόμβος κίνησης" +msgstr "ΜÎθοδος παÏεμβολής" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "ΜÎθοδος επανάληψης (παÏεμβολή Ï„Îλους με αÏχή)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "ΑφαίÏεση επιλεγμÎνου κομματιοÏ." +msgstr "ΑφαίÏεση κομματιοÏ." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "ΧÏόνος ÏƒÏ…Î½Î´Î¹Î±ÏƒÎ¼Î¿Ï (s):" +msgstr "ΧÏόνος (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -214,13 +197,12 @@ msgid "Trigger" msgstr "Άμεση" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Δυνατότητες" +msgstr "ΚαταγÏαφή" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "ΠλησιÎστεÏη" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -229,15 +211,15 @@ msgstr "ΓÏαμμική" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Κυβική" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "ΠεÏιοÏισμός παÏεμβολής επανάληψης" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Αναδίπλωση παÏεμβολής επανάληψης" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -245,14 +227,12 @@ msgid "Insert Key" msgstr "Εισαγωγή κλειδιοÏ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Διπλασιασμός κόμβων" +msgstr "Διπλασιασμός κλειδιών" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "ΔιαγÏαφή Κόμβων" +msgstr "ΔιαγÏαφή κλειδιών" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -282,7 +262,7 @@ msgstr "Anim Εισαγωγή" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "Ένα AnimationPlayer δεν μποÏεί να κινήσει τον εαυτό του." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -299,6 +279,8 @@ msgstr "Anim εισαγωγή κλειδιοÏ" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"Τα κομμάτια Î¼ÎµÏ„Î±ÏƒÏ‡Î·Î¼Î±Ï„Î¹ÏƒÎ¼Î¿Ï ÎµÏ†Î±Ïμόζονται μόνο σε κόμβους βασισμÎνους σε " +"Spatial." #: editor/animation_track_editor.cpp msgid "" @@ -307,44 +289,47 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Τα κομμάτια ήχου μποÏοÏν να δείχνουν μόνο σε κόμβους Ï„Ïπου:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." msgstr "" +"Τα κομμάτια κίνησης μποÏοÏν να δείχνουν μόνο σε κόμβους AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "Ένα AnimationPlayer δεν μποÏεί να κινήσει τον εαυτό του." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "ΑδÏνατη η Ï€Ïοσθήκη ÎºÎ¿Î¼Î¼Î±Ï„Î¹Î¿Ï Ï‡Ï‰Ïίς Ïίζα" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "ΑδÏνατη η Ï€Ïοσθήκη κλειδιοÏ, λόγω άκυÏης διαδÏομής κομματιοÏ." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "ΑδÏνατη η Ï€Ïοσθήκη κλειδιοÏ, το κομμάτι δεν είναι Ï„Ïπου Spatial" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "ΑδÏνατη η Ï€Ïοσθήκη ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Î¼ÎµÎ¸ÏŒÎ´Î¿Ï…, λόγω άκυÏης διαδÏομής κομματιοÏ." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "Το VariableGet δεν βÏÎθηκε στη δεσμή ενεÏγειών: " +msgstr "Δεν βÏÎθηκε η μÎθοδος στο αντικείμενο: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Anim Μετακίνηση κελιδιών" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Το Ï€ÏόχειÏο είναι άδειο!" +msgstr "Το Ï€ÏόχειÏο είναι άδειο" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -354,24 +339,24 @@ msgstr "Anim ΜεγÎθυνση κλειδιών" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Αυτή η επιλογή δεν δουλεÏει σε καμπÏλες Bezier, καθώς είναι μεμονωμÎνο " +"κομμάτι." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Δείξε μόνο κομμάτια απο επιλεγμÎνους κόμβους στο δÎντÏο." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Ομαδοποίηση κομματιών ανα κόμβο, ή εμφάνιση σε λίστα." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "ΚοÏμπωμα (Εικονοστοιχεία):" +msgstr "ΚοÏμπωμα (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Το δÎντÏο κίνησης είναι ÎγκυÏο." +msgstr "Τιμή βήματος κίνησης." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -383,19 +368,16 @@ msgid "Edit" msgstr "ΕπεξεÏγασία" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "ΔÎντÏο κίνησης" +msgstr "Ιδιότητες κίνησης." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "ΑντιγÏαφή παÏαμÎÏ„Ïων" +msgstr "ΑντιγÏαφή κομματιών" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Επικόλληση παÏαμÎÏ„Ïων" +msgstr "Επικόλληση κομματιών" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -405,8 +387,7 @@ msgstr "ΜεγÎθυνση επιλογής" msgid "Scale From Cursor" msgstr "ΜεγÎθυνση από τον δείκτη" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Διπλασιασμός επιλογής" @@ -415,16 +396,17 @@ msgid "Duplicate Transposed" msgstr "Διπλασιασμός ανεστÏαμÎνων" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "ΔιαγÏαφή επιλεγμÎνου" +msgstr "ΔιαγÏαφή επιλογής" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Πήγαινε στο επόμενο βήμα" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Πήγαινε στο Ï€ÏοηγοÏμενο βήμα" #: editor/animation_track_editor.cpp @@ -437,11 +419,11 @@ msgstr "ΚαθαÏισμός animation" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Επιλογή του κόμβου που θα κινηθεί:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "ΧÏήση καμπυλών Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -489,7 +471,7 @@ msgstr "Λόγος μεγÎθυνσης:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Επιλογή κομματιών για αντιγÏαφή:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -527,11 +509,11 @@ msgstr "Δεν υπάÏχουν αντιστοιχίες" msgid "Replaced %d occurrence(s)." msgstr "Αντικαταστάθηκαν %d εμφανίσεις." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Αντιστοίχηση πεζών-κεφαλαίων" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "ΟλόκληÏες λÎξεις" @@ -560,16 +542,15 @@ msgid "Reset Zoom" msgstr "ΕπαναφοÏά μεγÎθυνσης" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Î Ïοειδοποιήσεις" +msgstr "Î Ïοειδοποιήσεις:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "ΜεγÎθυνση (%):" +msgid "Font Size:" +msgstr "ΜÎγεθος πηγαίας γÏαμματοσειÏάς:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "ΓÏαμμή:" @@ -602,6 +583,7 @@ msgstr "Î Ïοσθήκη" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -658,9 +640,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "ΑποσÏνδεση του '%s' απο το '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "ΑποσÏνδεση του '%s' απο το '%s'" +msgstr "ΑποσÏνδεση όλων απο το σήμα: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -672,19 +653,18 @@ msgid "Disconnect" msgstr "ΑποσÏνδεση" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "ΣÏνδεση στο σήμα:" +msgstr "ΣÏνδεση σήματος: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "ΕπεξεÏγασία συνδÎσεων" +msgstr "ΕπεξεÏγασία σÏνδεσης: " #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Είστε σίγουÏοι πως θÎλετε να Ï„ÏÎξετε πεÏισσότεÏα από Îνα ÎÏγα;" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" +"Είστε σίγουÏοι πως θÎλετε να αφαιÏÎσετε όλες της συνδÎσεις απο αυτό το σήμα;" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -693,21 +673,19 @@ msgstr "Σήματα" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" msgstr "" +"Είστε σίγουÏοι πως θÎλετε να αφαιÏÎσετε όλες της συνδÎσεις απο αυτό το σήμα;" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "ΑποσÏνδεση" +msgstr "ΑποσÏνδεση όλων" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "ΕπεξεÏγασία" +msgstr "ΕπεξεÏγασία..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "ΣυναÏτήσεις" +msgstr "Πήγαινε σε συνάÏτηση" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -738,17 +716,14 @@ msgstr "Î Ïόσφατα:" msgid "Search:" msgstr "Αναζήτηση:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Αντιστοιχίες:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "ΠεÏιγÏαφή:" @@ -809,9 +784,10 @@ msgid "Search Replacement Resource:" msgstr "Αναζήτηση αντικαταστάτη πόÏου:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -843,7 +819,8 @@ msgid "Error loading:" msgstr "Σφάλμα κατά την φόÏτωση:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Η φόÏτωση της σκηνής απÎτυχε, λόγω απόντων εξαÏτήσεων:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -902,14 +879,6 @@ msgstr "Αλλαγή τιμής λεξικοÏ" msgid "Thanks from the Godot community!" msgstr "ΕυχαÏιστίες από την κοινότητα της Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Εντάξει" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "ΣυνεισφÎÏοντες στην Godot Engine" @@ -1086,8 +1055,7 @@ msgid "Bus options" msgstr "ΕπιλογÎÏ‚ διαÏλου" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Διπλασιασμός" @@ -1256,8 +1224,9 @@ msgstr "ΔιαδÏομή:" msgid "Node Name:" msgstr "Όνομα κόμβου:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Όνομα" @@ -1327,12 +1296,17 @@ msgid "Template file not found:" msgstr "Δεν βÏÎθηκε αÏχείο Ï€ÏοτÏπου:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Επιλογή Ï„ÏÎχοντα φακÎλου" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Το αÏχείο υπάÏχει. ΘÎλετε να το αντικαταστήσετε;" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Επιλογή Ï„ÏÎχοντα φακÎλου" +#, fuzzy +msgid "Select This Folder" +msgstr "Επιλογή Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φακÎλου" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1340,12 +1314,13 @@ msgstr "ΑντιγÏαφή διαδÏομής" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" -msgstr "Εμφάνιση στη διαχείÏιση αÏχείων" +msgid "Open in File Manager" +msgstr "Άνοιγμα στη διαχείÏιση αÏχείων" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Εμφάνιση στη διαχείÏιση αÏχείων" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1381,7 +1356,8 @@ msgid "Open a File or Directory" msgstr "Άνοιγμα αÏχείου ή φακÎλου" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Αποθήκευση" @@ -1439,8 +1415,7 @@ msgstr "Φάκελοι & ΑÏχεία:" msgid "Preview:" msgstr "Î Ïοεπισκόπηση:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "ΑÏχείο:" @@ -1456,24 +1431,11 @@ msgstr "ΣάÏωση πηγών" msgid "(Re)Importing Assets" msgstr "(Επαν)εισαγωγή" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Αναζήτηση βοήθειας" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Λίστα κλάσεων:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Αναζήτηση κλάσεων" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "ΚοÏυφή" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Κλάση:" @@ -1490,28 +1452,31 @@ msgid "Brief Description:" msgstr "ΣÏντομη πεÏιγÏαφή:" #: editor/editor_help.cpp -msgid "Members" -msgstr "ΜÎλη" +msgid "Properties" +msgstr "Ιδιότητες" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "ΜÎλη:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Ιδιότητες:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Δημόσιες συναÏτήσεις" +msgid "Methods" +msgstr "ΣυναÏτήσεις" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Δημόσιες συναÏτήσεις:" +#, fuzzy +msgid "Methods:" +msgstr "ΣυναÏτήσεις" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Στοιχεία του θÎματος GUI" +#, fuzzy +msgid "Theme Properties" +msgstr "Ιδιότητες" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Στοιχεία του θÎματος GUI:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Ιδιότητες:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1538,10 +1503,16 @@ msgid "Constants:" msgstr "ΣταθεÏÎÏ‚:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "ΠεÏιγÏαφή" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "ΠεÏιγÏαφή:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Online Tutorial:" @@ -1556,11 +1527,13 @@ msgstr "" "url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Ιδιότητες" +#, fuzzy +msgid "Property Descriptions" +msgstr "ΠεÏιγÏαφή ιδιότητας:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "ΠεÏιγÏαφή ιδιότητας:" #: editor/editor_help.cpp @@ -1572,11 +1545,13 @@ msgstr "" "[color=$color][url=$url]γÏάφοντας μία[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "ΣυναÏτήσεις" +#, fuzzy +msgid "Method Descriptions" +msgstr "ΠεÏιγÏαφή μεθόδου:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "ΠεÏιγÏαφή μεθόδου:" #: editor/editor_help.cpp @@ -1587,18 +1562,67 @@ msgstr "" "Δεν υπάÏχει ακόμη πεÏιγÏαφή για αυτήν την μÎθοδο. ΠαÏακαλοÏμε βοηθήστε μας " "[color=$color][url=$url]γÏάφοντας μία[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Αναζήτηση βοήθειας" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Κανονική εμφάνιση" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Κλάσεις" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "ΣυναÏτήσεις" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Signals Only" +msgstr "Σήματα" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "ΣταθεÏÎÏ‚" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Ιδιότητες" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Ιδιότητες" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "ΜÎλη" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Κλάση:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Ιδιότητα:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "ÎŒÏισε" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "ΟÏισμός πολλών:" #: editor/editor_log.cpp msgid "Output:" @@ -1626,6 +1650,11 @@ msgstr "Η εξαγωγή του ÎÏγου απÎτυχε με κωδικό %d. msgid "Error saving resource!" msgstr "Σφάλμα κατά την αποθήκευση πόÏου!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Εντάξει" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Αποθήκευση πόÏου ως..." @@ -1645,6 +1674,7 @@ msgstr "Σφάλμα κατά την αποθήκευση." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" +"ΑδÏνατο το άνοιγμα του '%s'. Το αÏχείο πιθανώς μετακινήθηκε ή διαγÏάφηκε." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1680,12 +1710,22 @@ msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει Ï‡Ï #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "ΑδÏνατη η αποθήκευση σκηνής. Πιθανώς οι εξαÏτήσεις (στιγμιότυπα ή " "κληÏονομιά) να μην μποÏοÏσαν να ικανοποιηθοÏν." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "ΑδÏνατο το φόÏτωμα της βιβλιοθήκης πλεγμάτων για συγχώνευση!" @@ -1951,6 +1991,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€ÏοσθÎτου από τη διαδÏομή: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"ΑδÏνατη η φόÏτωση δεσμής ενεÏγειών Ï€ÏοσθÎτου από τη διαδÏομή: '%s'. Δεν " +"είναι σε λειτουÏγία tool." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2002,15 +2051,19 @@ msgstr "ΔιαγÏαφή διάταξης" msgid "Default" msgstr "Î Ïοεπιλογή" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "Εμφάνιση στο σÏστημα αÏχείων" + +#: editor/editor_node.cpp msgid "Play This Scene" msgstr "ΑναπαÏαγωγή σκηνής" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Κλείσιμο άλλον καÏτελών" +msgstr "Κλείσιμο καÏÏ„Îλας" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2085,7 +2138,8 @@ msgid "Save Scene" msgstr "ΑποθηκεÏσετε σκηνής" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Αποθήκευση όλων των σκηνών" #: editor/editor_node.cpp @@ -2114,7 +2168,7 @@ msgid "Undo" msgstr "ΑναίÏεση" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "ΑκÏÏωση αναίÏεσης" @@ -2143,15 +2197,15 @@ msgid "Tools" msgstr "ΕÏγαλεία" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Άνοιγμα του διαχειÏιστή ÎÏγων;" +msgstr "Άνοιγμα φακÎλου δεδομÎνων ÎÏγου" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Έξοδος στη λίστα ÎÏγων" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Αποσφαλμάτωση" @@ -2260,18 +2314,16 @@ msgid "Toggle Fullscreen" msgstr "Εναλλαγή πλήÏους οθόνης" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Ρυθμίσεις επεξεÏγαστή" +msgstr "Άνοιγμα φακÎλου δεδομÎνων/Ïυθμίσεων επεξεÏγαστή" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Άνοιγμα φακÎλου δεδομÎνων επεξεÏγαστή" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Ρυθμίσεις επεξεÏγαστή" +msgstr "Άνοιγμα φακÎλου Ïυθμίσεων επεξεÏγαστή" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2281,10 +2333,6 @@ msgstr "ΔιαχείÏιση Ï€ÏοτÏπων εξαγωγής" msgid "Help" msgstr "Βοήθεια" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Κλάσεις" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2355,13 +2403,12 @@ msgstr "ΑναπαÏαγωγή Ï€ÏοσαÏμοσμÎνης σκηνής" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Η αλλαγή του Î¿Î´Î·Î³Î¿Ï Î²Î¯Î½Ï„ÎµÎ¿ απαιτεί επανεκκίνηση του επεξεÏγαστή." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Αποθήκευση & Επανεισαγωγή" +msgstr "Αποθήκευση & Επανεκκίνηση" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2379,27 +2426,26 @@ msgstr "ΕνημÎÏωση αλλαγών" msgid "Disable Update Spinner" msgstr "ΑπενεÏγοποίηση δείκτη ενημÎÏωσης" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "ΕπιθεωÏητής" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Εισαγωγή" #: editor/editor_node.cpp -msgid "Node" -msgstr "Κόμβος" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "ΣÏστημα αÏχείων" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "ΕπιθεωÏητής" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Κόμβος" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Ανάπτυξη όλων" +msgstr "Ανάπτυξη κάτω πλαισίου" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2478,9 +2524,8 @@ msgid "Thumbnail..." msgstr "ΜικÏογÏαφία..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "ΕπεγεÏγασία πολυγώνου" +msgstr "ΕπεγεÏγασία επÎκτασης" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2504,15 +2549,13 @@ msgid "Status:" msgstr "Κατάσταση:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "ΕπεξεÏγασία" +msgstr "ΕπεξεÏγασία:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Εκκινιση!" +msgstr "Εκκινιση" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2534,7 +2577,7 @@ msgstr "ΚαÏÎ %" msgid "Physics Frame %" msgstr "KαÏΠφυσικής %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "ΧÏόνος:" @@ -2558,27 +2601,39 @@ msgstr "ΧÏόνος" msgid "Calls" msgstr "Κλήσεις" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Îαι" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "ΣτÏώμα" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Δυαδικό ψηφίο %d, τιμή %d." +msgstr "Bit %d, τιμή %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Άδειο]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Ανάθεση" +msgstr "ΕκχώÏηση.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2597,10 +2652,6 @@ msgstr "ÎÎο %s" msgid "Make Unique" msgstr "Κάνε μοναδικό" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Εμφάνιση στο σÏστημα αÏχείων" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2609,7 +2660,8 @@ msgstr "Εμφάνιση στο σÏστημα αÏχείων" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Επικόληση" @@ -2622,36 +2674,32 @@ msgstr "ΜετατÏοπή σε %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Άνοιγμα στον επεξεÏγαστή" +msgstr "Άνοιγμα επεξεÏγαστή" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Ο επιλεγμÎνος κόμβος δεν είναι Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "ΜÎγεθος κελιοÏ:" +msgstr "ΜÎγεθος: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Σελίδα: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "ÎÎο όνομα:" +msgstr "ÎÎο κλειδί:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "ÎÎο όνομα:" +msgstr "ÎÎα τιμή:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Î Ïοσθήκη ζεÏγους κλειδιοÏ/τιμής" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2744,9 +2792,8 @@ msgid "Can't open export templates zip." msgstr "ΑδÏνατο το άνοιγμα του zip των Ï€ÏοτÏπων εξαγωγής." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "ΆκυÏη μοÏφή version.txt μÎσα στα Ï€Ïότυπα." +msgstr "ΆκυÏη μοÏφή version.txt μÎσα στα Ï€Ïότυπα: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2811,6 +2858,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Αποτυχία εγκατάστασης Ï€ÏοτÏπων. Οι Ï€ÏοβληματικÎÏ‚ αÏχειοθήκες μποÏοÏν να " +"βÏεθοÏν στο '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2891,9 +2940,10 @@ msgid "Download Templates" msgstr "Λήψη Ï€ÏοτÏπων" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "ΕπιλÎξτε Îναν διακοσμιτή κατοπτÏÎ¹ÏƒÎ¼Î¿Ï Î±Ï€ÏŒ την λίστα: " +msgstr "" +"ΕπιλÎξτε Îναν διακομιστή κατοπτÏισμοÏ: (Shift+Click για άνοιγμα στο " +"Ï€ÏόγÏαμμα πεÏιήγησης)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2902,19 +2952,22 @@ msgstr "" "αποθήκευσης cache Ï„Ïπου αÏχείου!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "ΑγαπημÎνα:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Δεν ήταν δυνατή η πλοήγηση στο '%s', καθώς δεν βÏÎθηκε στο σÏστημα αÏχείων!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Εμφάνιση αντικειμÎνων σε πλÎγμα μικÏγÏαφιών" +msgstr "Εμφάνιση αντικειμÎνων σε πλÎγμα μικÏγÏαφιών." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Εμφάνιση αντικειμÎνων σε λίστα" +msgstr "Εμφάνιση αντικειμÎνων σε λίστα." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2942,7 +2995,7 @@ msgstr "Σφάλμα κατά τον διπλασιασμό:" msgid "Unable to update dependencies:" msgstr "ΑδÏνατη η ενημÎÏωση των εξαÏτήσεων:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Δεν δόθηκε όνομα" @@ -2979,22 +3032,6 @@ msgid "Duplicating folder:" msgstr "Διπλασιασμός καταλόγου:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Ανάπτυξη όλων" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "ΣÏμπτηξη όλων" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Μετονομασία..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Μετακίνηση σε..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Άνοιγμα σκηνής" @@ -3003,6 +3040,16 @@ msgid "Instance" msgstr "Στιγμιότυπο" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "ΑγαπημÎνα:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "ΚατάÏγηση από την ομάδα" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "ΕπεξεÏγασία εξαÏτήσεων..." @@ -3010,19 +3057,35 @@ msgstr "ΕπεξεÏγασία εξαÏτήσεων..." msgid "View Owners..." msgstr "Î Ïοβολή ιδιοκτητών..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Μετονομασία..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "ΑναπαÏαγωγή..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Μετακίνηση σε..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Îεα δεσμή ενεÏγειών" +msgstr "Îεα δεσμή ενεÏγειών..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Αποθήκευση πόÏου ως..." +msgstr "ÎÎος πόÏος..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Ανάπτυξη όλων" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "ΣÏμπτηξη όλων" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3045,13 +3108,12 @@ msgstr "Εκ νÎου σάÏωση το συστήματος αÏχείων" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Εναλλαγή αγαπημÎνου" +msgid "Toggle split mode" +msgstr "Εναλλαγή λειτουÏγίας" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "ΕπÎλεξε το Ï„ÏÎχων επεξεÏγαζόμενο υπο-πλακίδιο." +msgid "Search files" +msgstr "Αναζήτηση αÏχείων" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -3060,15 +3122,6 @@ msgstr "" "κόμβου." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Αναζήτηση κλάσεων" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3076,18 +3129,17 @@ msgstr "" "ΣάÏωση αÏχείων,\n" "ΠαÏακαλώ πεÏιμÎνετε..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Μετακίνηση" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "ΥπάÏχει ήδη φάκελος στην διαδÏομή με το Ï€ÏοσδιοÏισμÎνο όνομα." +msgstr "ΥπάÏχει ήδη αÏχείο ή φάκελος με το ίδιο όνομα στη διαδÏομή." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Αντικατάσταση" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3095,32 +3147,23 @@ msgstr "ΔημιουÏγία δεσμής ενεÏγειών" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" -msgstr "ΕÏÏεση πλακιδίου" +msgid "Find in Files" +msgstr "ΕÏÏεση στα αÏχεία" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "ΕÏÏεση" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "ΟλόκληÏες λÎξεις" +msgid "Find:" +msgstr "ΕÏÏεση: " #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Αντιστοίχηση πεζών-κεφαλαίων" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Φάκελος: " #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " -msgstr "ΦίλτÏο:" +msgid "Filters:" +msgstr "ΦίλτÏα" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3136,52 +3179,48 @@ msgid "Cancel" msgstr "ΑκÏÏωση" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "ΕÏÏεση: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Αντικατάσταση" +msgstr "Αντικατάσταση: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Αντικατάσταση όλων" +msgstr "Αντικατάσταση όλων (χωÏίς ανÎÏαιση)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Αποθήκευση..." +msgstr "Αναζήτηση..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Αναζήτηση κειμÎνου" +msgstr "ΟλοκλήÏωση αναζήτησης" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ΣΦΑΛΜΑ: Αυτό το όνομα κίνησης υπάÏχει ήδη!" +msgstr "ΥπαÏκτό όνομα ομάδας." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Μη ÎγκυÏο όνομα." +msgstr "ΆκυÏο όνομα ομάδας." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Ομάδες" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Î Ïοσθήκη σε Ομάδα" +msgstr "Κόμβοι εκτός ομάδας" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "ΦιλτÏάÏισμα κόμβων" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "ΕπεξεÏγασία Ομάδων" +msgstr "Κόμβοι σε ομάδα" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3192,9 +3231,8 @@ msgid "Remove from Group" msgstr "ΚατάÏγηση από την ομάδα" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Ομάδες" +msgstr "ΔιαχείÏηση ομάδων" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3303,17 +3341,14 @@ msgstr "Επανεισαγωγή" msgid "Failed to load resource." msgstr "ΑπÎτυχε η φόÏτωση πόÏου." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Εντάξει" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Ανάπτυξη όλων των ιδιοτήτων" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "ΣÏμπτηξη όλων των ιδιοτήτων" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3330,9 +3365,8 @@ msgid "Paste Params" msgstr "Επικόλληση παÏαμÎÏ„Ïων" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Το Ï€ÏόχειÏο πόÏων είναι άδειο!" +msgstr "ΕπεξεÏγασία Ï€ÏοχείÏου πόÏων" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3375,9 +3409,8 @@ msgid "Object properties." msgstr "Ιδιότητες αντικειμÎνου." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "ΦιλτÏάÏισμα κόμβων" +msgstr "ΦιλτÏάÏισμα ιδιοτήτων" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3392,37 +3425,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "ΕπιλÎξτε Îνα κόμβο για να επεξεÏγαστείτε τα σήματα και τις ομάδες." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "ΕπεγεÏγασία πολυγώνου" +msgstr "ΕπεγεÏγασία Ï€ÏοσθÎτου" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "ΔημιουÏγία λÏσης C#" +msgstr "ΔημιουÏγία Ï€ÏοσθÎτου" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Î Ïόσθετα" +msgstr "Όνομα Ï€ÏοσθÎτου:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Υποφάκελος:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Γλώσσα" +msgstr "Γλώσσα:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "ΈγκυÏη δεσμή ενεÏγειών" +msgstr "Όνομα δεσμής ενεÏγειών:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "ΕνεÏγοποίηση τώÏα;" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3481,15 +3509,14 @@ msgstr "Î Ïοσθήκη κίνησης" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "ΦόÏτωσε" +msgstr "ΦόÏτωσε.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "ΆκυÏος Ï„Ïπος κόμβου. ΕπιτÏÎπονται μόνο Ïιζικοί κόμβοι." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3499,67 +3526,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"Το AnimationTree είναι ανενεÏγό.\n" +"ΕνεÏγοποίηση για αναπÏαγωγή, Îλεγχος Ï€Ïοειδοπιήσεων κόμβου σε πεÏίπτωση " +"αποτυχίας." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "ΟÏισμός θÎσης μίξης εντός του χώÏου" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Επιλογή και μετακίνηση σημείων, δημιουÏγία σημείων με δεξί κλικ." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "ΔιαγÏαφή σημείων" +msgstr "ΔημιουÏγία σημείων." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "Δεξί κλικ: ΔιαγÏαφή σημείου." +msgstr "ΔιαγÏαφή σημείων." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Μετακίνηση σημείου" +msgstr "Σημείο" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Κόμβος κίνησης" +msgstr "Άνοιγμα κόμβου κίνησης" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Η ενÎÏγεια '%s' υπάÏχει ήδη!" +msgstr "Το Ï„Ïίγωνο υπάÏχει ήδη" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "Το BlendSpace2D δεν ανήκει σε κόμβο AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Δεν υπάÏχουν Ï„Ïίγωνα, οπότε είναι αδÏνατη η μίξη." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "ΔημιουÏγία Ï„Ïιγώνων με την Îνωση σημείων." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "Ανάλυση %d ΤÏιγώνων:" +msgstr "ΔιαγÏαφή σημείων και Ï„Ïιγώνων." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "ΔημιουÏγία Ï„Ïιγώνων μίξης αυτόματα (αντι για χειÏοκινητα)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3567,6 +3591,11 @@ msgstr "" msgid "Snap" msgstr "ΚοÏμπωμα" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Ανάμειξη:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3574,20 +3603,26 @@ msgstr "ΕπεξεÏγασία φίλτÏων" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Ο κόμβος εξόδου δεν μποÏεί να Ï€Ïοστεθεί στο δÎντÏο μίξης." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"ΑδÏνατη η σÏνδεση, η θÏÏα μποÏεί να χÏησιμοποιείται ή η σÏνδεση να είναι " +"άκυÏη." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Δεν οÏίστηκε AnimationPlayer, άÏα αδÏνατη η ανάκτηση των ονομάτων των " +"κομματιών." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Η διαδÏομή AnimationPlayer είναι άκυÏη, άÏα αδÏνατη η ανάκτηση των ονομάτων " +"των κομματιών." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3595,23 +3630,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Το AnimationPlayer δεν Îχει ÎγκυÏη διαδÏομή ÏÎ¹Î¶Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï…, άÏα αδÏνατη η " +"ανάκτηση των ονομάτων των κομματιών." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Î Ïοσθήκη κόμβου" +msgstr "Î Ïοσθήκη κόμβου.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "ΕπεξεÏγασία φίλτÏων" +msgstr "ΕπεξεÏγασία φιλτÏαÏισμÎνων κομματιών:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "ΕπεξεÏγάσιμα παιδιά" +msgstr "ΕνεÏγοποίηση φιλτÏαÏίσματος" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3639,14 +3673,12 @@ msgid "Remove Animation" msgstr "ΚατάÏγηση κίνησης" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ΣΦΑΛΜΑ: Μη ÎγκυÏο όνομα κίνησης!" +msgstr "ΆκυÏο όνομα κίνησης!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ΣΦΑΛΜΑ: Αυτό το όνομα κίνησης υπάÏχει ήδη!" +msgstr "Ήδη υπαÏκτό όνομα κίνησης!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3670,14 +3702,12 @@ msgid "Duplicate Animation" msgstr "ΑναπαÏαγωγή κίνησης" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ΣΦΑΛΜΑ: Δεν υπάÏχει κίνηση για αντÏιγÏαφή!" +msgstr "Καμία κίνηση για αντÏιγÏαφή!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ΣΦΑΛΜΑ: Δεν υπάÏχει πόÏος κίνησης στο Ï€ÏόχειÏο!" +msgstr "Δεν υπάÏχει πόÏος κίνησης στο Ï€ÏόχειÏο!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3688,9 +3718,8 @@ msgid "Paste Animation" msgstr "Επικόλληση κίνησης" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ΣΦΑΛΜΑ: Δεν υπάÏχει κίνηση για επεξεÏγασία!" +msgstr "Καμία κίνηση για επεξεÏγασία!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3734,14 +3763,12 @@ msgid "New" msgstr "ÎÎο" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Μεταβάσεις" +msgstr "ΕπεξεÏγασία μεταβάσεων..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Άνοιγμα στον επεξεÏγαστή" +msgstr "Άνοιγμα για επιθεώÏηση" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3800,9 +3827,8 @@ msgid "Include Gizmos (3D)" msgstr "ΣυμπεÏιÎλαβε τα μαÏαφÎτια (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Επικόλληση κίνησης" +msgstr "ΚαÏφίτσωμα AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3833,34 +3859,32 @@ msgid "Cross-Animation Blend Times" msgstr "ΧÏόνοι ανάμειξης κινήσεων" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" msgstr "ΤÎλος" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Άμεση" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "ΣυγχÏωνισμÎνη" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Στο Ï„Îλος" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Ταξίδι" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Οι αÏχικοί και τελικοί κόμβοι είναι αναγκαίοι για υπο-μετασχηματισμό." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Δεν υπάÏχει στην διαδÏομή πόÏων." +msgstr "ΚανÎνας πόÏος αναπαÏαγωγής στη διαδÏομή: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3868,34 +3892,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Επιλογή και μετακίνηση κόμβων.\n" +"Δεξί κλικ για Ï€Ïοσθήκη κόμβων.\n" +"Shift+ΑÏιστεÏÏŒ κλικ για την δημιουÏγία συνδÎσεων." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "ΔημιουÏγία νÎου %s" +msgstr "ΔημιουÏγία νÎων κόμβων." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "ΣÏνδεση κόμβων" +msgstr "ΣÏνδεση κόμβων." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "ΑφαίÏεση επιλεγμÎνου κομματιοÏ." +msgstr "ΑφαίÏεση επιλεγμÎνου κόμβου ή μετάβασης" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Εναλλαγή αυτόματης αναπαÏαγωγής της κίνησης στην εκκίνηση, επανεκκίνηση και " +"επιστÏοφή στην αÏχή." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "ΟÏισμός τελικής κίνησης. ΧÏήσιμο για υπο-μεταβάσεις." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Μετάβαση" +msgstr "Μετάβαση: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3949,10 +3974,6 @@ msgid "Amount:" msgstr "Ποσότητα:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Ανάμειξη:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Ανάμειξη 0:" @@ -4094,14 +4115,12 @@ msgid "Asset Download Error:" msgstr "Σφάλμα λήψης:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Λήψη" +msgstr "Λήψη (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Λήψη" +msgstr "Λήψη..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4128,14 +4147,12 @@ msgid "Download for this asset is already in progress!" msgstr "Η λήψη είναι ήδη σε εξÎλιξη!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" msgstr "Î Ïώτο" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Î ÏοηγοÏμενη καÏÏ„Îλα" +msgstr "Î ÏοηγοÏμενο" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4143,7 +4160,7 @@ msgstr "Επόμενο" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Τελευταίο" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4271,29 +4288,29 @@ msgid "Create new horizontal and vertical guides" msgstr "ΔημιουÏγία νÎων οÏιζοντίων και κάθετων οδηγών" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" msgstr "Μετακίνηση πηγαίου σημείου" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "ΕπεξεÏγασία στοιχείου κανβά" +msgstr "ΠεÏιστÏοφή CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "ΕνÎÏγεια μετακίνησης" +msgstr "Μετακίνηση άγκυÏας" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "ΕπεξεÏγασία στοιχείου κανβά" +msgstr "Αλλαγή μεγÎθους CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "ΠεÏιστÏοφή CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "ΕπεξεÏγασία στοιχείου κανβά" +msgstr "Μετακίνηση CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4312,17 +4329,14 @@ msgid "Paste Pose" msgstr "Επικόληση στάσης" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" msgstr "ΣμÏκÏινση" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" msgstr "ΕπαναφοÏά μεγÎθυνσης" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" msgstr "ΜεγÎθυνση" @@ -4356,6 +4370,11 @@ msgid "Rotate Mode" msgstr "ΛειτουÏγία πεÏιστÏοφής" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "ΛειτουÏγία κλιμάκωσης (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4374,16 +4393,14 @@ msgid "Pan Mode" msgstr "ΛειτουÏγία Μετακίνησης κάμεÏας" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Εναλλαγή κουμπώματος" +msgstr "Εναλλαγή κουμπώματος." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "ΧÏήση κουμπώματος" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "ΕπιλογÎÏ‚ κουμπώματος" @@ -4425,9 +4442,8 @@ msgid "Snap to node sides" msgstr "ΚοÏμπωμα στις πλευÏÎÏ‚ του κόμβου" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "ΚοÏμπωμα στην άγκυÏα του κόμβου" +msgstr "ΚοÏμπωμα στο κÎντÏο του κόμβου" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4456,6 +4472,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "ΕπαναφÎÏει την δυνατότητα των παιδιών του αντικειμÎνου να επιλεγοÏν." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Σκελετός..." + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Εμφάνιση οστών" @@ -4469,12 +4490,11 @@ msgstr "ΕκκαθάÏιση αλυσίδας IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "ΔημιουÏγία Ï€ÏοσαÏμοσμÎνων οστών απο κόμβους" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "ΕκκαθάÏιση οστών" +msgstr "ΕκκαθάÏιση Ï€ÏοσαÏμοσμÎνων οστών" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4507,6 +4527,10 @@ msgid "Show Viewport" msgstr "Î Ïοβολή οπτικής γωνίας" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "ΚεντÏάÏισμα επιλογής" @@ -4519,9 +4543,8 @@ msgid "Layout" msgstr "Διάταξη" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Εισαγωγή κλειδιών" +msgstr "Εισαγωγή κλειδιών." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4586,9 +4609,8 @@ msgid "Set Handle" msgstr "ΟÏισμός λαβής" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "Σωματίδια" +msgstr "Σωματίδια CPU" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4949,9 +4971,9 @@ msgid "Create Navigation Polygon" msgstr "ΔημιουÏγία πολυγώνου πλοήγησης" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "ΔημιουÏία AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "ΔημιουÏγία οÏθογωνίου οÏατότητας" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4981,6 +5003,11 @@ msgstr "ΕκκαθάÏιση μάσκας εκπομπής" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "ΜετατÏοπή σε σωματίδια CPU" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Σωματίδια" @@ -5050,13 +5077,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Απαιτείται Îνα υλικό επεξεÏγασίας Ï„Ïπου 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "ΔημιουÏία AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "ΜετατÏοπή σε κεφαλαία" +msgid "Generate AABB" +msgstr "ΔημιουÏία AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5401,22 +5427,22 @@ msgid "Paste Resource" msgstr "Επικόλληση πόÏου" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Άνοιγμα στον επεξεÏγαστή" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Στιγμιότυπο:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "ΤÏπος:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Άνοιγμα στον επεξεÏγαστή" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "ΦόÏτωση πόÏου" @@ -5449,6 +5475,11 @@ msgstr "Σφάλμα κατά την μετακίνηση αÏχείου:\n" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Δεν ήταν δυνατή η φόÏτωση εικόνας" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Δεν ήταν δυνατή η φόÏτωση εικόνας" @@ -5550,11 +5581,8 @@ msgid "Copy Script Path" msgstr "ΑντιγÏαφή διαδÏομής δεσμής ενεÏγειών" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Εμφάνιση στο σÏστημα αÏχείων" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "ΙστοÏικά Ï€ÏοηγοÏμενο" #: editor/plugins/script_editor_plugin.cpp @@ -5625,7 +5653,8 @@ msgid "Keep Debugger Open" msgstr "ΔιατήÏησε τον αποσφαλματωτή ανοιχτό" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Αποσφαλμάτωση με εξωτεÏικό επεξεÏγαστή" #: editor/plugins/script_editor_plugin.cpp @@ -5633,10 +5662,6 @@ msgid "Open Godot online documentation" msgstr "Άνοιγμα ηλεκτÏονικής τεκμηÏίωσης της Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Αναζήτηση στην ιεÏαÏχεία κλάσεων." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Αναζήτηση στην τεκμηÏίωση αναφοÏάς." @@ -5674,21 +5699,9 @@ msgstr "Αποσφαλματωτής" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Αναζήτηση βοήθειας" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Αναζήτηση κλάσεων" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Οι ενσωματομÎνες δεσμÎÏ‚ ενεÏγειών μποÏοÏν να επεξεÏγαστοÏν μόνο όταν η σκηνή " -"στην οποία ανήκουν είναι φοÏτωμÎνη" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5699,6 +5712,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Πήγαινε σε συνάÏτηση..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Μόνο οι πόÏοι από το σÏστημα αÏχείων μποÏοÏν να διαγÏαφοÏν." @@ -5786,11 +5804,13 @@ msgid "Trim Trailing Whitespace" msgstr "ΠεÏικοπή ÎºÎ±Ï„Î±Î»Î·ÎºÏ„Î¹ÎºÎ¿Ï ÎºÎµÎ½Î¿Ï Î´Î¹Î±ÏƒÏ„Î®Î¼Î±Ï„Î¿Ï‚" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "ΜετατÏοπή εσοχής σε κενά" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "ΜετατÏοπή εσοχής σε στηλοθÎτες" #: editor/plugins/script_text_editor.cpp @@ -5807,36 +5827,32 @@ msgid "Remove All Breakpoints" msgstr "ΑφαίÏεση όλων των σημείων διακοπής" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Πήγαινε στο επόμενο σημείο διακοπής" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Πήγαινε στο Ï€ÏοηγοÏμενο σημείο διακοπής" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "ΜετατÏοπή σε κεφαλαία" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "ΜετατÏοπή σε πεζά" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "ΈυÏεση Ï€ÏοηγοÏμενου" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "ΦιλτÏάÏισμα αÏχείων..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Πήγαινε σε συνάÏτηση..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Πήγαινε σε γÏαμμή..." #: editor/plugins/script_text_editor.cpp @@ -5934,6 +5950,14 @@ msgid "Animation Key Inserted." msgstr "Το κλειδί κίνησης Îχει εισαχθεί." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Τόνος" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "ΖωγÏαφισμÎνα αντικείμενα" @@ -6101,6 +6125,11 @@ msgid "Freelook Speed Modifier" msgstr "ΤαχÏτητα ελεÏθεÏου κοιτάγματος" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Εμφάνιση πληÏοφοÏιών" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Διάλογος XForm" @@ -6203,11 +6232,6 @@ msgid "Tool Scale" msgstr "ΕÏγαλείο κλιμάκωσης" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "κουμπώματος στο πλÎγμα" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Εναλλαγή ελεÏθεÏης κάμεÏας" @@ -6615,6 +6639,11 @@ msgid "Fix Invalid Tiles" msgstr "Μη ÎγκυÏο όνομα." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "ΚεντÏάÏισμα επιλογής" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "Βάψιμο TileMap" @@ -6661,24 +6690,31 @@ msgstr "Επιλογή πλακιδίου" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "ΑφαίÏεση επιλογής" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "ΠεÏιστÏοφή 0 μοίÏες" +#, fuzzy +msgid "Rotate left" +msgstr "ΛειτουÏγία πεÏιστÏοφής" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "Μετακίνηση δεξιά" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "ΠεÏιστÏοφή 90 μοίÏες" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "ΠεÏιστÏοφή 180 μοίÏες" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "ΠεÏιστÏοφή 270 μοίÏες" +#, fuzzy +msgid "Clear transform" +msgstr "Μετασχηματισμός" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6711,7 +6747,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6727,7 +6763,7 @@ msgid "Merge from scene?" msgstr "Συγχώνευση από σκηνή;" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6817,6 +6853,16 @@ msgstr "" "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν ή είναι κατεστÏαμμÎνα:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "μόλις απελευθεÏώθηκε" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Εξαγωγή για %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "ΔιαμοÏφώσεις" @@ -6825,6 +6871,11 @@ msgid "Add..." msgstr "Î Ïοσθήκη..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Εξαγωγή ÎÏγου" + +#: editor/project_export.cpp msgid "Resources" msgstr "Î ÏŒÏοι" @@ -6887,6 +6938,16 @@ msgid "Export PCK/Zip" msgstr "Εξαγωγή PCK/ZIP" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "ΛειτουÏγία εξαγωγής:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Εξαγωγή" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:" @@ -7366,10 +7427,6 @@ msgstr "Ρυθμίσεις ÎÏγου (project.godot)" msgid "General" msgstr "Γενικά" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Ιδιότητα:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "ΠαÏάκαμψη για..." @@ -7503,10 +7560,6 @@ msgstr "ΕπιλÎξτε Îναν κόμβο" msgid "Bit %d, val %d." msgstr "Δυαδικό ψηφίο %d, τιμή %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Ιδιότητες:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Επιλογή ιδιότητας" @@ -7599,7 +7652,7 @@ msgid "Step" msgstr "Βήμα:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7608,7 +7661,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7653,7 +7706,7 @@ msgstr "Κεφαλαία" msgid "Reset" msgstr "ΕπαναφοÏά μεγÎθυνσης" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Σφάλμα" @@ -7714,6 +7767,10 @@ msgid "Instance Scene(s)" msgstr "ΔημιουÏγία στιγμιοτÏπυ σκηνών" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "ΑÏχικοποίηση σκηνής ως παιδί" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "ΕκκαθάÏιση δεσμής ενεÏγειών" @@ -7752,6 +7809,12 @@ msgid "Save New Scene As..." msgstr "Αποθήκευση νÎας σκηνής ως..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "ΕπεξεÏγάσιμα παιδιά" @@ -7831,6 +7894,11 @@ msgid "Clear Inheritance" msgstr "ΕκκαθάÏιση κληÏονομικότητας" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Άνοιγμα ηλεκτÏονικής τεκμηÏίωσης της Godot" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "ΔιαγÏαφή Κόμβων" @@ -7839,15 +7907,16 @@ msgid "Add Child Node" msgstr "Î Ïοσθήκη κόμβου ως παιδί" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "ΑÏχικοποίηση σκηνής ως παιδί" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Αλλαγή Ï„Ïπου" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Άνοιγμα δεσμής ενεÏγειών" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "Βγάζει νόημα!" @@ -8013,6 +8082,11 @@ msgid "Path is empty" msgstr "Η διαδÏομή είναι άδεια" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Η διαδÏομή αποθήκευσης είναι άδεια!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Η διαδÏομή δεν είναι τοπική" @@ -8101,20 +8175,9 @@ msgid "Bytes:" msgstr "ΨηφιολÎξεις:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Î Ïοειδοποίηση" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Σφάλμα:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Πηγή:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "ΣυνάÏτηση:" +#, fuzzy +msgid "Stack Trace" +msgstr "Στοίβαξη καÏÎ" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8147,18 +8210,6 @@ msgid "Stack Frames" msgstr "Στοίβαξη καÏÎ" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Μεταβλητή" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Σφάλματα:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Ιχνηλάτηση στοίβας (Εάν υφίσταται):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Î ÏόγÏαμμα δημιουÏγίας Ï€Ïοφιλ" @@ -8586,12 +8637,8 @@ msgid "End of inner exception stack trace" msgstr "ΤÎλος ιχνηλάτησης στοίβας εσωτεÏικής εξαίÏεσης" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Î Ïοετοίμασε!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Î Ïοετοιμασία του πλÎγματος πλοήγησης." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8876,6 +8923,10 @@ msgid "Base Type:" msgstr "ΤÏπος βάσης:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "ΜÎλη:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "ΔιαθÎσιμοι κόμβοι:" @@ -8979,11 +9030,11 @@ msgid "Search VisualScript" msgstr "ΑφαίÏεση κόμβου VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "ΠάÏε" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9081,6 +9132,12 @@ msgstr "" "Ένα σχήμα Ï€ÏÎπει να δοθεί στο CollisionShape2D για να λειτουÏγήσει. " "ΔημιουÏγήστε Îνα πόÏο σχήματος για αυτό!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9131,6 +9188,12 @@ msgstr "" "Δεν Îχει οÏιστεί υλικό για να επεξεÏγαστεί τα σωματίδια, οπότε η συμπεÏιφοÏά " "θα εκτυπώνεται." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "Το PathFollow2D δουλεÏει μόνο όταν κληÏονομεί Îναν κόμβο Path2D." @@ -9274,6 +9337,18 @@ msgstr "" "Ένα σχήμα Ï€ÏÎπει να δοθεί στο CollisionShape για να λειτουÏγήσει. " "ΔημιουÏγήστε Îνα πόÏο σχήματος για αυτό!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" +"Τίποτα δεν είναι οÏατό, επειδή δεν Îχουν οÏιστεί πεÏάσματα για τα πλÎγματα." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "ΤοποθÎτηση πλεγμάτων" @@ -9298,6 +9373,26 @@ msgid "" msgstr "" "Τίποτα δεν είναι οÏατό, επειδή δεν Îχουν οÏιστεί πεÏάσματα για τα πλÎγματα." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "Το PathFollow2D δουλεÏει μόνο όταν κληÏονομεί Îναν κόμβο Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "Το PathFollow2D δουλεÏει μόνο όταν κληÏονομεί Îναν κόμβο Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9340,7 +9435,7 @@ msgstr "" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9423,10 +9518,6 @@ msgstr "Ειδοποίηση!" msgid "Please Confirm..." msgstr "ΠαÏακαλώ επιβεβαιώστε..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Επιλογή Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φακÎλου" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9437,6 +9528,10 @@ msgstr "" "καλÎσετε την popup() ή καμία από τις συναÏτήσεις popup*(). Το να τους κάνετε " "οÏατοÏÏ‚ κατά την επεξεÏγασία, όμως, δεν είναι Ï€Ïόβλημα." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9515,6 +9610,124 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "ΜεγÎθυνση:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "" +#~ "Είστε σίγουÏοι πως θÎλετε να αφαιÏÎσετε όλες τις συνδÎσεις απο το \"" + +#~ msgid "Class List:" +#~ msgstr "Λίστα κλάσεων:" + +#~ msgid "Search Classes" +#~ msgstr "Αναζήτηση κλάσεων" + +#~ msgid "Public Methods" +#~ msgstr "Δημόσιες συναÏτήσεις" + +#~ msgid "Public Methods:" +#~ msgstr "Δημόσιες συναÏτήσεις:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Στοιχεία του θÎματος GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Στοιχεία του θÎματος GUI:" + +#~ msgid "Property: " +#~ msgstr "Ιδιότητα: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Εναλλαγή φακÎλου ως αγαπημÎνο." + +#~ msgid "Show current scene file." +#~ msgstr "Εμφάνιση του αÏχείου της Ï„ÏÎχουσας σκηνής." + +#~ msgid "Enter tree-view." +#~ msgstr "Είσοδος σε Ï€Ïοβολή δÎντÏου." + +#~ msgid "Whole words" +#~ msgstr "ΟλόκληÏες λÎξεις" + +#~ msgid "Match case" +#~ msgstr "Αντιστοίχηση πεζών-κεφαλαίων" + +#~ msgid "Filter: " +#~ msgstr "ΦίλτÏο: " + +#~ msgid "Ok" +#~ msgstr "Εντάξει" + +#~ msgid "Show In File System" +#~ msgstr "Εμφάνιση στο σÏστημα αÏχείων" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Αναζήτηση στην ιεÏαÏχεία κλάσεων." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Αναζήτηση κλάσεων" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Οι ενσωματομÎνες δεσμÎÏ‚ ενεÏγειών μποÏοÏν να επεξεÏγαστοÏν μόνο όταν η " +#~ "σκηνή στην οποία ανήκουν είναι φοÏτωμÎνη" + +#~ msgid "Convert To Uppercase" +#~ msgstr "ΜετατÏοπή σε κεφαλαία" + +#~ msgid "Convert To Lowercase" +#~ msgstr "ΜετατÏοπή σε πεζά" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "κουμπώματος στο πλÎγμα" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "ΠεÏιστÏοφή 0 μοίÏες" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "ΠεÏιστÏοφή 90 μοίÏες" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "ΠεÏιστÏοφή 180 μοίÏες" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "ΠεÏιστÏοφή 270 μοίÏες" + +#~ msgid "Warning" +#~ msgstr "Î Ïοειδοποίηση" + +#~ msgid "Error:" +#~ msgstr "Σφάλμα:" + +#~ msgid "Source:" +#~ msgstr "Πηγή:" + +#~ msgid "Function:" +#~ msgstr "ΣυνάÏτηση:" + +#~ msgid "Variable" +#~ msgstr "Μεταβλητή" + +#~ msgid "Errors:" +#~ msgstr "Σφάλματα:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Ιχνηλάτηση στοίβας (Εάν υφίσταται):" + +#~ msgid "Bake!" +#~ msgstr "Î Ïοετοίμασε!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Î Ïοετοιμασία του πλÎγματος πλοήγησης." + +#~ msgid "Get" +#~ msgstr "ΠάÏε" + #~ msgid "Change Scalar Constant" #~ msgstr "Αλλαγή μονόμετÏης σταθεÏάς" @@ -10011,9 +10224,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "ΑδÏνατη η αποθήκευση υπό-εικόνας άτλαντα:" -#~ msgid "Exporting for %s" -#~ msgstr "Εξαγωγή για %s" - #~ msgid "Setting Up..." #~ msgstr "ΑÏχικοποίηση..." @@ -10120,9 +10330,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Πηγαία γÏαμματοσειÏά:" -#~ msgid "Source Font Size:" -#~ msgstr "ΜÎγεθος πηγαίας γÏαμματοσειÏάς:" - #~ msgid "Dest Resource:" #~ msgstr "Î ÏŒÏος Ï€ÏοοÏισμοÏ:" @@ -10199,9 +10406,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "ΑÏχή" -#~ msgid "Filters" -#~ msgstr "ΦίλτÏα" - #~ msgid "Source path is empty." #~ msgstr "Η διαδÏομή Ï€ÏοÎλευσης είναι άδεια." @@ -10480,15 +10684,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "ΣτεÏεοφωνικό" -#~ msgid "Pitch" -#~ msgstr "Τόνος" - #~ msgid "Window" #~ msgstr "ΠαÏάθυÏο" -#~ msgid "Move Right" -#~ msgstr "Μετακίνηση δεξιά" - #~ msgid "Scaling to %s%%." #~ msgstr "Κλιμάκωση to %s%%." @@ -10562,9 +10760,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "μόλις πατήθηκε" -#~ msgid "just released" -#~ msgstr "μόλις απελευθεÏώθηκε" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" diff --git a/editor/translations/es.po b/editor/translations/es.po index efc8ae334d..012cff890c 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -31,12 +31,15 @@ # Yovani Damián <blackblex@gmail.com>, 2018. # Andrus Diaz German <andrusdiazaleman@gmail.com>, 2018. # Franklin David Macias Avellan <franklin.macias864@gmail.com>, 2018. +# Dianiel GarcÃa <jdangarr@gmail.com>, 2018. +# ayahuasca1979 <ayahuasca1979@gmail.com>, 2018. +# Elena G <elena.guzbla@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-08-07 18:44+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Elena G <elena.guzbla@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -44,17 +47,15 @@ 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 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" -"El argumento para convert() no es correcto, prueba utilizando constantes " -"TYPE_*." +msgstr "El argumento para convert() no es correcto, utiliza constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -63,34 +64,32 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Entrada inválida %i (no pasado) en expresión" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" +"self no puede ser usado ya que la instancia es nula (no ha sido pasada)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Ãndice inválido de nombre de propiedad '%s' en el nodo %s." +msgstr "Operandos inválidos para el operador %s, %s y %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Ãndice inválido de nombre de propiedad '%s' en el nodo %s." +msgstr "Indice inválido de tipo %s para tipo base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Indice de nombre invalido '%s' para el tipo base %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argumento incorrecto de tipo: " +msgstr "Argumentos inválidos para construir '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "En llamada a '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -99,27 +98,23 @@ msgstr "Libre" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Balanceado" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Voltear horizontalmente" +msgstr "Espejo" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Insertar clave" +msgstr "Insertar Clave AquÃ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplicar selección" +msgstr "Duplicar Clave(s) Seleccionada(s)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Quitar seleccionados" +msgstr "Eliminar Clave(s) Seleccionada(s)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -150,46 +145,40 @@ msgid "Anim Change Call" msgstr "Cambiar llamada de animación" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Propiedad:" +msgstr "Pista de Propiedades" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Tipo de transformación" +msgstr "Pista de Transformación 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Pista de Llamada a Métodos" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Pista de Curva Bezier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Pista de Reproducción de Audio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Detener la reproducción de la animación. (S)" +msgstr "Pista de Reproducción de Animación" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Añadir pista de animación" +msgstr "Agregar Pista" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Duración de la animación (en segundos)." +msgstr "Tiempo de Duración de la Animación (segundos)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Zoom de animación." +msgstr "Loop de Animación" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -197,42 +186,36 @@ msgid "Functions:" msgstr "Funciones:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Oyente de audio" +msgstr "Clips de Audio:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Clips" +msgstr "Clips de Anim:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Act/desact. modo sin distracciones." +msgstr "Act./Desact. esta pista." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Modo de Actualización (Como esta configurada esta propiedad)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Nodo de animación" +msgstr "Modo de Interpolación" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Modo Loop Envolvente (Interpolar el final con el comienzo al loopear)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Remover la pista seleccionada." +msgstr "Quitar esta pista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Tiempo de Crossfade (s):" +msgstr "Tiempo (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -247,13 +230,12 @@ msgid "Trigger" msgstr "Trigger" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "CaracterÃsticas" +msgstr "Captura" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Más Cercano" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -262,16 +244,15 @@ msgstr "Lineal" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cúbica" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Cambiar Interpolación de Loop de Anim" +msgstr "Interp de Loop Cortante" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Interp de Loop Envolvente" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -279,14 +260,12 @@ msgid "Insert Key" msgstr "Insertar clave" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplicar nodo(s)" +msgstr "Duplicar Clave(s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Eliminar nodo(s)" +msgstr "Eliminar Clave(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -316,11 +295,11 @@ msgstr "Insertar animación" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "Un AnimationPlayer no puede animarse a sà mismo, solo a otros players." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "Crear e insertar animación" +msgstr "Crear e Insertar Animación" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" @@ -332,7 +311,7 @@ msgstr "Insertar clave de animación" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Las pistas Transform solo aplican a nodos de tipo Spatial." #: editor/animation_track_editor.cpp msgid "" @@ -341,44 +320,51 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Las pistas de audio pueden apuntar solo a nodos de tipo:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Las pistas de Animación solo pueden apuntar a nodos AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Un reproductor de animación no puede animarse a sà mismo, solo a otros " +"reproductores." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "No es posible agregar una nueva pista sin una raÃz" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." msgstr "" +"La ruta de la pista es inválida, por lo tanto no se pueden agregar claves." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "La pista no es de tipo Spatial, no se puede insertar la clave" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" +"La ruta de la pista es inválida, por ende no se pueden agregar claves de " +"métodos." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet no encontrado en el script: " +msgstr "Método no encontrado en el objeto: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "Mover claves de animación" +msgstr "Mover Claves de Anim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "¡El portapapeles está vacÃo!" +msgstr "El portapapeles está vacÃo" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -388,24 +374,24 @@ msgstr "Escalar claves de animación" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Esta opción no funciona con la edición Bezier, ya que es solo una pista " +"única." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Mostrar solo las pistas de los nodos seleccionados en el árbol." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Agrupar las pistas por nodo o mostrarlas como una lista plana." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Fijar (Pixeles):" +msgstr "Snap (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "El árbol de animación es correcto." +msgstr "Valor de step de animación." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -417,19 +403,16 @@ msgid "Edit" msgstr "Editar" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Ãrbol de animación" +msgstr "Propiedades de animación." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Copiar parámetros" +msgstr "Copiar Pistas" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Pegar parámetros" +msgstr "Pegar Pistas" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -439,8 +422,7 @@ msgstr "Escalar selección" msgid "Scale From Cursor" msgstr "Escalar desde cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplicar selección" @@ -449,16 +431,17 @@ msgid "Duplicate Transposed" msgstr "Duplicar transpuesto" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Quitar seleccionados" +msgstr "Eliminar selección" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Ir al siguiente paso" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Ir al paso anterior" #: editor/animation_track_editor.cpp @@ -471,11 +454,11 @@ msgstr "Limpiar animación" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Elegà el nodo que será animado:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Usar Curvas Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -523,7 +506,7 @@ msgstr "Relación de escala:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Elegir pistas a copiar:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -561,11 +544,11 @@ msgstr "Sin coincidencias" msgid "Replaced %d occurrence(s)." msgstr "%d ocurrencia(s) reemplazada(s)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Coincidir mayús/minúsculas" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Palabras completas" @@ -594,16 +577,15 @@ msgid "Reset Zoom" msgstr "Restablecer zoom" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Advertencias" +msgstr "Advertencias:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom (%):" +msgid "Font Size:" +msgstr "Tamaño de la tipografÃa elegida:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "LÃnea:" @@ -636,6 +618,7 @@ msgstr "Añadir" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -692,9 +675,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Desconectar '%s' de '%s'" +msgstr "Desconectar todos de la señal: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -706,19 +688,17 @@ msgid "Disconnect" msgstr "Desconectar" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Conectando señal:" +msgstr "Conectar Señal: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Editar conexiones" +msgstr "Editar Conexión: " #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "¿Seguro que quieres ejecutar más de un proyecto?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "¿Estás seguro/a que quieres quitar todas las conexiones de esta señal?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -726,22 +706,19 @@ msgstr "Señales" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "¿Estás seguro/a que quieres quitar todas las conexiones de esta señal?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Desconectar" +msgstr "Desconectar Todo" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Editar" +msgstr "Editar..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Métodos" +msgstr "Ir Al Método" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -772,17 +749,14 @@ msgstr "Recientes:" msgid "Search:" msgstr "Buscar:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Coincidencias:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descripción:" @@ -843,9 +817,10 @@ msgid "Search Replacement Resource:" msgstr "Buscar recurso de reemplazo:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -878,7 +853,8 @@ msgid "Error loading:" msgstr "Error al cargar:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "La escena no se pudo cargar porque faltan las siguientes dependencias:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -937,14 +913,6 @@ msgstr "Cambiar valor del diccionario" msgid "Thanks from the Godot community!" msgstr "¡Muchas gracias de parte de la comunidad de Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Aceptar" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Contribuidores de Godot" @@ -1120,8 +1088,7 @@ msgid "Bus options" msgstr "Opciones del bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -1294,8 +1261,9 @@ msgstr "Ruta:" msgid "Node Name:" msgstr "Nombre del nodo:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nombre" @@ -1365,12 +1333,17 @@ msgid "Template file not found:" msgstr "Archivo de plantilla no encontrado:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Seleccionar carpeta actual" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "El archivo ya existe ¿Quieres sobreescribirlo?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Seleccionar carpeta actual" +#, fuzzy +msgid "Select This Folder" +msgstr "Seleccionar esta carpeta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1378,12 +1351,13 @@ msgstr "Copiar ruta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" -msgstr "Mostrar en el navegador de archivos" +msgid "Open in File Manager" +msgstr "Abrir en el Explorador de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Mostrar en el navegador de archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1419,7 +1393,8 @@ msgid "Open a File or Directory" msgstr "Abrir un archivo o directorio" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Guardar" @@ -1477,8 +1452,7 @@ msgstr "Directorios y archivos:" msgid "Preview:" msgstr "Vista previa:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Archivo:" @@ -1494,24 +1468,11 @@ msgstr "Analizando fuentes" msgid "(Re)Importing Assets" msgstr "(Re)Importando assets" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Ayuda de búsqueda" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Lista de clases:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Buscar clases" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Cima" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Clase:" @@ -1528,28 +1489,31 @@ msgid "Brief Description:" msgstr "Descripción breve:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Miembros" +msgid "Properties" +msgstr "Propiedades" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Miembros:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Propiedades:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Métodos públicos" +msgid "Methods" +msgstr "Métodos" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Métodos públicos:" +#, fuzzy +msgid "Methods:" +msgstr "Métodos" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Elementos del tema de interfaz" +#, fuzzy +msgid "Theme Properties" +msgstr "Propiedades" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Elementos del tema de interfaz:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Propiedades:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1576,10 +1540,16 @@ msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Descripción" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Descripción:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Tutoriales en lÃnea:" @@ -1594,11 +1564,13 @@ msgstr "" "$color][url=$url2]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Propiedades" +#, fuzzy +msgid "Property Descriptions" +msgstr "Descripción de la propiedad:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Descripción de la propiedad:" #: editor/editor_help.cpp @@ -1610,11 +1582,13 @@ msgstr "" "[color=$color][url=$url]aportando una[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Métodos" +#, fuzzy +msgid "Method Descriptions" +msgstr "Descripción del método:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Descripción del método:" #: editor/editor_help.cpp @@ -1625,18 +1599,67 @@ msgstr "" "Actualmente no hay una descripción para este método. Por favor, ¡ayúdanos " "[color=$color][url=$url]aportando una[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Ayuda de búsqueda" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Mostrar normales" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Classes Only" +msgstr "Clases" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Métodos" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Señales" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Constantes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Propiedades" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Propiedades" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Miembros" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Clase:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Propiedad:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Establecer" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Asignar Múltiples:" #: editor/editor_log.cpp msgid "Output:" @@ -1664,6 +1687,11 @@ msgstr "La exportación del proyecto falló con el código de error %d." msgid "Error saving resource!" msgstr "¡Error al guardar el recurso!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Aceptar" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Guardar recurso como..." @@ -1683,6 +1711,7 @@ msgstr "Error al guardar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" +"No se puede abrir '%s'. El archivo puede haber sido movido o eliminado." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1718,12 +1747,22 @@ msgstr "Esta operación no puede realizarse sin una escena raÃz." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "No se pudo guardar la escena. Las dependencias (instancias o herencia) no se " "pudieron resolver." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "¡No se puede sobreescribir una escena que está abierta!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "¡No se puede cargar MeshLibrary para poder unir los datos!" @@ -1986,6 +2025,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "No se pudo cargar el script addon desde la ruta: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"No se pudo cargar el script addon desde la ruta: '%s' El script no está en " +"modo tool." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2037,15 +2085,19 @@ msgstr "Borrar ajustes" msgid "Default" msgstr "Predeterminado" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "Mostrar en el sistema de archivos" + +#: editor/editor_node.cpp msgid "Play This Scene" -msgstr "Reproducir escena" +msgstr "Reproducir esta escena" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Cerrar las demás pestañas" +msgstr "Cerrar pestaña" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2120,7 +2172,8 @@ msgid "Save Scene" msgstr "Guardar escena" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Guardar todas las escenas" #: editor/editor_node.cpp @@ -2149,7 +2202,7 @@ msgid "Undo" msgstr "Deshacer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Rehacer" @@ -2178,15 +2231,15 @@ msgid "Tools" msgstr "Herramientas" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "¿Abrir el administrador de proyectos?" +msgstr "Abrir carpeta de datos del proyecto" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Salir al listado de proyectos" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Depurar" @@ -2294,18 +2347,16 @@ msgid "Toggle Fullscreen" msgstr "Act/desact. pantalla completa" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Ajustes del Editor" +msgstr "Abrir carpeta de datos/configuración del Editor" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Abrir Carpeta de Datos del Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Ajustes del Editor" +msgstr "Abrir carpeta de configuración del Editor" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2315,10 +2366,6 @@ msgstr "Cargar plantillas de exportación" msgid "Help" msgstr "Ayuda" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Clases" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2389,13 +2436,12 @@ msgstr "Reproducir escena personalizada" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Cambiar el driver de video requiere reiniciar el editor." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Guardar y reimportar" +msgstr "Guardar y Reiniciar" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2413,27 +2459,26 @@ msgstr "Actualizar cambios" msgid "Disable Update Spinner" msgstr "Desactivar indicador de actividad" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspector" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importar" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nodos" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Sistema de archivos" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspector" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Nodos" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Expandir todo" +msgstr "Expandir panel inferior" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2512,9 +2557,8 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Editar polÃgono" +msgstr "Editar Plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2538,15 +2582,13 @@ msgid "Status:" msgstr "Estado:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Editar" +msgstr "Editar:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "¡Iniciar!" +msgstr "Iniciar" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2568,7 +2610,7 @@ msgstr "% de cuadro" msgid "Physics Frame %" msgstr "% de cuadro fÃsico" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tiempo:" @@ -2592,27 +2634,39 @@ msgstr "Tiempo" msgid "Calls" msgstr "Llamadas" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Activado" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Capa" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, valor %d." +msgstr "Bit %d, valor %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[VacÃo]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Asignar" +msgstr "Asignar..." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2631,10 +2685,6 @@ msgstr "Nuevo %s" msgid "Make Unique" msgstr "Hacer único" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Mostrar en el sistema de archivos" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2643,7 +2693,8 @@ msgstr "Mostrar en el sistema de archivos" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Pegar" @@ -2656,36 +2707,32 @@ msgstr "Convertir a %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Abrir en el editor" +msgstr "Abrir Editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "¡El nodo seleccionado no es un Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Tamaño de celda:" +msgstr "Tamaño: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Página: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Nuevo nombre:" +msgstr "Nueva Clave:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Nuevo nombre:" +msgstr "Nuevo Valor:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Agregar Par Clave/Valor" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2779,9 +2826,8 @@ msgid "Can't open export templates zip." msgstr "No se puede abir el zip de plantillas de exportación." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Formato de \"version.txt\" inválido dentro de las plantillas." +msgstr "Formato de version.txt inválido dentro de plantillas: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2846,6 +2892,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Fallo la instalación de plantillas. Las plantillas problemáticas pueden ser " +"encontradas en '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2926,9 +2974,9 @@ msgid "Download Templates" msgstr "Descargar plantillas" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Seleccionar mirror de la lista: " +msgstr "" +"Seleccionar un mirror de la lista: (Shift + Clic: Abrir en el Navegador)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2937,20 +2985,23 @@ msgstr "" "de tipos de archivo!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favoritos:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "¡No se puede navegar a '%s' ya que no se ha encontrado en el sistema de " "archivos!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Ver elementos como una cuadrÃcula de miniaturas" +msgstr "Ver Ãtems como una cuadrÃcula de miniaturas." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Ver elementos como una lista" +msgstr "Ver Ãtems como una lista." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2978,7 +3029,7 @@ msgstr "Error al duplicar:" msgid "Unable to update dependencies:" msgstr "No se han podido actualizar las dependencias:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "No se proporcionó un nombre" @@ -3015,22 +3066,6 @@ msgid "Duplicating folder:" msgstr "Duplicando carpeta:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Expandir todo" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Colapsar todo" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renombrar..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Mover a..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Abrir escena(s)" @@ -3039,6 +3074,16 @@ msgid "Instance" msgstr "Instanciar" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favoritos:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Quitar del grupo" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Editar dependencias..." @@ -3046,19 +3091,35 @@ msgstr "Editar dependencias..." msgid "View Owners..." msgstr "Ver propietarios..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renombrar..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Mover a..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Nuevo script" +msgstr "Nuevo Script..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Guardar recurso como..." +msgstr "Nuevo Recurso..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Expandir todo" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Colapsar todo" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3081,13 +3142,12 @@ msgstr "Re-escanear sistema de archivos" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Act/desact. estado de carpeta como favorito" +msgid "Toggle split mode" +msgstr "Cambiar modo" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Guardar el sub-tile editado actualmente." +msgid "Search files" +msgstr "Buscar archivos" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -3095,15 +3155,6 @@ msgstr "" "Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Buscar clases" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3111,18 +3162,17 @@ msgstr "" "Escaneando archivos,\n" "Por favor, espere..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Ya hay una carpeta en esta ruta con ese nombre." +msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Sobreescribir" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3130,32 +3180,23 @@ msgstr "Crear script" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" -msgstr "Encontrar tile" +msgid "Find in Files" +msgstr "Encontrar en archivos" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "Buscar" +msgid "Find:" +msgstr "Buscar: " #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Palabras completas" +msgid "Folder:" +msgstr "Carpeta: " #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Coincidir mayús/minúsculas" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Filtro:" +msgid "Filters:" +msgstr "Filtros" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3171,52 +3212,48 @@ msgid "Cancel" msgstr "Cancelar" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Buscar: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Reemplazar" +msgstr "Reemplazar: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Reemplazar todo" +msgstr "Reemplazar todo (no se puede deshacer)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Guardando..." +msgstr "Buscando..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Texto de búsqueda" +msgstr "Búsqueda completa" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ERROR: ¡El nombre de animación ya existe!" +msgstr "El nombre del grupo ya existe." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Nombre inválido." +msgstr "nombre de Grupo inválido." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Grupo(s) de Nodos" +msgstr "Nodos fuera del Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Filtrar nodos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Grupo(s) de Nodos" +msgstr "Nodos dentro del Grupo" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3227,9 +3264,8 @@ msgid "Remove from Group" msgstr "Quitar del grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Grupos de imágenes" +msgstr "Administrar Grupos" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3337,17 +3373,14 @@ msgstr "Reimportar" msgid "Failed to load resource." msgstr "Error al cargar el recurso." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Aceptar" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Expandir todas las propiedades" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Ocultar todas las propiedades" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3364,9 +3397,8 @@ msgid "Paste Params" msgstr "Pegar parámetros" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "¡El portapapeles de recursos está vacÃo!" +msgstr "Editar Portapapeles de Recursos" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3409,9 +3441,8 @@ msgid "Object properties." msgstr "Propiedades del objeto." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtrar nodos" +msgstr "Filtrar propiedades" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3426,37 +3457,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Selecciona un nodo para editar señales y grupos." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Editar polÃgono" +msgstr "Editar Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Crear solución C#" +msgstr "Crear un Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Lista de Plugins:" +msgstr "Nombre del Plugin:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Subcarpeta:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Lenguaje" +msgstr "Lenguaje:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Script válido" +msgstr "Nombre del Script:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "¿Activar ahora?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3515,15 +3541,15 @@ msgstr "Añadir animación" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Cargar" +msgstr "Cargar..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Este tipo de nodo no puede ser usado. Solo los nodos raÃz están permitidos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3533,73 +3559,75 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"El AnimationTree esta inactivo.\n" +"ActÃvalo para habilitar la reproducción, revisa las advertencias de nodo si " +"la activación falla." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Asignar la posición de blending dentro del espacio" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Seleccionar y mover puntos, crear puntos con clic derecho." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Eliminar puntos" +msgstr "Crear puntos." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "Clic derecho: Borrar punto." +msgstr "Borrar puntos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Mover punto" +msgstr "Punto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Nodo de animación" +msgstr "Abrir Nodo de Animación" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "¡La acción «%s» ya existe!" +msgstr "El triángulo ya existe" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D no pertenece a un nodo AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "No hay ningún triángulo, asà que no se puede hacer blending." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Crear triángulos conectando puntos." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "Leyendo %d triángulos:" +msgstr "Borrar puntos y triángulos." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Generar triángulos de blending automáticamente (en vez de manualmente)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap" -msgstr "Ajustar a cuadrÃcula" +msgstr "Snap" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Mezcla:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3608,20 +3636,26 @@ msgstr "Editar filtros" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "El nodo de salida no puede ser agregado al blend tree." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"No se pudo conectar, el puerto podrÃa estar en uso o la conexión ser " +"inválida." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"No se asigno ningún reproductor de animación, asà que no se pudieron obtener " +"los nombres de las pistas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"La ruta de reproductor asignada es inválida, asà que no se pudieron obtener " +"los nombres de las pistas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3629,23 +3663,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"El reproductor de animación no tiene una ruta válida a un nodo raÃz, asà que " +"no se pudieron obtener los nombres de las pistas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Añadir nodo" +msgstr "Añadir Nodo..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Editar filtros" +msgstr "Editar pistas filtradas:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Hijos editables" +msgstr "Habilitar filtrado" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3673,14 +3706,12 @@ msgid "Remove Animation" msgstr "Quitar animación" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ERROR: ¡El nombre de animación no es correcto!" +msgstr "¡Nombre de animación inválido!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ERROR: ¡El nombre de animación ya existe!" +msgstr "¡El nombre de animación ya existe!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3704,14 +3735,12 @@ msgid "Duplicate Animation" msgstr "Duplicar animación" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ERROR: ¡No hay animaciones para copiar!" +msgstr "¡No hay animaciones para copiar!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ERROR: ¡No hay recursos de animación en el portapapeles!" +msgstr "¡No hay recursos de animación en el portapapeles!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3722,9 +3751,8 @@ msgid "Paste Animation" msgstr "Pegar animación" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ERROR: ¡No hay animación que editar!" +msgstr "¡No hay animación que editar!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3770,14 +3798,12 @@ msgid "New" msgstr "Nuevo" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Editar Conecciones..." +msgstr "Editar Transiciones..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Abrir en el editor" +msgstr "Abrir en el Inspector" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3836,9 +3862,8 @@ msgid "Include Gizmos (3D)" msgstr "Incluir Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Pegar animación" +msgstr "Pinear el AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3869,34 +3894,32 @@ msgid "Cross-Animation Blend Times" msgstr "Cross-Animation Blend Times" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "Finales" +msgstr "Fin" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Inmediata" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Sincronizar" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Al Final" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Viaje" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "El comienzo y fin de los nodos son necesarios para una sub-transición." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "No está en la ruta de recursos." +msgstr "Ningún recurso de reproducción asignado en la ruta: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3904,34 +3927,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Seleccionar y mover nodos.\n" +"Clic der. para agregar nuevos nodos.\n" +"Shift + clic izq. para crear conexiones." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Crear nuevo %s" +msgstr "Crear nuevos nodos." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Conectar nodos" +msgstr "Conectar nodos." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Remover la pista seleccionada." +msgstr "Quitar el nodo o transición seleccionado/a" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Act./Desact. reproducción automática de esta animación al comenzar, " +"reiniciar o hacer seek hasta el cero." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +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_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3985,10 +4009,6 @@ msgid "Amount:" msgstr "Cantidad:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Mezcla:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Mezcla 0:" @@ -4129,14 +4149,12 @@ msgid "Asset Download Error:" msgstr "Error en la descarga del asset:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Descargando" +msgstr "Descargando (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Descargando" +msgstr "Descargando..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4163,14 +4181,12 @@ msgid "Download for this asset is already in progress!" msgstr "¡Éste asset ya está descargándose!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "primero" +msgstr "Primero" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Pestaña anterior" +msgstr "Anterior" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4178,7 +4194,7 @@ msgstr "Siguiente" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Último" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4258,7 +4274,7 @@ msgstr "Vista previa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "Configurar ajuste" +msgstr "Configurar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Offset:" @@ -4266,7 +4282,7 @@ msgstr "Desplazamiento de cuadrÃcula:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Step:" -msgstr "Paso de cuadrÃcula:" +msgstr "Step de cuadrÃcula:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" @@ -4274,7 +4290,7 @@ msgstr "Desplazamiento de rotación:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "Cantidad de rotaciones:" +msgstr "Step de rotaciones:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" @@ -4305,29 +4321,29 @@ msgid "Create new horizontal and vertical guides" msgstr "Crear nuevas guÃas horizontales y verticales" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" msgstr "Mover pivote" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Rotar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "Mover acción" +msgstr "Mover ancla" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Redimensionar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Rotar CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Mover CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4346,19 +4362,16 @@ msgid "Paste Pose" msgstr "Pegar pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "Alejar" +msgstr "Zoom out" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "Restablecer zoom" +msgstr "Resetear el Zoom" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Acercar" +msgstr "Zoom in" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4391,6 +4404,11 @@ msgid "Rotate Mode" msgstr "Modo rotación" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Modo escalado (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4409,39 +4427,37 @@ msgid "Pan Mode" msgstr "Modo desplazamiento lateral" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Activar/desactivar fijado" +msgstr "Act/Desact. alineado." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" -msgstr "Usar fijado" +msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" -msgstr "Opciones de fijado" +msgstr "Opciones de Alineado" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" -msgstr "Ajustar a cuadrÃcula" +msgstr "Alinear a la cuadrÃcula" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "Ajustar rotación" +msgstr "Usar Snap de Rotación" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar ajuste..." +msgstr "Configurar Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "Fijado relativo" +msgstr "Usar Snap Relativo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "Ajustar a pÃxeles" +msgstr "Usar Pixel Snap" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" @@ -4449,28 +4465,27 @@ msgstr "Fijado inteligente" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" -msgstr "Ajustar al padre" +msgstr "Alinear al Padre" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "Ajustar al anclaje del nodo" +msgstr "Alinear al ancla de nodo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "Ajustar a los lados de los nodos" +msgstr "Alinear a los lados del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "Ajustar al anclaje del nodo" +msgstr "Alinear al centro del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" -msgstr "Ajustar a otros nodos" +msgstr "Alinear a otros nodos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" -msgstr "Ajustar a guÃas" +msgstr "Alinear a guÃas" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4491,6 +4506,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Skeleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Mostrar huesos" @@ -4504,12 +4524,11 @@ msgstr "Reestrablecer cadena IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Crear Hueso(s) Personalizados a partir de Nodo(s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Reestablecer huesos" +msgstr "Restablecer Huesos Personalizados" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4542,6 +4561,11 @@ msgid "Show Viewport" msgstr "Ver viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Show Group And Lock Icons" +msgstr "Mostrar iconos de grupo y bloqueo" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrar selección" @@ -4554,9 +4578,8 @@ msgid "Layout" msgstr "Disposición" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Insertar claves" +msgstr "Insertar claves." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4572,11 +4595,11 @@ msgstr "Restablecer pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "Multiplicar paso de cuadrÃcula por 2" +msgstr "Multiplicar step de cuadrÃcula por 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "Dividir paso de cuadrÃcula por 2" +msgstr "Dividir step de cuadrÃcula por 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -4621,9 +4644,8 @@ msgid "Set Handle" msgstr "Establecer handle" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "PartÃculas" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4741,7 +4763,7 @@ msgstr "Clic izquierdo: Mover punto." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "Ctrl + LMB: Partir segmento." +msgstr "Ctrl + LMB: Dividir Segmento." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." @@ -4988,9 +5010,9 @@ msgid "Create Navigation Polygon" msgstr "Crear polÃgono de navegación" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Generando AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Generar rectángulo de visibilidad" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5019,6 +5041,11 @@ msgstr "Borrar máscara de emisión" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Convertir a CPUParticles" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "PartÃculas" @@ -5088,13 +5115,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Se requiere un material procesador del tipo 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Generar AABB" +msgid "Generating AABB" +msgstr "Generando AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Convertir a mayúsculas" +msgid "Generate AABB" +msgstr "Generar AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5182,12 +5208,12 @@ msgstr "Opciones" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Manejadores de Ãngulos de Espejo" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Manejadores de Tamaño de Espejo" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5222,56 +5248,49 @@ msgid "Remove In-Control Point" msgstr "Eliminar punto In-Control" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Mover punto" +msgstr "Mover unión" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "La propiedad esqueleto del Polygon2D no apunta a un nodo Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Mostrar huesos" +msgstr "Sincronizar huesos" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Crear mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Crear polÃgono" +msgstr "Crear PolÃgono y UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Dividir punto con sà mismo." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "La división no puede formar un borde existente." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "¡La acción «%s» ya existe!" +msgstr "La división ya existe." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Añadir punto" +msgstr "Agregar división" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "¡Ruta incorrecta!" +msgstr "División inválida: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Quitar punto" +msgstr "Quitar división" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5279,7 +5298,7 @@ msgstr "Transformar Mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Pintar peso de huesos" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5287,25 +5306,21 @@ msgstr "Editor UV de polÃgonos en 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Editar polÃgono" +msgstr "PolÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Dividir ruta" +msgstr "Divisiones" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Crear huesos" +msgstr "Huesos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Crear polÃgono" @@ -5339,24 +5354,23 @@ msgstr "Escalar polÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Conectar dos puntos para crear una división" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "¡Selecciona un Ãtem primero!" +msgstr "Selecciona una división para borrarla" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Pintar pesos con la intensidad especificada" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Despintar pesos con la intensidad especificada" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "Radio:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5371,47 +5385,40 @@ msgid "Clear UV" msgstr "Limpiar UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Ajustes del GridMap" +msgstr "Ajustes de cuadrÃcula" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "Habilitar fijado" +msgstr "Activar Snap" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" msgstr "CuadrÃcula" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Configurar ajuste" +msgstr "Configurar cuadrÃcula:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Desplazamiento de cuadrÃcula:" +msgstr "Desplazamiento de cuadrÃcula en X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Desplazamiento de cuadrÃcula:" +msgstr "Desplazamiento de cuadrÃcula en Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Paso de cuadrÃcula:" +msgstr "Step de cuadrÃcula en X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Paso de cuadrÃcula:" +msgstr "Step de cuadrÃcula en Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Escalar polÃgono" +msgstr "Sincronizar Huesos con el PolÃgono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5439,22 +5446,22 @@ msgid "Paste Resource" msgstr "Pegar recurso" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir en el editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instancia:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir en el editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Cargar recurso" @@ -5465,12 +5472,11 @@ msgstr "Precargador de recursos" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "El AnimationTree no tiene una ruta asignada a un AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "El árbol de animación no es correcto." +msgstr "La ruta al AnimationPlayer es inválida" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5481,19 +5487,21 @@ msgid "Close and save changes?" msgstr "¿Cerrar y guardar cambios?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Error al cargar la imagen:" +msgstr "Error al escribir el TextFile:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Error no se pudo cargar el archivo." + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." -msgstr "No se pudo cargar la imagen" +msgstr "Error no se pudo cargar el archivo." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "¡Error al guardar el TileSet!" +msgstr "¡Error guardando archivo!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5512,19 +5520,16 @@ msgid "Error importing" msgstr "Error al importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Nueva carpeta..." +msgstr "Nuevo TextFile..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" -msgstr "Abrir un archivo" +msgstr "Abrir archivo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Guardar como..." +msgstr "Guardar archivo como..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5540,7 +5545,7 @@ msgstr " Referencia de clase" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Alternar la ordenación alfabética de la lista de métodos." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5571,9 +5576,8 @@ msgid "File" msgstr "Archivo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Ver archivos" +msgstr "Nuevo TextFile" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5588,11 +5592,8 @@ msgid "Copy Script Path" msgstr "Copiar ruta del script" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Mostrar en sistema de archivos" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Previo en historial" #: editor/plugins/script_editor_plugin.cpp @@ -5663,7 +5664,8 @@ msgid "Keep Debugger Open" msgstr "Mantener el depurador abierto" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Depurar en editor externo" #: editor/plugins/script_editor_plugin.cpp @@ -5671,10 +5673,6 @@ msgid "Open Godot online documentation" msgstr "Abrir documentación online de Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Buscar en la jerarquÃa de clases." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Buscar en la documentación de referencia." @@ -5712,38 +5710,29 @@ msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" -msgstr "Ayuda de búsqueda" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Buscar clases" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Los scripts integrados sólo se pueden editar cuando la escena a la que " -"pertenecen está cargada" +msgid "Search Results" +msgstr "Resultados de la búsqueda" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "LÃnea:" +msgstr "LÃnea" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignorar)" + +#: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Ir a función..." #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Sólo se pueden arrastrar/soltar recursos del sistema de archivos." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Completar sÃmbolo" +msgstr "Buscar SÃmbolo" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5767,11 +5756,11 @@ msgstr "Poner en mayúsculas" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "Resaltador de sintaxis" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Estándar" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5824,11 +5813,13 @@ msgid "Trim Trailing Whitespace" msgstr "Borrar espacios sobrantes al final" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Convertir Indentación a Espacios" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Convertir Indentación a Tabuladores" #: editor/plugins/script_text_editor.cpp @@ -5845,36 +5836,32 @@ msgid "Remove All Breakpoints" msgstr "Borrar todos los Breakpoints" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Ir a siguiente Breakpoint" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Ir al Breakpoint anterior" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Convertir a mayúsculas" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Convertir a minúsculas" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Buscar anterior" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." -msgstr "Filtrado de archivos..." +msgid "Find in Files..." +msgstr "Encontrar en archivos..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Ir a función..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Ir a lÃnea..." #: editor/plugins/script_text_editor.cpp @@ -5887,40 +5874,35 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Esqueleto..." +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Crear Pose de Descanso (De los Huesos)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Establecer Huesos a la Pose de Descanso" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Crear malla de navegación" +msgstr "Crear huesos fÃsicos" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Esqueleto..." +msgstr "Skeleton" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Crear solución C#" +msgstr "Crear esqueleto fÃsico" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Reproducir" +msgstr "Reproducir IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5971,6 +5953,15 @@ msgid "Animation Key Inserted." msgstr "Clave de animación insertada." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Altura" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Yaw" +msgstr "Girar desde eje vertical" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objetos dibujados" @@ -6055,9 +6046,8 @@ msgid "This operation requires a single selected node." msgstr "Esta operación requiere un solo nodo seleccionado." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Ver información" +msgstr "Bloquear rotación de vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6104,9 +6094,8 @@ msgid "Doppler Enable" msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Creación de vistas previas de malla" +msgstr "Vista previa cinemática" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6137,6 +6126,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de velocidad de vista libre" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Bloquear rotación de vista" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Diálogo XForm" @@ -6176,7 +6170,7 @@ msgstr "Modo de espacio local (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Mode (%s)" -msgstr "Modo de ajuste (%s)" +msgstr "Modo de Snap (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -6239,11 +6233,6 @@ msgid "Tool Scale" msgstr "Escalar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Ajustar a cuadrÃcula" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Act/desact. Vista Libre" @@ -6253,7 +6242,7 @@ msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Ajustar objeto al suelo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6284,9 +6273,8 @@ msgid "4 Viewports" msgstr "4 viewports" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Ver gizmos" +msgstr "Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6303,19 +6291,19 @@ msgstr "Ajustes" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "Configuración de fijado" +msgstr "Ajustes de Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "Ajuste de desplazamiento:" +msgstr "Snap de Traslación:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "Ajuste de rotación (grados):" +msgstr "Snap de Rotación (grados):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "Ajuste de escala (%):" +msgstr "Snap de Escala (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" @@ -6362,51 +6350,44 @@ msgid "Post" msgstr "Posterior" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "La ruta de guardado esta vacÃa!" +msgstr "¡El sprite esta vacÃo!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "No se puede convertir a mesh un sprite que usa frames de animación." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "GeometrÃa inválida, no se puede reemplazar por mesh." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Convertir a %s" +msgstr "Convertir a Mesh 2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Crear contorno de malla" +msgstr "Crear Mesh 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Simplificación: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "Fijar (Pixeles):" +msgstr "Crecer (Pixeles): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Vista previa del atlas" +msgstr "Actualizar vista previa" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Ajustes" +msgstr "Ajustes:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6482,7 +6463,7 @@ msgstr "Establecer rectángulo de región" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "Modo de fijado:" +msgstr "Modo Snap:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" @@ -6490,11 +6471,11 @@ msgstr "<Ninguno>" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "Ajustar a pÃxeles" +msgstr "Pixel Snap" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "Ajustar a cuadrÃcula" +msgstr "Snap de cuadrÃcula" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" @@ -6510,10 +6491,9 @@ msgstr "Paso:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Sep.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Región de textura" @@ -6646,9 +6626,13 @@ msgid "Erase Selection" msgstr "Borrar selección" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Nombre inválido." +msgstr "Corregir Tiles inválidos" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Centrar selección" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6671,9 +6655,8 @@ msgid "Erase TileMap" msgstr "Borrar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Encontrar tile" +msgstr "Encontrar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6697,34 +6680,39 @@ msgstr "Elegir tile" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" -msgstr "Quitar selección" +msgid "Copy Selection" +msgstr "Mover selección" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Rotar 0 grados" +#, fuzzy +msgid "Rotate left" +msgstr "Modo rotación" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Rotar 90 grados" +#, fuzzy +msgid "Rotate right" +msgstr "Mover a la derecha" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Rotar 180 grados" +msgid "Flip horizontally" +msgstr "Voltear horizontalmente" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Rotar 270 grados" +msgid "Flip vertically" +msgstr "Voltear verticalmente" -#: editor/plugins/tile_set_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy +msgid "Clear transform" +msgstr "Transformar" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" -msgstr "Añadir nodo(s) desde árbol" +msgstr "Agregar Textura(s) al TileSet" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Borrar entrada actual" +msgstr "Quitar textura actual del TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6744,15 +6732,16 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Mostrar nombres de tiles (mantener Tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +#, fuzzy +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "¿Quitar Textura Seleccionada y TODOS LOS TILES que la usen?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "No elegiste una textura para eliminar." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6763,76 +6752,77 @@ msgid "Merge from scene?" msgstr "¿Mezclar desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +#, fuzzy +msgid "%s file(s) were not added because was already on the list." +msgstr " archivo(s) no fueron agregados porque ya estaban en la lista." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Arrastra los controles para editar el Rect.\n" +"Haz clic en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" -"Clic Izquierdo: habilitar bit.\n" -"Clic Derecho: deshabilitar bit." +"Clic izq: Activar bit.\n" +"Clic der: Desactivar bit.\n" +"Clic en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Guardar el sub-tile editado actualmente." +msgstr "" +"Seleccionar sub-tile editado actualmente.\n" +"Clic en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" -"Seleccione sub-tile para utilizar como icono, éste se utilizará también en " -"enlazados automáticos no válidos." +"Selectionar sub-tile para usar como Ãcono, este también sera usado en " +"bindings inválidos de autotile.\n" +"Clic en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Selecciona sub-tile para cambiar su prioridad." +msgstr "" +"Seleccionar sub-tile para cambiar su prioridad.\n" +"Clic en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Esta operación no puede realizarse sin una escena." +msgstr "Esta propiedad no se puede cambiar." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Tile Set" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Vértices" +msgstr "Vértice" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" msgstr "Fragmento" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Derecha" +msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "VisualShader" #: editor/project_export.cpp msgid "Runnable" @@ -6852,6 +6842,16 @@ msgstr "" "Las plantillas de exportación para esta plataforma faltan/están corruptas:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "se levante" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportando para %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "Ajustes preestablecidos" @@ -6860,6 +6860,11 @@ msgid "Add..." msgstr "Añadir..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Presets de Exportación:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Recursos" @@ -6922,6 +6927,16 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Modo de exportación:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exportar" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Faltan plantillas de exportación para esta plataforma:" @@ -6934,23 +6949,21 @@ msgid "The path does not exist." msgstr "La ruta no existe." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." msgstr "" -"Por favor, elige un directorio que no contenga un archivo 'project.godot'." +"Archivo de projecto '.zip' inválido, no contiene un archivo 'project.godot'." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Por favor elija una carpeta vacÃa." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Por favor elija un archivo 'project.godot'." +msgstr "Por favor selecciona un archivo 'project.godot' o '.zip'." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "El directorio ya contiene un proyecto de Godot." #: editor/project_manager.cpp msgid "Imported Project" @@ -7041,9 +7054,8 @@ msgid "Project Path:" msgstr "Ruta del proyecto:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Ruta del proyecto:" +msgstr "Ruta de instalación del proyecto:" #: editor/project_manager.cpp msgid "Browse" @@ -7168,13 +7180,12 @@ msgid "Mouse Button" msgstr "Botón del ratón" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"Nombre de acción inválido. No puede estar vacÃo ni contener '/', ':', '=', " -"'\\' o '\"'." +"Nombre de acción inválido. No puede estar vacÃo o contener '/', ':', '=', " +"'\\' o '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7185,18 +7196,16 @@ msgid "Rename Input Action Event" msgstr "Renombrar evento de acción de entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Cambiar nombre de animación:" +msgstr "Cambiar zona muerta de la acción" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Añadir evento de acción de entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Dispositivo" +msgstr "Todos los dispositivos" #: editor/project_settings_editor.cpp msgid "Device" @@ -7243,24 +7252,20 @@ msgid "Wheel Down Button" msgstr "Botón rueda abajo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Botón rueda arriba" +msgstr "Botón rueda izquierda" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Botón derecho" +msgstr "Botón rueda derecha" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Botón 6" +msgstr "Botón X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Botón 6" +msgstr "Botón X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7402,17 +7407,13 @@ msgstr "Ajustes del proyecto (project.godot)" msgid "General" msgstr "General" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Propiedad:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Sustituir por..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Se debe reiniciar el editor para que los cambios surtan efecto" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7428,7 +7429,7 @@ msgstr "Acción" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Zona muerta" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7538,10 +7539,6 @@ msgstr "Selecciona un nodo" msgid "Bit %d, val %d." msgstr "Bit %d, valor %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Propiedades:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Seleccionar propiedad" @@ -7564,97 +7561,94 @@ msgstr "" "No se pudo volver a cargar la imagen convertida usando la herramienta PVRTC:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Renombrar" +msgstr "Renombrar en masa" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Prefijo" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Sufijo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Opciones de fijado" +msgstr "Opciones avanzadas" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Sustituir" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nombre del nodo:" +msgstr "Nombre del nodo" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nombre del padre del nodo, si está disponible" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Buscar tipo de nodo" +msgstr "Tipo de nodo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Escena actual" +msgstr "Nombre de la escena actual" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nombre del nodo:" +msgstr "Nombre del nodo raÃz" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Contador de enteros secuenciales.\n" +"Comparar opciones de contador." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Contador por nivel" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Si esta activo el contador reinicia por cada grupo de nodos hijos" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Valor inicial para el contador" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Paso:" +msgstr "Paso" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +#, fuzzy +msgid "Amount by which counter is incremented for each node" +msgstr "Cantidad en la que se incrementa el contador por cada nodo" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Relleno" #: editor/rename_dialog.cpp +#, fuzzy msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Número mÃnimo de dÃgitos para el contador.\n" +"Los dÃgitos faltantes serán rellenados con ceros al principio." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Cambiar expresión" +msgstr "Expresiones regulares" #: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "Script de posprocesado:" +msgstr "Post-Procesado" #: editor/rename_dialog.cpp msgid "Keep" @@ -7662,32 +7656,29 @@ msgstr "Conservar" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase a under_scored" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_scored a CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Mayus./Minus." #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Minúscula" +msgstr "A minúsculas" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Mayúscula" +msgstr "A mayúsculas" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Restablecer zoom" +msgstr "Resetear" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Error" @@ -7748,6 +7739,10 @@ msgid "Instance Scene(s)" msgstr "Instanciar escenas" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instanciar escena hija" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Quitar script" @@ -7784,6 +7779,12 @@ msgid "Save New Scene As..." msgstr "Guardar nueva escena como..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Hijos editables" @@ -7796,29 +7797,24 @@ msgid "Make Local" msgstr "Crear local" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Crear nodo" +msgstr "Crear Nodo RaÃz:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Escenas" +msgstr "Escena 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Escenas" +msgstr "Escena 3D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Limpiar heredado" +msgstr "Interfaz de usuario" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Cortar nodos" +msgstr "Nodo personalizado" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7861,6 +7857,11 @@ msgid "Clear Inheritance" msgstr "Limpiar heredado" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Abrir documentación online de Godot" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Eliminar nodo(s)" @@ -7869,17 +7870,17 @@ msgid "Add Child Node" msgstr "Añadir nodo hijo" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Instanciar escena hija" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Cambiar tipo" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Abrir script" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Nueva RaÃz de Escena" +msgstr "Convertir en raÃz de escena" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7930,22 +7931,20 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "¿Quieres limpiar la herencia? (No se puede deshacer)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" -msgstr "Cambiar visibilidad" +msgstr "Act/Desact. Visible" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "Alerta de configuración de nodos:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexión(es) y grupo(s)\n" -"Haz clic para mostrar el panel de señales." +"El nodo tiene conexión/es y grupo/s.\n" +"Clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp msgid "" @@ -7964,27 +7963,24 @@ msgstr "" "Haz clic para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Abrir script" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "El nodo está bloqueado.\n" -"Haz clic para desbloquear" +"Clic para desbloquear." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "Los hijos no son seleccionables.\n" -"Haz clic para hacerlos seleccionables" +"Clic para convertir en seleccionables." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7995,6 +7991,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"El AnimationPlayer esta pineado.\n" +"Haz clic para despinear." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -8034,15 +8032,19 @@ msgid "N/A" msgstr "N/D" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Abrir editor de script" +msgstr "Abrir script/Elegir ubicación" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "La ruta está vacia" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "¡El sprite esta vacÃo!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "La ruta no es local" @@ -8131,20 +8133,9 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Advertencia" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Error:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Fuente:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Función:" +#, fuzzy +msgid "Stack Trace" +msgstr "Frames del stack" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8175,18 +8166,6 @@ msgid "Stack Frames" msgstr "Frames del stack" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variable" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Errores:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Stack Trace (si aplica):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profiler" @@ -8275,9 +8254,8 @@ msgid "Change Camera Size" msgstr "Cambiar tamaño de cámara" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Cambiar alcances de notificadores" +msgstr "Cambiar Notificador AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8304,38 +8282,32 @@ msgid "Change Capsule Shape Height" msgstr "Cambiar altura de shape cápsula" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Cambiar radio de shape cápsula" +msgstr "Cambiar radio de Shape Cilindro" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Cambiar altura de shape cápsula" +msgstr "Cambiar altura de Shape Cilindro" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Cambiar longitud de forma de rayo" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Cambiar radio de luces" +msgstr "Cambiar radio de Shape Cilindro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Cambiar altura de shape cápsula" +msgstr "Cambiar altura de Shape Cilindro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Cambiar radio de shape esférico" +msgstr "Cambiar radio interno de Toro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Cambiar radio de luces" +msgstr "Cambiar radio externo de Toro" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8391,7 +8363,7 @@ msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" -msgstr "¡el argumento del paso es cero!" +msgstr "el argumento step es cero!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -8458,9 +8430,8 @@ msgid "GridMap Delete Selection" msgstr "GridMap Quitar seleccionados" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "GridMap Quitar seleccionados" +msgstr "Llenar selección en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8472,7 +8443,7 @@ msgstr "Mapa de cuadrÃcula" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" -msgstr "Fijar vista" +msgstr "Anclar Vista" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" @@ -8543,9 +8514,8 @@ msgid "Clear Selection" msgstr "Deseleccionar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Toda la selección" +msgstr "Llenar la selección" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8616,12 +8586,8 @@ msgid "End of inner exception stack trace" msgstr "Fin del reporte de la pila de excepciones" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "¡Calcular!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Pre-calcular la malla de navegación." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8850,14 +8816,12 @@ msgid "Connect Nodes" msgstr "Conectar nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Conectar nodos" +msgstr "Conectar datos de nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Conectar nodos" +msgstr "Conectar secuencia de nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8904,6 +8868,10 @@ msgid "Base Type:" msgstr "Tipo base:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Miembros:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Nodos disponibles:" @@ -8940,9 +8908,8 @@ msgid "Paste Nodes" msgstr "Pegar nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Miembros" +msgstr "Editar Miembros" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -9003,17 +8970,16 @@ msgstr "" "o string/cadena (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Quitar nodo de VisualScript" +msgstr "Buscar en VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Get" +msgid "Get %s" +msgstr "Obtener %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Establecer %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9065,16 +9031,15 @@ msgstr "" "el resto van a ser ignorados." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Este nodo no tiene formas hijas, por lo que no puede interactuar con el " -"espacio.\n" -"Considere añadir CollisionShape2D o CollisionPolygon2D como hijo para " -"definir su forma." +"Este nodo no tiene forma definida, por lo tanto, no puede colisionar o " +"interactuar con otros objetos.\n" +"Considera agregarle un nodo hijo de tipo CollisionShape2D o " +"CollisionPolygon2D para definir su forma." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -9109,6 +9074,14 @@ msgstr "" "Se debe de proveer de forma a CollisionShape2D para que funcione. ¡Creale un " "recurso \"shape\"!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"La animación CPUParticles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9160,6 +9133,14 @@ msgstr "" "No se ha asignado un material para procesar las partÃculas, por lo que no se " "muestra ningún comportamiento." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"La animación Particles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9182,16 +9163,19 @@ msgstr "La propiedad Path debe apuntar a un nodo Node2D válido para funcionar." #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Esta cadena Bone2D deberÃa terminar en un nodo Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Un Bone2D solo funciona con un Skeleton2D u otro Bone2D como nodo padre." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Este hueso no tiene una pose de DESCANSO adecuada. Ve al nodo Skeleton2D y " +"asÃgnale una." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9258,16 +9242,15 @@ msgid "Lighting Meshes: " msgstr "Iluminando mallas: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Este nodo no tiene formas hijas, por lo que no puede interactuar con el " -"espacio.\n" -"Considera añadir un CollisionShape o CollisionPolygon como hijos de este " -"nodo para dotarlo de una forma." +"Este nodo no tiene forma, por lo tanto, no puede colisionar o interactuar " +"con otros objetos.\n" +"Considera agregarle un nodo hijo de tipo CollisionShape o CollisionPolygon " +"para definir su forma." #: scene/3d/collision_polygon.cpp msgid "" @@ -9301,6 +9284,20 @@ msgstr "" "Se debe proveer de una forma a CollisionShape para que funcione. Por favor, " "¡crea un recurso \"shape\"!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" +"Nada es visible porque las mallas no se han asignado a los pases de dibujo." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"La animación CPUParticles requiere el uso de un SpatialMaterial con " +"\"Billboard Particles\" activado." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Trazando mallas" @@ -9325,6 +9322,30 @@ msgid "" msgstr "" "Nada es visible porque las mallas no se han asignado a los pases de dibujo." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"La animación de partÃculas requiere el uso de un SpatialMaterial con " +"\"Billboard Particles\" activado." + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D solo funciona cuando está colocado como hijo de un nodo Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D solo funciona cuando está colocado como hijo de un nodo Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9362,18 +9383,18 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Este cuerpo sera ignorado hasta que le asignes un mesh" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Los cambios en el tamaño del RigidBody (en los modos \"character\" o \"rigid" -"\") serán sobre-escritos por el motor de fÃsicas cuando se ejecute.\n" -"En lugar de esto, cambie el tamaño en las formas de colisión hijas." +"Los cambios de tamaño a SoftBody serán sobre escritos por el motor de fÃsica " +"al ejecutar.\n" +"Cambia el tamaño de los collision shapes hijos." #: scene/3d/sprite_3d.cpp msgid "" @@ -9393,46 +9414,41 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "En el nodo BlendTree '%s', no se encontró la animación: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Herramientas de animación" +msgstr "No se encontró la animación: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "En el nodo '%s', animación inválida: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ERROR: ¡El nombre de animación no es correcto!" +msgstr "Animación inválida: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Desconectar '%s' de '%s'" +msgstr "Nada conectado a la entrada '%s' del nodo '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "No hay asignado ningún nodo AnimationNode raÃz para el gráfico." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"Selecciona un AnimationPlayer desde el árbol de escenas para editar " -"animaciones." +"No hay asignada una ruta a un nodo AnimationPlayer conteniendo animaciones." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"La ruta asignada al AnimationPlayer no apunta a un nodo AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "El árbol de animación no es correcto." +msgstr "La raÃz del AnimationPlayer no es un nodo válido." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9450,10 +9466,6 @@ msgstr "¡Alerta!" msgid "Please Confirm..." msgstr "Por favor, confirma..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Seleccionar esta carpeta" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9464,6 +9476,10 @@ msgstr "" "cualquiera de las funciones popup*(). Sin embargo, no hay problema con " "hacerlos visibles para editar, aunque se esconderán al ejecutar." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "Si exp_edit es `true` min_value debe ser > 0." + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9515,31 +9531,143 @@ msgid "Invalid font size." msgstr "Tamaño de tipografÃa incorrecto." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Añadir Entrada" +msgstr "Entrada" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Ninguno>" +msgstr "Ninguno" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "¡Origen incorrecto!" +msgstr "Fuente inválida para el shader." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Asignación a función." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Asignación a uniform." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Solo se pueden asignar variaciones en funciones de vértice." + +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "¿Estás seguro/a que quieres quitar todas las conexiones de el/la \"" + +#~ msgid "Class List:" +#~ msgstr "Lista de clases:" + +#~ msgid "Search Classes" +#~ msgstr "Buscar clases" + +#~ msgid "Public Methods" +#~ msgstr "Métodos públicos" + +#~ msgid "Public Methods:" +#~ msgstr "Métodos públicos:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Elementos del tema de interfaz" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Elementos del tema de interfaz:" + +#~ msgid "Property: " +#~ msgstr "Propiedad: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Act/Desact. estado de carpeta como Favorito." + +#~ msgid "Show current scene file." +#~ msgstr "Mostrar archivo de escena actual." + +#~ msgid "Enter tree-view." +#~ msgstr "Entrar a la vista árbol." + +#~ msgid "Whole words" +#~ msgstr "Palabras completas" + +#~ msgid "Match case" +#~ msgstr "Coincidir Mayúsculas/Minúsculas" + +#~ msgid "Filter: " +#~ msgstr "Filtro: " + +#~ msgid "Ok" +#~ msgstr "Aceptar" + +#~ msgid "Show In File System" +#~ msgstr "Mostrar en sistema de archivos" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Buscar en la jerarquÃa de clases." + +#~ msgid "Search in files" +#~ msgstr "Buscar en archivos" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Los scripts integrados sólo se pueden editar cuando la escena a la que " +#~ "pertenecen está cargada" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Convertir a mayúsculas" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Convertir a minúsculas" + +#~ msgid "Snap To Floor" +#~ msgstr "Ajustar al suelo" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Rotar 0 grados" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Rotar 90 grados" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Rotar 180 grados" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Rotar 270 grados" + +#~ msgid "Warning" +#~ msgstr "Advertencia" + +#~ msgid "Error:" +#~ msgstr "Error:" + +#~ msgid "Source:" +#~ msgstr "Fuente:" + +#~ msgid "Function:" +#~ msgstr "Función:" + +#~ msgid "Variable" +#~ msgstr "Variable" + +#~ msgid "Errors:" +#~ msgstr "Errores:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Stack Trace (si aplica):" + +#~ msgid "Bake!" +#~ msgstr "¡Calcular!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Pre-calcular la malla de navegación." + +#~ msgid "Get" +#~ msgstr "Get" #~ msgid "Change Scalar Constant" #~ msgstr "Cambiar constante escalar" @@ -10054,9 +10182,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "No se pudo guardar la subtextura del altas:" -#~ msgid "Exporting for %s" -#~ msgstr "Exportando para %s" - #~ msgid "Setting Up..." #~ msgstr "Configurando..." @@ -10166,9 +10291,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "TipografÃa elegida:" -#~ msgid "Source Font Size:" -#~ msgstr "Tamaño de la tipografÃa elegida:" - #~ msgid "Dest Resource:" #~ msgstr "Recurso de destino:" @@ -10245,9 +10367,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Inicios" -#~ msgid "Filters" -#~ msgstr "Filtros" - #~ msgid "Source path is empty." #~ msgstr "La ruta de origen esta vacÃa." @@ -10524,15 +10643,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Estéreo" -#~ msgid "Pitch" -#~ msgstr "Altura" - #~ msgid "Window" #~ msgstr "Ventana" -#~ msgid "Move Right" -#~ msgstr "Mover a la derecha" - #~ msgid "Scaling to %s%%." #~ msgstr "Escalando al %s%%." @@ -10615,9 +10728,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "se presione" -#~ msgid "just released" -#~ msgstr "se levante" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " @@ -10979,9 +11089,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Exportar proyecto" -#~ msgid "Export Preset:" -#~ msgstr "Presets de Exportación:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance no contiene un recurso BakedLight." diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 457b63c44b..f9196dbc6d 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -7,12 +7,14 @@ # Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. # Sebastian Silva <sebastian@sugarlabs.org>, 2016. # Jose Luis Bossio <joseluisbossio@gmail.com>, 2018. +# Reynaldo Cruz <rcruz60@gmail.com>, 2018. +# Javier Ocampos <xavier.ocampos@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-07-27 15:44+0000\n" -"Last-Translator: Jose Luis Bossio <joseluisbossio@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -20,15 +22,15 @@ 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 3.1.1\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Argumento de tipo inválido para convert(), usá constantes TYPE_*." +msgstr "El argumento para convert() no es correcto, utiliza constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -36,34 +38,31 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Entrada inválida %i (no se transmitió) en la expresión" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self no puede ser usado ya que la instancia es nula (no pasó)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Nombre de propiedad Ãndice '%s' inválido en nodo %s." +msgstr "Operandos inválidos para el operador %s, %s y %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Nombre de propiedad Ãndice '%s' inválido en nodo %s." +msgstr "Indice inválido de tipo %s para tipo base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Indice con nombre '%s' inválido para el tipo base %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argumento inválido de tipo: " +msgstr "Argumentos inválidos para construir '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "En la llamada a '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -72,27 +71,23 @@ msgstr "Libre" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Balanceado" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Espejar X" +msgstr "Espejar" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Insertar Clave" +msgstr "Insertar Clave AquÃ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplicar Selección" +msgstr "Duplicar Clave(s) Seleccionada(s)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Eliminar Seleccionados" +msgstr "Eliminar Clave(s) Seleccionada(s)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -123,46 +118,40 @@ msgid "Anim Change Call" msgstr "Cambiar Call de Anim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Propiedad:" +msgstr "Pista de Propiedades" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Tipo de Transformación" +msgstr "Pista de Transformación 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Pista de Llamada a Métodos" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Pista de Curva Bezier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Pista de Reproducción de Audio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Detener la reproducción de la animación. (S)" +msgstr "Pista de Reproducción de Animación" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Agregar pista de animación" +msgstr "Agregar Pista" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Duración de la animación (en segundos)." +msgstr "Tiempo de Duración de la Animación (segundos)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Zoom de animación." +msgstr "Loop de Animación" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -170,42 +159,36 @@ msgid "Functions:" msgstr "Funciones:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Oyente de Audio" +msgstr "Clips de Audio:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Clips" +msgstr "Clips de Anim:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Act./Desact. modo sin distracciones." +msgstr "Act./Desact. esta pista." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Modo de Actualización (Como esta configurada esta propiedad)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Nodo de Animación" +msgstr "Modo de Interpolación" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Modo Loop Envolvente (Interpolar el final con el comienzo al loopear)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Quitar la pista seleccionada." +msgstr "Quitar esta pista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Tiempo de Crossfade (s):" +msgstr "Tiempo (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -220,13 +203,12 @@ msgid "Trigger" msgstr "Trigger" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "CaracterÃsticas" +msgstr "Captura" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Mas Cercano" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -235,16 +217,15 @@ msgstr "Lineal" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cúbica" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Cambiar Interpolación de Loop de Anim" +msgstr "Interp de Loop Cortante" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Interp de Loop Envolvente" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -252,14 +233,12 @@ msgid "Insert Key" msgstr "Insertar Clave" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplicar Nodo(s)" +msgstr "Duplicar Clave(s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Eliminar Nodo(s)" +msgstr "Eliminar Clave(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -289,7 +268,7 @@ msgstr "Insertar Anim" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "Un AnimationPlayer no puede animarse a sà mismo, solo a otros players." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -305,7 +284,7 @@ msgstr "Insertar Clave de Animación" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Las pistas Transform solo aplican a nodos de tipo Spatial." #: editor/animation_track_editor.cpp msgid "" @@ -314,44 +293,50 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Las pistas de audio pueden apuntar solo a nodos de tipo:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Las pistas de Animación solo pueden apuntar a nodos AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Un reproductor de animación no puede animarse a sà mismo, solo a otros " +"reproductores." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "No es posible agregar una nueva pista sin una raÃz" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "La ruta de la pista es inválida, por ende no se pueden agregar claves." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "La pista no es de tipo Spatial, no se puede insertar la clave" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" +"La ruta de la pista es inválida, por ende no se pueden agregar claves de " +"métodos." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet no encontrado en el script: " +msgstr "Método no encontrado en el objeto: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Mover Claves de Anim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "El portapapeles está vacÃo!" +msgstr "El portapapeles está vacÃo" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -361,24 +346,24 @@ msgstr "Escalar Keys de Anim" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Esta opción no funciona con la edición Bezier, ya que es solo una pista " +"única." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Mostrar solo las pistas de los nodos seleccionados en el árbol." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Agrupar las pistas por nodo o mostrarlas como una lista plana." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Snap (Pixeles):" +msgstr "Ajuste (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "El árbol de animación es válido." +msgstr "Valor de paso de animación." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -390,19 +375,16 @@ msgid "Edit" msgstr "Editar" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimationTree" +msgstr "Propiedades de animación." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Copiar Parámetros" +msgstr "Copiar Pistas" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Pegar Parámetros" +msgstr "Pegar Pistas" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -412,8 +394,7 @@ msgstr "Escalar Selección" msgid "Scale From Cursor" msgstr "Escalar Desde Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplicar Selección" @@ -422,16 +403,15 @@ msgid "Duplicate Transposed" msgstr "Duplicar Transpuesto" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Eliminar Seleccionados" +msgstr "Eliminar Selección" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "Ir a Paso Próximo" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "Ir a Paso Previo" #: editor/animation_track_editor.cpp @@ -444,11 +424,11 @@ msgstr "Hacer Clean-Up de Animación" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Elegà el nodo que será animado:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Usar Curvas Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -496,7 +476,7 @@ msgstr "Ratio de Escala:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Elegir pistas a copiar:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -534,11 +514,11 @@ msgstr "Sin Coincidencias" msgid "Replaced %d occurrence(s)." msgstr "%d ocurrencia(s) Reemplazadas." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Coincidir Mayúsculas/Minúsculas" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Palabras Completas" @@ -567,16 +547,15 @@ msgid "Reset Zoom" msgstr "Resetear el Zoom" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Advertencias" +msgstr "Advertencias:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom (%):" +msgid "Font Size:" +msgstr "Tamaño de la TipografÃa de Origen:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linea:" @@ -609,6 +588,7 @@ msgstr "Agregar" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -665,9 +645,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Desconectar '%s' de '%s'" +msgstr "Desconectar todos de la señal: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -679,19 +658,17 @@ msgid "Disconnect" msgstr "Desconectar" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Conectando Señal:" +msgstr "Conectar Señal: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Editar Conexiones" +msgstr "Editar Conexión: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "¿Estás seguro/a que quieres ejecutar más de un proyecto?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" +"¿Estás seguro/a que querés quitar todas las conexiones de la señal \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -699,22 +676,19 @@ msgstr "Señales" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "¿Estás seguro/a que querés quitar todas las conexiones de esta señal?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Desconectar" +msgstr "Desconectar Todo" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Editar" +msgstr "Editar..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Métodos" +msgstr "Ir Al Método" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -745,17 +719,14 @@ msgstr "Recientes:" msgid "Search:" msgstr "Buscar:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Coincidencias:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descripción:" @@ -814,9 +785,10 @@ msgid "Search Replacement Resource:" msgstr "Buscar Reemplazo de Recurso:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -849,9 +821,8 @@ msgid "Error loading:" msgstr "Error cargando:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "" -"La escena falló al cargar debido a las siguientes dependencias faltantes:" +msgid "Load failed due to missing dependencies:" +msgstr "Fallo la carga debido a dependencias faltantes:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -909,14 +880,6 @@ msgstr "Cambiar Valor del Diccionario" msgid "Thanks from the Godot community!" msgstr "Gracias de parte de la comunidad Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Colaboradores de Godot Engine" @@ -1016,7 +979,7 @@ msgstr "El Paquete se Instaló Exitosamente!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "Conseguido!" +msgstr "¡Conseguido!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1092,8 +1055,7 @@ msgid "Bus options" msgstr "Opciones de Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -1266,8 +1228,9 @@ msgstr "Ruta:" msgid "Node Name:" msgstr "Nombre de Nodo:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nombre" @@ -1337,26 +1300,29 @@ msgid "Template file not found:" msgstr "Plantilla no encontrada:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Seleccionar Carpeta Actual" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "El Archivo Existe, Sobreescribir?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Seleccionar Carpeta Actual" +msgid "Select This Folder" +msgstr "Seleccionar Esta Carpeta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Copiar Ruta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Mostrar en Gestor de Archivos" +msgid "Open in File Manager" +msgstr "Abrir en el Explorador de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "Mostrar en Gestor de Archivos" +msgid "Show in File Manager" +msgstr "Mostrar en Explorador de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1391,7 +1357,8 @@ msgid "Open a File or Directory" msgstr "Abrir un Archivo o Directorio" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Guardar" @@ -1449,8 +1416,7 @@ msgstr "Directorios y Archivos:" msgid "Preview:" msgstr "Vista Previa:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Archivo:" @@ -1466,24 +1432,11 @@ msgstr "EscanearFuentes" msgid "(Re)Importing Assets" msgstr "(Re)Importando Assets" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Buscar en la Ayuda" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Lista de Clases:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Buscar Clases" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Cima" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Clase:" @@ -1500,28 +1453,28 @@ msgid "Brief Description:" msgstr "Descripción Breve:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Miembros" +msgid "Properties" +msgstr "Propiedades" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Miembros:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Propiedades:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Métodos Públicos" +msgid "Methods" +msgstr "Métodos" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Métodos Públicos:" +msgid "Methods:" +msgstr "Métodos:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Items de Tema de la GUI" +msgid "Theme Properties" +msgstr "Propiedades de Tema" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Items de Tema de la GUI:" +msgid "Theme Properties:" +msgstr "Propiedades de Tema:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1548,8 +1501,12 @@ msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp -msgid "Description" -msgstr "Descripción" +msgid "Class Description" +msgstr "Descripción de Clase" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "Descripción de Clase:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1566,12 +1523,12 @@ msgstr "" "url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Propiedades" +msgid "Property Descriptions" +msgstr "Descripción de Propiedades" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "Descripción de Propiedad:" +msgid "Property Descriptions:" +msgstr "Descripción de Propiedades:" #: editor/editor_help.cpp msgid "" @@ -1582,11 +1539,11 @@ msgstr "" "[color=$color][url=$url]contribuyendo una[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Métodos" +msgid "Method Descriptions" +msgstr "Descripción de Método" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "Descripción de Métodos:" #: editor/editor_help.cpp @@ -1597,18 +1554,58 @@ msgstr "" "Actualmente no existe descripción para este método. Por favor ayudanos " "[color=$color][url=$url]contribuyendo una[/url][/color]!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Buscar en la Ayuda" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Mostrar Todo" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Solo Clases" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Solo Métodos" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Solo Señales" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Solo Constantes" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Solo Propiedades" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Solo Propiedades de Tema" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Tipo de Miembro" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "Clase" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Propiedad:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" -msgstr "Setear" +msgstr "Asignar" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Asignar Múltiples:" #: editor/editor_log.cpp msgid "Output:" @@ -1636,6 +1633,11 @@ msgstr "La exportación del proyecto falló con el código de error %d." msgid "Error saving resource!" msgstr "Error al guardar el recurso!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Guardar Recurso Como..." @@ -1655,6 +1657,7 @@ msgstr "Error al grabar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" +"No se puede abrir '%s'. El archivo puede haber sido movido o eliminado." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1690,12 +1693,22 @@ msgstr "Esta operación no puede hacerse sin una raÃz de árbol." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "No se pudo guardar la escena. Probablemente no se hayan podido satisfacer " "dependencias (instancias o herencia)." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "No se puede sobrescribir una escena que todavÃa esta abierta!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "No se puede cargar MeshLibrary para hacer merge!" @@ -1958,6 +1971,14 @@ msgstr "No se pudo cargar el script de addon desde la ruta: '%s'." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"No se pudo cargar el script de addon desde la ruta: '%s' Parece haber un " +"error en el código. Por favor, revisá la sintaxis." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "No se pudo cargar el script de addon desde la ruta: El tipo base de '%s' no " @@ -2008,15 +2029,18 @@ msgstr "Eliminar Layout" msgid "Default" msgstr "Por Defecto" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Mostrar en Sistema de Archivos" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Reproducir Escena" +msgstr "Reproducir Esta Escena" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Cerrar Otras Pestañas" +msgstr "Cerrar Pestaña" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2091,8 +2115,8 @@ msgid "Save Scene" msgstr "Guardar Escena" #: editor/editor_node.cpp -msgid "Save all Scenes" -msgstr "Guardar todas las Escenas" +msgid "Save All Scenes" +msgstr "Guardar Todas las Escenas" #: editor/editor_node.cpp msgid "Close Scene" @@ -2120,7 +2144,7 @@ msgid "Undo" msgstr "Deshacer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Rehacer" @@ -2149,21 +2173,21 @@ msgid "Tools" msgstr "Herramientas" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Abrir Gestor de Proyectos?" +msgstr "Abrir Carpeta de Datos del Proyecto" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Salir a Listado de Proyecto" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" -msgstr "Debuguear" +msgstr "Depurar" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Hacer Deploy con Debug Remoto" +msgstr "Hacer Deploy con Depuración Remota" #: editor/editor_node.cpp msgid "" @@ -2171,11 +2195,11 @@ msgid "" "connect to the IP of this computer in order to be debugged." msgstr "" "Al exportar o hacer deploy, el ejecutable resultante tratara de conectarse a " -"la IP de esta computadora de manera de ser debugueado." +"la IP de esta computadora de manera de ser depurado." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Deploy Pequeño con Network FS" +msgstr "Deploy Pequeño con recursos en red" #: editor/editor_node.cpp msgid "" @@ -2235,7 +2259,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "Actualizar Cambios en Scripts" +msgstr "Sincronizar Cambios en Scripts" #: editor/editor_node.cpp msgid "" @@ -2266,18 +2290,16 @@ msgid "Toggle Fullscreen" msgstr "Act./Desact. Pantalla Completa" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Configuración del Editor" +msgstr "Abrir Carpeta de Datos/Configuración del Editor" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Abrir Carpeta de Datos del Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Configuración del Editor" +msgstr "Abrir Carpeta de Configuración del Editor" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2287,10 +2309,6 @@ msgstr "Gestionar Plantillas de Exportación" msgid "Help" msgstr "Ayuda" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Clases" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2361,13 +2379,12 @@ msgstr "Reproducir Escena Personalizada" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Cambiar el driver de video requiere reiniciar el editor." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Guardar y Reimportar" +msgstr "Guardar y Reiniciar" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2385,27 +2402,26 @@ msgstr "Actualizar Cambios" msgid "Disable Update Spinner" msgstr "Desactivar Update Spinner" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspector" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importar" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nodo" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "FileSystem" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspector" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Nodo" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Expandir todos" +msgstr "Expandir Panel Inferior" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2484,9 +2500,8 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Editar PolÃgono" +msgstr "Editar Plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2510,15 +2525,13 @@ msgid "Status:" msgstr "Estado:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Editar" +msgstr "Editar:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Iniciar!" +msgstr "Iniciar" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2540,7 +2553,7 @@ msgstr "Frame %" msgid "Physics Frame %" msgstr "Frames de FÃsica %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tiempo:" @@ -2564,27 +2577,45 @@ msgstr "Tiempo" msgid "Calls" msgstr "Llamadas" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "On" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Capa" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, val %d." +msgstr "Bit %d, valor %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Vacio]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Asignar" +msgstr "Asignar.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"No se puede crear una ViewportTexture en recursos guardados como archivo.\n" +"El recurso debe pertenecer a una escena." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"No se puede crear una ViewportTexture en este recurso porque no esta " +"asignado como local a la escena.\n" +"Por favor activá la propiedad 'local a escena' en él (y en todos los " +"recursos que lo contienen hasta un nodo)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2603,10 +2634,6 @@ msgstr "Nuevo %s" msgid "Make Unique" msgstr "Convertir en Unico" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Mostrar en Sistema de Archivos" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2615,7 +2642,8 @@ msgstr "Mostrar en Sistema de Archivos" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Pegar" @@ -2628,36 +2656,32 @@ msgstr "Convertir A %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Abrir en Editor" +msgstr "Abrir Editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "El nodo seleccionado no es un Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Tamaño de Celda:" +msgstr "Tamaño: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Página: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Nuevo nombre:" +msgstr "Nueva Clave:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Nuevo nombre:" +msgstr "Nuevo Valor:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Agregar Par Clave/Valor" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2751,9 +2775,8 @@ msgid "Can't open export templates zip." msgstr "No se puede abir el zip de plantillas de exportación." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Formato de version.txt invalido dentro de plantillas." +msgstr "Formato de version.txt inválido dentro de plantillas: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2818,6 +2841,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Fallo la instalación de plantillas. Las plantillas problemáticas pueden ser " +"encontradas en '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2898,9 +2923,9 @@ msgid "Download Templates" msgstr "Descargar Plantillas" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Seleccionar mirror de la lista: " +msgstr "" +"Seleccionar un mirror de la lista: (Shift+Click: Abrir en el Navegador)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2909,19 +2934,21 @@ msgstr "" "de tipos de archivo!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Favoritos" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "No se puede navegar a '%s' ya que no se encontro en el sistema de archivos!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Ver items como una grilla de miniaturas" +msgstr "Ver Ãtems como una grilla de miniaturas." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Ver items como una lista" +msgstr "Ver Ãtems como una lista." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2949,7 +2976,7 @@ msgstr "Error al duplicar:" msgid "Unable to update dependencies:" msgstr "No se pudieron actualizar las dependencias:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "No se indicó ningún nombre" @@ -2986,22 +3013,6 @@ msgid "Duplicating folder:" msgstr "Duplicando carpeta:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Expandir todos" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Colapsar todos" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renombrar..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Mover A..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Abrir Escena(s)" @@ -3010,6 +3021,14 @@ msgid "Instance" msgstr "Instancia" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Agregar a favoritos" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Quitar de favoritos" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Editar Dependencias..." @@ -3017,19 +3036,33 @@ msgstr "Editar Dependencias..." msgid "View Owners..." msgstr "Ver Dueños..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renombrar..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Mover A..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Nuevo Script" +msgstr "Nuevo Script.." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Guardar Recurso Como..." +msgstr "Nuevo Recurso..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "Expandir Todos" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Colapsar Todos" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3051,14 +3084,12 @@ msgid "Re-Scan Filesystem" msgstr "Reexaminar Sistema de Archivos" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Act/Desact. estado de carpeta como Favorito" +msgid "Toggle split mode" +msgstr "Act/Desact. Modo Partido" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Seleccionar sub-tile editado actualmente." +msgid "Search files" +msgstr "Buscar archivos" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -3066,15 +3097,6 @@ msgstr "" "Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Buscar Clases" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3082,51 +3104,37 @@ msgstr "" "Examinando Archivos,\n" "Aguardá, por favor." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Ya hay una carpeta en esta ruta con el nombre especificado." +msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Sobreescribir" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "Crear Script" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Encontrar tile" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Encontrar" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "Palabras Completas" +msgid "Find in Files" +msgstr "Buscar en archivos" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Coincidir Mayúsculas/Minúsculas" +msgid "Find:" +msgstr "Buscar:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Carpeta:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Filtro:" +msgid "Filters:" +msgstr "Filtros:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3142,52 +3150,48 @@ msgid "Cancel" msgstr "Cancelar" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Encontrar: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Reemplazar" +msgstr "Reemplazar: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Reemplazar Todo" +msgstr "Reemplazar todo (no se puede deshacer)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Guardando..." +msgstr "Buscando..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Texto de Búsqueda" +msgstr "Búsqueda completa" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ERROR: El nombre de animación ya existe!" +msgstr "El nombre del grupo ya existe." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Nombre inválido." +msgstr "nombre de Grupo inválido." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Grupo(s) de Nodos" +msgstr "Nodos fuera del Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Filtrar nodos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Grupo(s) de Nodos" +msgstr "Nodos dentro del Grupo" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3198,9 +3202,8 @@ msgid "Remove from Group" msgstr "Quitar del Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Grupos de Imágenes" +msgstr "Administrar Grupos" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3307,18 +3310,13 @@ msgstr "Reimportar" msgid "Failed to load resource." msgstr "Fallo al cargar recurso." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" -msgstr "Expandir todas las propiedades" +msgid "Expand All Properties" +msgstr "Expandir Todas las Propiedades" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "Colapsar todas las propiedades" +msgid "Collapse All Properties" +msgstr "Colapsar Todas las Propiedades" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3334,9 +3332,8 @@ msgid "Paste Params" msgstr "Pegar Parámetros" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Clipboard de Recursos vacÃo!" +msgstr "Editar Portapapeles de Recursos" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3379,9 +3376,8 @@ msgid "Object properties." msgstr "Propiedades del objeto." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtrar nodos" +msgstr "Filtrar propiedades" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3396,37 +3392,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Seleccionar un Nodo para editar Señales y Grupos." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Editar PolÃgono" +msgstr "Editar un Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Crear solución en C#" +msgstr "Crear un Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Lista de Plugins:" +msgstr "Nombre del Plugin:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Subcarpeta:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Lenguaje" +msgstr "Lenguaje:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Script válido" +msgstr "Nombre del Script:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Activar ahora?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3485,15 +3476,15 @@ msgstr "Agregar Animación" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Cargar" +msgstr "Cargar.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Este tipo de nodo no puede ser usado. Solo los nodos raÃz están permitidos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3503,67 +3494,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"El AnimationTree esta inactivo.\n" +"Activalo para habilitar la reproducción, revisá las advertencias de nodo si " +"la activación falla." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Asignar la posición de blending dentro del espacio" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Seleccionar y mover puntos, crear puntos con click derecho." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Eliminar puntos" +msgstr "Crear puntos." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "Click Der.: Borrar Punto." +msgstr "Borrar puntos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Mover Punto" +msgstr "Punto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Nodo de Animación" +msgstr "Abrir Nodo de Animación" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "La acción '%s' ya existe!" +msgstr "El triángulo ya existe" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D no pertenece a un nodo AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "No hay ningún triángulo, asà que no se puede hacer blending." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Crear triángulos conectando puntos." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "Parseando %d Triángulos:" +msgstr "Borrar puntos y triángulos." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Generar triángulos de blending automáticamente (en vez de manualmente)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3571,6 +3559,11 @@ msgstr "" msgid "Snap" msgstr "Esnapear" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Blend:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3578,20 +3571,26 @@ msgstr "Editar Filtros" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "El nodo de salida no puede ser agregado al blend tree." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"No se pudo conectar, el puerto podrÃa estar en uso o la conexión ser " +"inválida." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"No se asigno ningún reproductor de animación, asà que no se pudieron obtener " +"los nombres de las pistas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"La ruta de reproductor asignada es inválida, asà que no se pudieron obtener " +"los nombres de las pistas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3599,23 +3598,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"El reproductor de animación no tiene una ruta válida a un nodo raÃz, asà que " +"no se pudieron obtener los nombres de las pistas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Agregar Nodo" +msgstr "Agregar Nodo.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Editar Filtros" +msgstr "Editar Pistas Filtradas:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Hijos Editables" +msgstr "Habilitar filtrado" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3643,14 +3641,12 @@ msgid "Remove Animation" msgstr "Quitar Animación" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ERROR: Nombre de animación inválido!" +msgstr "Nombre de animación inválido!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ERROR: El nombre de animación ya existe!" +msgstr "El nombre de animación ya existe!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3674,14 +3670,12 @@ msgid "Duplicate Animation" msgstr "Duplicar Animación" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ERROR: No hay animaciones para copiar!" +msgstr "No hay animaciones para copiar!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ERROR: No hay recursos de animación en el portapapeles!" +msgstr "No hay recursos de animación en el portapapeles!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3692,9 +3686,8 @@ msgid "Paste Animation" msgstr "Pegar Animación" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ERROR: No hay aniación que editar!" +msgstr "No hay animación que editar!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3740,14 +3733,12 @@ msgid "New" msgstr "Nuevo" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Editar Conecciones..." +msgstr "Editar Transiciones..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Abrir en Editor" +msgstr "Abrir en el Inspector" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3775,7 +3766,7 @@ msgstr "Pasado" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "Futuro" +msgstr "Posterior" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" @@ -3806,9 +3797,8 @@ msgid "Include Gizmos (3D)" msgstr "Incluir Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Pegar Animación" +msgstr "Pinear el AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3839,34 +3829,32 @@ msgid "Cross-Animation Blend Times" msgstr "Cross-Animation Blend Times" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "Fin(es)" +msgstr "Fin" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Inmediata" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Sincro" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Al Final" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Viaje" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "El comienzo y fin de los nodos son necesarios para una sub-transicion." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "No está en la ruta de recursos." +msgstr "Ningún recurso de reproducción asignado en la ruta: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3874,34 +3862,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Seleccionar y mover nodos.\n" +"Click der. para agregar nuevos nodos.\n" +"Shift+click izq. para crear conexiones." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Crear Nuevo %s" +msgstr "Crear nuevos nodos." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Conectar Nodos" +msgstr "Conectar nodos." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Quitar la pista seleccionada." +msgstr "Quitar el nodo o transición seleccionado/a" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Act./Desact. reproducción automática de esta animación al comenzar, " +"reiniciar o hacer seek hasta el cero." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +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_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3955,10 +3944,6 @@ msgid "Amount:" msgstr "Cantidad:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Blend:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Blend 0:" @@ -4099,14 +4084,12 @@ msgid "Asset Download Error:" msgstr "Error de Descarga del Asset:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Descargando" +msgstr "Descargando (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Descargando" +msgstr "Descargando..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4133,14 +4116,12 @@ msgid "Download for this asset is already in progress!" msgstr "La descarga de este asset ya está en progreso!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "primero" +msgstr "Primero" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Pestaña anterior" +msgstr "Anterior" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4148,7 +4129,7 @@ msgstr "Siguiente" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Ultimo" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4187,7 +4168,7 @@ msgstr "Oficial" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "Testeo" +msgstr "Prueba" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -4275,29 +4256,28 @@ msgid "Create new horizontal and vertical guides" msgstr "Crear nuevas guÃas horizontales y verticales" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "Mover Pivote" +msgstr "Mover pivote" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Rotar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "Mover Acción" +msgstr "Mover ancla" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Redimensionar CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "Escalar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Mover CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4316,19 +4296,16 @@ msgid "Paste Pose" msgstr "Pegar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "Zoom Out" +msgstr "Zoom out" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "Resetear Zoom" +msgstr "Reset de Zoom" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Zoom In" +msgstr "Zoom in" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4361,6 +4338,10 @@ msgid "Rotate Mode" msgstr "Modo Rotar" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Modo de Escalado" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4378,18 +4359,16 @@ msgid "Pan Mode" msgstr "Modo Paneo" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Act/Desact. alineado" +msgstr "Act/Desact. alineado." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" -msgstr "Opciones de alineado" +msgstr "Opciones de Alineado" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" @@ -4426,12 +4405,11 @@ msgstr "Alinear al ancla de nodo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" -msgstr "Alinear a lados de nodo" +msgstr "Alinear a los lados del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "Alinear al ancla de nodo" +msgstr "Alinear al centro del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4460,6 +4438,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "Opciones de Esqueleto" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Mostrar Huesos" @@ -4473,12 +4455,11 @@ msgstr "Reestrablecer Cadena IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Crear Hueso(s) Personalizados a partir de Nodo(s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Restablecer Huesos" +msgstr "Restablecer Huesos Personalizados" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4511,6 +4492,10 @@ msgid "Show Viewport" msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Mostrar Grupo Y Bloquear Iconos" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrar Selección" @@ -4523,9 +4508,8 @@ msgid "Layout" msgstr "Layout" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Insertar Claves" +msgstr "Insertar claves." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4541,11 +4525,11 @@ msgstr "Restablecer Pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "Multiplicar ingremento de grilla por 2" +msgstr "Multiplicar step de grilla por 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "Dividir incremento de grilla por 2" +msgstr "Dividir step de grilla por 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -4590,9 +4574,8 @@ msgid "Set Handle" msgstr "Setear Handle" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "PartÃculas" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4754,7 +4737,7 @@ msgstr "Fallo el UV Unwrap, la mesh podria no ser manifold?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "No hay meshes para debuguear." +msgstr "No hay meshes para depurar." #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/sprite_editor_plugin.cpp @@ -4952,9 +4935,8 @@ msgid "Create Navigation Polygon" msgstr "Crear PolÃgono de Navegación" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Generando AABB" +msgid "Generating Visibility Rect" +msgstr "Generando Rect. de Visibilidad" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4983,6 +4965,11 @@ msgstr "Limpiar Máscara de Emisión" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Convertir A CPUParticles" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "PartÃculas" @@ -5052,13 +5039,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Se requiere un material procesador de tipo 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Generar AABB" +msgid "Generating AABB" +msgstr "Generando AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Convertir A Mayúscula" +msgid "Generate AABB" +msgstr "Generar AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5146,12 +5132,12 @@ msgstr "Opciones" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Manejadores de Ãngulos de Espejo" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Manejadores de Tamaño de Espejo" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5186,56 +5172,49 @@ msgid "Remove In-Control Point" msgstr "Quitar Punto In-Control" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Mover Punto" +msgstr "Mover unión" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "La propiedad esqueleto del Polygon2D no apunta a un nodo Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Mostrar Huesos" +msgstr "Sincronizar Huesos" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Crear Mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Crear PolÃgono" +msgstr "Crear PolÃgono y UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Dividir punto con sà mismo." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "La división no puede formar un borde existente." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "La acción '%s' ya existe!" +msgstr "La división ya existe." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Agregar punto" +msgstr "Agregar División" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Ruta inválida!" +msgstr "División Inválida: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Quitar punto" +msgstr "Quitar División" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5243,7 +5222,7 @@ msgstr "Transformar Mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Pintar peso de huesos" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5251,25 +5230,21 @@ msgstr "Editor UV de PolÃgonos 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Editar PolÃgono" +msgstr "Poly" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Partir Path" +msgstr "Divisiones" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Crear Huesos" +msgstr "Huesos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Crear PolÃgono" @@ -5303,24 +5278,23 @@ msgstr "Escalar PolÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Conectar dos puntos para crear una división" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Selecciona un Ãtem primero!" +msgstr "Seleccioná una división para borrarla" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Pintar pesos con la intensidad especificada" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Despintar pesos con la intensidad especificada" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "Radio:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5335,9 +5309,8 @@ msgid "Clear UV" msgstr "Limpiar UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Ajustes de GridMap" +msgstr "Ajustes de Grilla" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5348,34 +5321,28 @@ msgid "Grid" msgstr "Grilla" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Configurar Snap" +msgstr "Configurar Grilla:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Offset de Grilla:" +msgstr "Offset de Grilla en X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Offset de Grilla:" +msgstr "Offset de Grilla en Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Step de Grilla:" +msgstr "Step de Grilla en X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Step de Grilla:" +msgstr "Step de Grilla en Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Escalar PolÃgono" +msgstr "Sincronizar Huesos con el PolÃgono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5403,22 +5370,22 @@ msgid "Paste Resource" msgstr "Pegar Recurso" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir en Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instancia:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir en Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Cargar Recurso" @@ -5429,12 +5396,11 @@ msgstr "ResourcePreloader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "El AnimationTree no tiene una ruta asignada a un AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "El árbol de animación es inválido." +msgstr "La ruta al AnimationPlayer es inválida" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5445,19 +5411,20 @@ msgid "Close and save changes?" msgstr "¿Cerrar y guardar cambios?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Error al mover el archivo:\n" +msgstr "Error al escribir el TextFile:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Error: no se pudo cargar el archivo." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "No se pudo cargar la imagen" +msgstr "Error no se pudo cargar el archivo." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Error guardando TileSet!" +msgstr "Error guardando archivo!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5476,19 +5443,16 @@ msgid "Error importing" msgstr "Error al importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Nueva Carpeta..." +msgstr "Nuevo TextFile..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" -msgstr "Abrir un Archivo" +msgstr "Abrir Archivo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Guardar Como..." +msgstr "Guardar Archivo Como..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5504,7 +5468,7 @@ msgstr " Referencia de Clases" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Alternar la ordenación alfabética de la lista de métodos." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5535,9 +5499,8 @@ msgid "File" msgstr "Archivo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Ver Archivos" +msgstr "Nuevo Archivo de Texto" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5552,11 +5515,7 @@ msgid "Copy Script Path" msgstr "Copiar Ruta de Script" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Mostrar en Sistema de Archivos" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "Previo en Historial" #: editor/plugins/script_editor_plugin.cpp @@ -5624,21 +5583,17 @@ msgstr "Continuar" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "Mantener el Debugger Abierto" +msgstr "Mantener el Depurador Abierto" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "Debuguear con editor externo" +msgid "Debug with External Editor" +msgstr "Depurar con Editor Externo" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "Abrir la documentación online de Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Buscar en la jerarquÃa de clases." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Buscar en la documentación de referencia." @@ -5672,42 +5627,31 @@ msgstr "Volver a Guardar" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "Debugger" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Buscar en la Ayuda" +msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Buscar Clases" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Los scripts built-in sólo pueden ser editados cuando la escena a la que " -"pertenecen está cargada" +msgid "Search Results" +msgstr "Resultados de la Búsqueda" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Linea:" +msgstr "LÃnea" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignorar)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Ir a Función" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Solo se pueden depositar recursos del sistema de archivos." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Completar SÃmbolo" +msgstr "Buscar SÃmbolo" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5731,11 +5675,11 @@ msgstr "Capitalizar" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "Resaltador de sintaxis" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Estándar" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5788,12 +5732,12 @@ msgid "Trim Trailing Whitespace" msgstr "Eliminar Espacios Sobrantes al Final" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "Convertir Indentación En Espacios" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "Convertir Indentación En Tabs" +msgid "Convert Indent to Tabs" +msgstr "Convertir Indentación En Tabulaciones" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5809,36 +5753,27 @@ msgid "Remove All Breakpoints" msgstr "Quitar Todos los Breakpoints" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "Ir a Próximo Breakpoint" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "Ir a Anterior Breakpoint" +msgid "Go to Next Breakpoint" +msgstr "Ir al Breakpoint Siguiente" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Convertir A Mayúscula" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Convertir A Minúscula" +msgid "Go to Previous Breakpoint" +msgstr "Ir al Breakpoint Anterior" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Filtrar Archivos..." +msgid "Find in Files..." +msgstr "Buscar en Archivos..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Ir a Función..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "Ir a LÃnea..." #: editor/plugins/script_text_editor.cpp @@ -5851,40 +5786,35 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Esqueleto..." +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Crear Pose de Descanso" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Setear Huesos a la Pose de Descanso" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Crear Mesh de Navegación" +msgstr "Crear huesos fÃsicos" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Esqueleto..." +msgstr "Esqueleto" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Crear solución en C#" +msgstr "Crear esqueleto fÃsico" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Reproducir" +msgstr "Reproducir IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5935,6 +5865,14 @@ msgid "Animation Key Inserted." msgstr "Clave de Animación Insertada." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Altura" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "Yaw" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objetos Dibujados" @@ -6019,9 +5957,8 @@ msgid "This operation requires a single selected node." msgstr "Esta operación requiere un solo nodo seleccionado." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Ver Información" +msgstr "Trabar Rotación de Vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6068,9 +6005,8 @@ msgid "Doppler Enable" msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Creando Vistas Previas de Mesh/es" +msgstr "Vista Previa Cinemática" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6101,6 +6037,10 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "Rotación de Vista Trabada" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Dialogo XForm" @@ -6203,21 +6143,16 @@ msgid "Tool Scale" msgstr "Herramienta Escalar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Alinear a la grilla" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Act./Desact. Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "Transformar" +msgstr "Transform" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Ajustar objeto al suelo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6248,9 +6183,8 @@ msgid "4 Viewports" msgstr "4 Viewports" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Ver Gizmos" +msgstr "Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6326,51 +6260,44 @@ msgid "Post" msgstr "Post" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "La ruta de guardado esta vacÃa!" +msgstr "El sprite esta vacÃo!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "No se puede convertir a mesh un sprite que usa frames de animación." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "GeometrÃa inválida, no se puede reemplazar por mesh." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Convertir A %s" +msgstr "Convertir A Mesh 2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Crear Outline Mesh" +msgstr "Crear Mesh 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Simplificación: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "Snap (Pixeles):" +msgstr "Crecer (Pixeles): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Vista Previa de Atlas" +msgstr "Actualizar Vista Previa" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Configuración" +msgstr "Configuración:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6474,10 +6401,9 @@ msgstr "Paso:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Sep.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Región de Textura" @@ -6610,9 +6536,12 @@ msgid "Erase Selection" msgstr "Eliminar Selección" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Nombre inválido." +msgstr "Corregir Tiles Inválidos" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Cortar Selección" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6635,9 +6564,8 @@ msgid "Erase TileMap" msgstr "Borrar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Encontrar tile" +msgstr "Encontrar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6660,35 +6588,36 @@ msgid "Pick Tile" msgstr "Elegir Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "Quitar Selección" +msgid "Copy Selection" +msgstr "Copiar Selección" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate left" +msgstr "Rotar a la izquierda" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Rotar 0 grados" +msgid "Rotate right" +msgstr "Rotar a la derecha" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Rotar 90 grados" +msgid "Flip horizontally" +msgstr "Espejar horizontalmente" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Rotar 180 grados" +msgid "Flip vertically" +msgstr "Espejar verticalmente" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Rotar 270 grados" +msgid "Clear transform" +msgstr "Reestablecer transform" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "Agregar Nodo(s) Desde Arbol" +msgstr "Agregar Textura(s) al TileSet" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Quitar ingreso actual" +msgstr "Quitar Textura actual del TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6708,15 +6637,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Mostrar nombres de tiles (mantener Tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "¿Quitar Textura Seleccionada y TODOS LOS TILES que la usen?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "No elegiste una textura para remover." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6727,76 +6656,76 @@ msgid "Merge from scene?" msgstr "¿Mergear desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +msgid "%s file(s) were not added because was already on the list." +msgstr "%s archivo(s) no fueron agregados porque ya estaban en la lista." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Tirar de las asas para editar el Rect.\n" +"Click en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" "Click izq: Activar bit.\n" -"Click der: Desactivar bit." +"Click der: Desactivar bit.\n" +"Click en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Seleccionar sub-tile editado actualmente." +msgstr "" +"Seleccionar sub-tile editado actualmente.\n" +"Click en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" -"Selectionar sub-tile para usar como icono, esta también sera usada en " -"bindings inválidos de autotile." +"Selectionar sub-tile para usar como Ãcono, este también sera usado en " +"bindings inválidos de autotile.\n" +"Click en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Seleccionar sub-tile para cambiar su prioridad." +msgstr "" +"Seleccionar sub-tile para cambiar su prioridad.\n" +"Click en otro Tile para editarlo." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Esta operación no puede hacerse sin una escena." +msgstr "Esta propiedad no se puede cambiar." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Tile Set" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Vértices" +msgstr "Vértice" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" msgstr "Fragmento" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Derecha" +msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "VisualShader" #: editor/project_export.cpp msgid "Runnable" @@ -6817,6 +6746,14 @@ msgstr "" "corruptas:" #: editor/project_export.cpp +msgid "Release" +msgstr "Release" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "Exportar Todo" + +#: editor/project_export.cpp msgid "Presets" msgstr "Presets" @@ -6825,6 +6762,10 @@ msgid "Add..." msgstr "Agregar..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "Ruta de Exportación:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Recursos" @@ -6887,35 +6828,41 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "¿Modo de Exportación?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "Exportar Todos" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Faltan las plantillas de exportación para esta plataforma:" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "Exportar Como Debug" +msgstr "Exportar Con Depuración" #: editor/project_manager.cpp msgid "The path does not exist." msgstr "La ruta no existe." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." msgstr "" -"Por favor elegà una carpeta que no contenga un archivo 'project.godot'." +"Archivo de projecto '.zip' inválido, no contiene un archivo 'project.godot'." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Por favor elegà una carpeta vacÃa." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Por favor elegà un archivo 'project.godot'." +msgstr "Por favor elegà un archivo 'project.godot' o '.zip'." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "El directorio ya contiene un proyecto de Godot." #: editor/project_manager.cpp msgid "Imported Project" @@ -7006,9 +6953,8 @@ msgid "Project Path:" msgstr "Ruta del Proyecto:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Ruta del Proyecto:" +msgstr "Ruta de Instalación del Proyecto:" #: editor/project_manager.cpp msgid "Browse" @@ -7133,13 +7079,12 @@ msgid "Mouse Button" msgstr "Botón de Mouse" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" "Nombre de acción inválido. No puede estar vacÃo o contener '/', ':', '=', " -"'\\' o '\"'." +"'\\' o '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7150,18 +7095,16 @@ msgid "Rename Input Action Event" msgstr "Renombrar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Cambiar Nombre de Animación:" +msgstr "Cambiar zona muerta de la Acción" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Agregar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Dispositivo" +msgstr "Todos los Dispositivos" #: editor/project_settings_editor.cpp msgid "Device" @@ -7208,24 +7151,20 @@ msgid "Wheel Down Button" msgstr "Botón Rueda Abajo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Botón Rueda Arriba" +msgstr "Botón Rueda Izquierda" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Botón Derecho" +msgstr "Botón Rueda Derecha" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Botón 6" +msgstr "Botón X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Botón 6" +msgstr "Botón X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7367,17 +7306,13 @@ msgstr "Configuración de Proyecto (project.godot)" msgid "General" msgstr "General" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Propiedad:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Sobreescribir Para..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Se debe reiniciar el editor para que los cambios surtan efecto" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7393,7 +7328,7 @@ msgstr "Acción" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Zona muerta" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7429,7 +7364,7 @@ msgstr "Remapeos por Locale:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Locale" +msgstr "Idioma" #: editor/project_settings_editor.cpp msgid "Locales Filter" @@ -7503,10 +7438,6 @@ msgstr "Seleccionar un Nodo" msgid "Bit %d, val %d." msgstr "Bit %d, val %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Propiedades:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Seleccionar Propiedad" @@ -7529,97 +7460,92 @@ msgstr "" "No se pudo volver a cargar la imagen convertida usando la herramienta PVRTC:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Renombrar" +msgstr "Renombrar en Masa" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Prefijo" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Sufijo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Opciones de alineado" +msgstr "Opciones avanzadas" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Sustituir" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nombre de Nodo:" +msgstr "Nombre del Nodo" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nombre del padre del nodo, si está disponible" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Encontrar Tipo de Nodo" +msgstr "Tipo de nodo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Escena Actual" +msgstr "Nombre de la escena actual" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nombre del Nodo RaÃz:" +msgstr "Nombre del nodo raÃz" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Contador de enteros secuenciales.\n" +"Comparar opciones de contador." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Contador por nivel" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Si esta activo el contador reinicia por cada grupo de nodos hijos" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Valor inicial para el contador" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Paso:" +msgstr "Paso" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "Cantidad en la que se incrementa el contador por cada nodo" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Relleno" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Número mÃnimo de dÃgitos para el contador.\n" +"Los dÃgitos faltantes serán rellenados con ceros al principio." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Cambiar Expresión" +msgstr "Expresiones Regulares" #: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "Script de Postprocesado:" +msgstr "Post-Procesado" #: editor/rename_dialog.cpp msgid "Keep" @@ -7627,32 +7553,29 @@ msgstr "Conservar" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase a under_scored" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_scored a CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Mayus./Minus." #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Minúsculas" +msgstr "A Minúsculas" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Mayúsculas" +msgstr "A Mayúsculas" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Resetear el Zoom" +msgstr "Resetear" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Error" @@ -7713,6 +7636,10 @@ msgid "Instance Scene(s)" msgstr "Instanciar Escena(s)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instanciar Escena Hija" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Restablecer Script" @@ -7749,6 +7676,14 @@ msgid "Save New Scene As..." msgstr "Guardar Nueva Escena Como..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" +"Desactivar \"editable_instance\" causara que todas las propiedades del nodo " +"vuelvan a sus valores por defecto." + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Hijos Editables" @@ -7761,29 +7696,24 @@ msgid "Make Local" msgstr "Crear Local" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Crear Nodo" +msgstr "Crear Nodo RaÃz:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Escena" +msgstr "Escena 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Escena" +msgstr "Escena 3D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Limpiar Herencia" +msgstr "Interfaz de Usuario" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Cortar Nodos" +msgstr "Nodo Personalizado" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7827,6 +7757,10 @@ msgid "Clear Inheritance" msgstr "Limpiar Herencia" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "Abrir documentación" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Eliminar Nodo(s)" @@ -7835,17 +7769,16 @@ msgid "Add Child Node" msgstr "Agregar Nodo Hijo" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Instanciar Escena Hija" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Cambiar Tipo" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "Extender Script" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Nueva RaÃz de Escena" +msgstr "Convertir en RaÃz de Escena" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7896,21 +7829,19 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Limpiar Herencia? (Imposible Deshacer!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" -msgstr "Act/Desact. Visibilidad" +msgstr "Act/Desact. Visible" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "Advertencia de configuración de nodo:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexión/es y grupo/s\n" +"El nodo tiene conexión/es y grupo/s.\n" "Clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp @@ -7930,27 +7861,24 @@ msgstr "" "Click para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" -msgstr "Abrir script" +msgstr "Abrir Script" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "El nodo está bloqueado.\n" -"Clic para desbloquear" +"Click para desbloquear." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "Los hijos no son seleccionables.\n" -"Clic para convertir en seleccionables" +"Click para convertir en seleccionables." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7961,6 +7889,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"El AnimationPlayer esta pineado.\n" +"Click para despinear." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -8000,15 +7930,18 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Abrir en Editor de Script" +msgstr "Abrir Script/Elegir Ubicación" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "La ruta está vacÃa" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Nombre de archivo vacio" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "La ruta no es local" @@ -8097,20 +8030,8 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Advertencia" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Error:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Fuente:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funcion:" +msgid "Stack Trace" +msgstr "Stack Trace" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8126,7 +8047,7 @@ msgstr "Proceso Hijo Conectado" #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "Erroes de Copia" +msgstr "Copiar Error" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -8141,18 +8062,6 @@ msgid "Stack Frames" msgstr "Frames del Stack" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variable" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Errores:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Stack Trace (si aplica):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profiler" @@ -8241,9 +8150,8 @@ msgid "Change Camera Size" msgstr "Cambiar Tamaño de Cámara" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Cambiar Alcances de Notificadores" +msgstr "Cambiar Notificador AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8270,38 +8178,32 @@ msgid "Change Capsule Shape Height" msgstr "Cambiar Altura de Shape Cápsula" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Cambiar Radio de Shape Cápsula" +msgstr "Cambiar Radio de Shape Cilindro" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Cambiar Altura de Shape Cápsula" +msgstr "Cambiar Altura de Shape Cilindro" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Cambiar Largo de Shape Rayo" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Cambiar Radio de Luces" +msgstr "Cambiar Radio de Cilindro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Cambiar Altura de Shape Cápsula" +msgstr "Cambiar Altura de Cilindro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Cambiar Radio de Shape Esférico" +msgstr "Cambiar Radio Interno de Toro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Cambiar Radio de Luces" +msgstr "Cambiar Radio Externo de Toro" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8423,9 +8325,8 @@ msgid "GridMap Delete Selection" msgstr "Eliminar Seleccionados en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "Eliminar Seleccionados en GridMap" +msgstr "Llenar Selección en GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8508,9 +8409,8 @@ msgid "Clear Selection" msgstr "Limpiar Selección" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Toda la Selección" +msgstr "Llenar la Selección" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8581,12 +8481,8 @@ msgid "End of inner exception stack trace" msgstr "Fin del stack trace de excepción interna" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Hacer Bake!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Hacer bake de mesh de navegación." +msgid "Bake NavMesh" +msgstr "Hacer Bake de NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8814,14 +8710,12 @@ msgid "Connect Nodes" msgstr "Conectar Nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Conectar Nodos" +msgstr "Conectar Datos de Nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Conectar Nodos" +msgstr "Conectar Secuencia de Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8868,6 +8762,10 @@ msgid "Base Type:" msgstr "Tipo Base:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Miembros:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Nodos Disponibles:" @@ -8904,9 +8802,8 @@ msgid "Paste Nodes" msgstr "Pegar Nodos" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Miembros" +msgstr "Editar Miembros" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8967,17 +8864,16 @@ msgstr "" "(error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Quitar Nodo de VisualScript" +msgstr "Buscar en VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Obtener" +msgid "Get %s" +msgstr "Obtener %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Asignar %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9029,15 +8925,14 @@ msgstr "" "ser ignorados." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Este nodo no tiene hijos de tipo shape, por lo tanto no puede interactuar " -"con el espacio.\n" -"Considerá agregarle nodos hijos de tipo CollisionShape2D o " +"Este nodo no tiene forma definida, por lo tanto no puede colisionar o " +"interactuar con otros objetos.\n" +"Considerá agregarle un nodo hijo de tipo CollisionShape2D o " "CollisionPolygon2D para definir su forma." #: scene/2d/collision_polygon_2d.cpp @@ -9072,6 +8967,14 @@ msgstr "" "Se debe proveer un shape para que CollisionShape2D funcione. Creale un " "recurso shape!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Animar CPUParticles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9121,6 +9024,14 @@ msgstr "" "No se imprimió ningun comportamiento ya que ningún material fue asignado " "para procesar las particulas." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Animar de Particles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9142,16 +9053,19 @@ msgstr "La propiedad Path debe apuntar a un nodo Node2D válido para funcionar." #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Esta cadena Bone2D deberÃa terminar en un nodo Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Un Bone2D solo funciona con un Skeleton2D u otro Bone2D como nodo padre." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Este hueso no tiene una pose de DESCANSO adecuada. Andá al nodo Skeleton2D y " +"asÃgnale una." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9218,15 +9132,14 @@ msgid "Lighting Meshes: " msgstr "Iluminando Meshes: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Este nodo no tiene hijos de tipo shape, asi que no puede interactuar con el " -"espacio.\n" -"Considerá agregarle nodos hijos de tipo CollisionShape o CollisionPolygon " +"Este nodo no tiene forma, por lo tanto no puede colisionar o interactuar con " +"otros objetos.\n" +"Considerá agregarle un nodo hijo de tipo CollisionShape o CollisionPolygon " "para definir su forma." #: scene/3d/collision_polygon.cpp @@ -9261,6 +9174,19 @@ msgstr "" "Se debe proveer un shape para que CollisionShape funcione. Creale un recurso " "shape!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nada visible ya que no se asignó ningún mesh." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"Animar CPUParticles requiere el uso de un SpatialMaterial con \"Billboard " +"Particles\" activado." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Ploteando Meshes" @@ -9283,6 +9209,31 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "Nada visible ya que no se asigno pasadas de dibujado a los meshes." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"Animar Particles requiere el uso de un SpatialMaterial con \"Billboard " +"Particles\" activado." + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow solo funciona cuando está asignado como hijo de un nodo Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"OrientedPathFollow solo funciona cuando esta asignado como hijo de un nodo " +"Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" +"OrientedPathFollow requiere que los vectores up estén activos en su Path " +"padre." + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9320,18 +9271,17 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Este cuerpo sera ignorado hasta que le asignes un mesh" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Los cambios de tamaño a RigidBody (en modo character o rigid) seran " -"sobreescritos por el motor de fÃsica al ejecutar.\n" -"Cambiá el tamaño de los collision shapes hijos." +"Los cambios de tamaño a un SoftBody serán sobrescritos por el motor de " +"fÃsica al ejecutar.\n" +"En su lugar, cambiá el tamaño de los collision shapes hijos." #: scene/3d/sprite_3d.cpp msgid "" @@ -9351,45 +9301,41 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "En el nodo BlendTree '%s', no se encontró la animación: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Herramientas de Animación" +msgstr "No se encontró la animación: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "En el nodo '%s', animación inválida: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ERROR: Nombre de animación inválido!" +msgstr "Animación inválida: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Desconectar '%s' de '%s'" +msgstr "Nada conectado a la entrada '%s' del nodo '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "No hay asignado ningún nodo AnimationNode raÃz para el gráfico." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"Selecciona un AnimationPlayer del Ãrbol de Escenas para editar animaciones." +"No hay asignada una ruta a un nodo AnimationPlayer conteniendo animaciones." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"La ruta asignada al AnimationPlayer no apunta a un nodo AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "El árbol de animación es inválido." +msgstr "La raÃz del AnimationPlayer no es un nodo válido." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9407,10 +9353,6 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirmá, por favor..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Seleccionar esta Carpeta" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9421,6 +9363,10 @@ msgstr "" "cualquiera de las funciones popup*(). Sin embargo, no hay problema con " "hacerlos visibles para editar, aunque se esconderán al ejecutar." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "Si exp_edit es verdadero min_value debe ser > 0." + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9472,31 +9418,143 @@ msgid "Invalid font size." msgstr "Tamaño de tipografÃa inválido." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Agregar Entrada" +msgstr "Entrada" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Ninguno>" +msgstr "Ninguno" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Fuente inválida!" +msgstr "Fuente inválida para el shader." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Asignación a función." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Asignación a uniform." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Solo se pueden asignar variaciones en funciones de vértice." + +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "¿Estás seguro/a que querés quitar todas las conexiones de el/la \"" + +#~ msgid "Class List:" +#~ msgstr "Lista de Clases:" + +#~ msgid "Search Classes" +#~ msgstr "Buscar Clases" + +#~ msgid "Public Methods" +#~ msgstr "Métodos Públicos" + +#~ msgid "Public Methods:" +#~ msgstr "Métodos Públicos:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Items de Tema de la GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Items de Tema de la GUI:" + +#~ msgid "Property: " +#~ msgstr "Propiedad: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Act/Desact. estado de carpeta como Favorito." + +#~ msgid "Show current scene file." +#~ msgstr "Mostrar archivo de escena actual." + +#~ msgid "Enter tree-view." +#~ msgstr "Entrar a la vista arbol." + +#~ msgid "Whole words" +#~ msgstr "Palabras completas" + +#~ msgid "Match case" +#~ msgstr "Coincidir mayúsculas/minúsculas" + +#~ msgid "Filter: " +#~ msgstr "Filtro: " + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Mostrar en Sistema de Archivos" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Buscar en la jerarquÃa de clases." + +#~ msgid "Search in files" +#~ msgstr "Buscar en archivo" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Los scripts built-in sólo pueden ser editados cuando la escena a la que " +#~ "pertenecen está cargada" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Convertir A Mayúscula" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Convertir A Minúscula" + +#~ msgid "Snap To Floor" +#~ msgstr "Ajustar al suelo" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Rotar 0 grados" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Rotar 90 grados" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Rotar 180 grados" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Rotar 270 grados" + +#~ msgid "Warning" +#~ msgstr "Advertencia" + +#~ msgid "Error:" +#~ msgstr "Error:" + +#~ msgid "Source:" +#~ msgstr "Fuente:" + +#~ msgid "Function:" +#~ msgstr "Funcion:" + +#~ msgid "Variable" +#~ msgstr "Variable" + +#~ msgid "Errors:" +#~ msgstr "Errores:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Stack Trace (si aplica):" + +#~ msgid "Bake!" +#~ msgstr "Hacer Bake!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Hacer bake de mesh de navegación." + +#~ msgid "Get" +#~ msgstr "Obtener" #~ msgid "Change Scalar Constant" #~ msgstr "Cambiar Constante Escalar" @@ -10003,9 +10061,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "No se pudo guardar la subtextura de altas:" -#~ msgid "Exporting for %s" -#~ msgstr "Exportando para %s" - #~ msgid "Setting Up..." #~ msgstr "Configurando..." @@ -10112,9 +10167,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "TipografÃa de Origen:" -#~ msgid "Source Font Size:" -#~ msgstr "Tamaño de la TipografÃa de Origen:" - #~ msgid "Dest Resource:" #~ msgstr "Recurso de Dest:" @@ -10191,9 +10243,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Comienzo(s)" -#~ msgid "Filters" -#~ msgstr "Filtros" - #~ msgid "Source path is empty." #~ msgstr "La ruta de origen esta vacÃa." @@ -10469,15 +10518,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Estereo" -#~ msgid "Pitch" -#~ msgstr "Altura" - #~ msgid "Window" #~ msgstr "Ventana" -#~ msgid "Move Right" -#~ msgstr "Mover a la Derecha" - #~ msgid "Scaling to %s%%." #~ msgstr "Escalando a %s%%." @@ -10552,9 +10595,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "recién presionado" -#~ msgid "just released" -#~ msgstr "recién soltado" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" @@ -10895,9 +10935,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Exportar Proyecto" -#~ msgid "Export Preset:" -#~ msgstr "Presets de Exportación:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance no contiene un recurso BakedLight." diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 2a5818db88..8b0fcd0b15 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -9,18 +9,19 @@ # rezapouya <r.pouya@chmail.ir>, 2016. # sayyed hamed nasib <cghamed752@chmail.ir>, 2017. # Behrooz Kashani <bkashani@gmail.com>, 2018. +# Mahdi <sadisticwarlock@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-24 19:42+0000\n" -"Last-Translator: Behrooz Kashani <bkashani@gmail.com>\n" +"PO-Revision-Date: 2018-11-21 19:07+0000\n" +"Last-Translator: Mahdi <sadisticwarlock@gmail.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\n" "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 3.1-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -30,7 +31,7 @@ msgstr "" "کنید ." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -82,19 +83,16 @@ msgid "Mirror" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "کلید را در انیمیشن درج Ú©Ù†" +msgstr "کلید را وارد Ú©Ù†" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "انتخاب شده را به دو تا تکثیر Ú©Ù†" +msgstr "کلید تکراری درست Ú©Ù†" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "انتخاب شده را ØØ°Ù Ú©Ù†" +msgstr "کلید‌ها را پاک Ú©Ù†" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -150,19 +148,16 @@ msgid "Animation Playback Track" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Ø§ÙØ²ÙˆØ¯Ù† ترَک به انیمیشن" +msgstr "ترک را اضاÙÙ‡ Ú©Ù†" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "طول انیمیشن (به ثانیه)." +msgstr "طول انیمیشن (به ثانیه)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "بزرگنمایی در انیمیشن." +msgstr "تکرار انیمیشن" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -195,9 +190,8 @@ msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "ترک انتخاب شده را ØØ°Ù Ú©Ù†." +msgstr "این ترک را ØØ°Ù Ú©Ù†." #: editor/animation_track_editor.cpp #, fuzzy @@ -276,7 +270,7 @@ msgstr "ساختن تعداد d% ترک جدید، ودرج کلیدها؟" #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp msgid "Create" -msgstr "ساختن" +msgstr "تولید" #: editor/animation_track_editor.cpp msgid "Anim Insert" @@ -406,8 +400,7 @@ msgstr "انتخاب شده را تغییر مقیاس بده" msgid "Scale From Cursor" msgstr "از مکان‌نما تغییر مقیاس بده" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "انتخاب شده را به دو تا تکثیر Ú©Ù†" @@ -421,11 +414,13 @@ msgid "Delete Selection" msgstr "انتخاب شده را ØØ°Ù Ú©Ù†" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "به گام بعدی برو" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "به گام قبلی برو" #: editor/animation_track_editor.cpp @@ -528,11 +523,11 @@ msgstr "تطبیقی ندارد" msgid "Replaced %d occurrence(s)." msgstr "تعداد d% رخداد جایگزین شد." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "بین ØØ±ÙˆÙ Ú©ÙˆÚ†Ú© Ùˆ بزرگ لاتین تمایز قائل شو" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "عین کلمات (بدون هیچ Ú©Ù… Ùˆ کاستی)" @@ -565,11 +560,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "بزرگنمایی بیشتر" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "خط:" @@ -602,6 +596,7 @@ msgstr "Ø§ÙØ²ÙˆØ¯Ù†" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -682,7 +677,7 @@ msgid "Edit Connection: " msgstr "خطای اتصال" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -737,17 +732,14 @@ msgstr "اخیر:" msgid "Search:" msgstr "جستجو:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "تطبیق‌ها:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "توضیØ:" @@ -808,9 +800,10 @@ msgid "Search Replacement Resource:" msgstr "منبع جایگزینی را جستجو Ú©Ù†:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -843,7 +836,8 @@ msgid "Error loading:" msgstr "خطا در بارگذاری:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "خطا در بارگذاری صØÙ†Ù‡ به دلیل بستگی‌های Ù…Ùقود:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -902,14 +896,6 @@ msgstr "تغییر مقدار دیکشنری" msgid "Thanks from the Godot community!" msgstr "با تشکر از سوی جامعه‌ی Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "مواÙقت" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "شرکت‌کنندگان در ساخت موتور Godot" @@ -1084,8 +1070,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1256,8 +1241,9 @@ msgstr "مسیر:" msgid "Node Name:" msgstr "نام گره:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1328,13 +1314,18 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "ساختن پوشه" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "ÙØ§ÛŒÙ„ وجود دارد، آیا بازنویسی شود؟" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" -msgstr "ساختن پوشه" +msgid "Select This Folder" +msgstr "انتخاب ØØ§Ù„ت" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1342,13 +1333,14 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "باز شدن مدیر پروژه؟" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "باز شدن مدیر پروژه؟" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1383,7 +1375,8 @@ msgid "Open a File or Directory" msgstr "یک پرونده یا پوشه را باز Ú©Ù†" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "ذخیره Ú©Ù†" @@ -1441,8 +1434,7 @@ msgstr "پوشه‌ها Ùˆ پرونده‌ها:" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "پرونده:" @@ -1458,24 +1450,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(در ØØ§Ù„) وارد کردن دوباره عست ها" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "جستجوی راهنما" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Ùهرست کلاس:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "جستجوی کلاسها" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "کلاس:" @@ -1492,28 +1471,31 @@ msgid "Brief Description:" msgstr "خلاصه ØªÙˆØ¶ÛŒØØ§Øª:" #: editor/editor_help.cpp -msgid "Members" -msgstr "عضوها" +msgid "Properties" +msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "عضوها:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "روش های عمومی" +msgid "Methods" +msgstr "روش ها" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "" +#, fuzzy +msgid "Methods:" +msgstr "روش ها" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "صاÙÛŒ کردن گره‌ها" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties:" +msgstr "صاÙÛŒ کردن گره‌ها" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1540,10 +1522,16 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "ØªÙˆØ¶ÛŒØØ§Øª" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "توضیØ:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "" @@ -1555,11 +1543,13 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "ØªÙˆØ¶ÛŒØØ§Øª مشخصه:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "ØªÙˆØ¶ÛŒØØ§Øª مشخصه:" #: editor/editor_help.cpp @@ -1569,12 +1559,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "روش ها" +#, fuzzy +msgid "Method Descriptions" +msgstr "ØªÙˆØ¶ÛŒØØ§Øª" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "توضیØ:" #: editor/editor_help.cpp msgid "" @@ -1582,12 +1574,60 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "جستجوی راهنما" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "جایگزینی همه" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "روش ها" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "سیگنال‌ها" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "ثابت ها" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "ویژگی:" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Theme Properties Only" +msgstr "دارایی Setter را اضاÙÙ‡ Ú©Ù†" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "عضوها" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "کلاس:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "ویژگی:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1622,6 +1662,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "مواÙقت" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "ذخیره منبع از ..." @@ -1678,10 +1723,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1910,6 +1965,12 @@ msgstr "خطای بارگذاری قلم." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1950,6 +2011,12 @@ msgstr "" msgid "Default" msgstr "Ù¾ÛŒØ´ÙØ±Ø¶" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "سامانه پرونده" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2034,8 +2101,9 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" -msgstr "" +#, fuzzy +msgid "Save All Scenes" +msgstr "ذخیره صØÙ†Ù‡ در ..." #: editor/editor_node.cpp msgid "Close Scene" @@ -2063,7 +2131,7 @@ msgid "Undo" msgstr "خنثی کردن (Undo)" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2101,6 +2169,7 @@ msgid "Quit to Project List" msgstr "خروج به Ùهرست پروژه ها" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "اشکال زدا" @@ -2211,10 +2280,6 @@ msgstr "مدیریت صدور قالب ها" msgid "Help" msgstr "راهنما" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2309,24 +2374,24 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "وارد کردن" #: editor/editor_node.cpp -msgid "Node" -msgstr "گره" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "سامانه پرونده" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "گره" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" @@ -2462,7 +2527,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "زمان:" @@ -2488,7 +2553,7 @@ msgstr "زمان:" msgid "Calls" msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2500,7 +2565,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2508,6 +2573,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2526,10 +2605,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2538,7 +2613,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "چسباندن" @@ -2826,6 +2902,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "برگزیده‌ها:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2864,7 +2945,7 @@ msgstr "خطا در بارگذاری:" msgid "Unable to update dependencies:" msgstr "خطا در بارگذاری صØÙ†Ù‡ به دلیل بستگی‌های Ù…Ùقود:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2904,29 +2985,23 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "تغییر نام..." +#, fuzzy +msgid "Open Scene(s)" +msgstr "باز کردن صØÙ†Ù‡" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "باز کردن صØÙ†Ù‡" +msgid "Add to favorites" +msgstr "برگزیده‌ها:" #: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +#, fuzzy +msgid "Remove from favorites" +msgstr "ØØ°Ù نقطهٔ منØÙ†ÛŒ" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -2936,12 +3011,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "تغییر نام..." + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "انتخاب شده را به دو تا تکثیر Ú©Ù†" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "صØÙ†Ù‡ جدید" @@ -2951,6 +3034,15 @@ msgstr "صØÙ†Ù‡ جدید" msgid "New Resource..." msgstr "ذخیره منبع از ..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "بستن" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2971,34 +3063,26 @@ msgid "Re-Scan Filesystem" msgstr "پویش دوباره سامانه پرونده" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." -msgstr "" +#, fuzzy +msgid "Toggle split mode" +msgstr "یک Breakpoint درج Ú©Ù†" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "ساختن پوشه" +msgid "Search files" +msgstr "جستجوی کلاسها" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "جستجوی کلاسها" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -3015,31 +3099,23 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find in Files" msgstr "ÛŒØ§ÙØªÙ†" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "عین کلمات (بدون هیچ Ú©Ù… Ùˆ کاستی)" +msgid "Find:" +msgstr "ÛŒØ§ÙØªÙ†" #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "بین ØØ±ÙˆÙ Ú©ÙˆÚ†Ú© Ùˆ بزرگ لاتین تمایز قائل شو" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "ساختن پوشه" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "صاÙÛŒ:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3057,6 +3133,11 @@ msgstr "لغو" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "ÛŒØ§ÙØªÙ†" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "جایگزینی" @@ -3218,18 +3299,15 @@ msgstr "وارد کردن دوباره" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" -msgstr "" +#, fuzzy +msgid "Expand All Properties" +msgstr "Ø§ÙØ²ÙˆØ¯Ù† ویژگی سراسری" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "صاÙÛŒ کردن گره‌ها" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3474,6 +3552,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3858,10 +3941,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4191,6 +4270,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4254,6 +4337,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "انتخاب ØØ§Ù„ت" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4349,6 +4437,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "تنها در قسمت انتخاب شده" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4400,6 +4493,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4840,8 +4937,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4870,6 +4966,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "اتصال به گره:" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4939,13 +5041,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "اتصال به گره:" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5283,22 +5384,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "گشودن در ویرایشگر" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "گشودن در ویرایشگر" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5331,6 +5432,11 @@ msgstr "خطا در بارگذاری:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "نمی‌تواند یک پوشه ایجاد شود." @@ -5435,12 +5541,8 @@ msgstr "رونوشت مسیر گره" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "سامانه پرونده" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +msgid "History Previous" +msgstr "زبانه قبلی" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5512,7 +5614,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "ویرایشگر بستگی" #: editor/plugins/script_editor_plugin.cpp @@ -5520,10 +5622,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5560,19 +5658,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "جستجوی راهنما" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "جستجوی کلاسها" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5583,6 +5671,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Ø§ÙØ²ÙˆØ¯Ù† وظیÙÙ‡" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5671,12 +5764,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "اتصال به گره:" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "اتصال به گره:" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5692,37 +5787,33 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "به گام بعدی برو" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Lowercase" -msgstr "اتصال به گره:" +msgid "Go to Previous Breakpoint" +msgstr "یک Breakpoint درج Ú©Ù†" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." -msgstr "" +#, fuzzy +msgid "Find in Files..." +msgstr "ÛŒØ§ÙØªÙ†" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "برداشتن نقش" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "برو به خط" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5816,6 +5907,15 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Pitch" +msgstr "سوییچ" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5986,6 +6086,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "بومی‌سازی" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6088,10 +6193,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "دید آزاد" @@ -6500,6 +6601,11 @@ msgid "Fix Invalid Tiles" msgstr "نام نامعتبر." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "انتخاب شده را تغییر مقیاس بده" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6547,25 +6653,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "برداشتن انتخاب شده" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "انتقال را در انیمیشن تغییر بده" + #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Add Texture(s) to TileSet" @@ -6595,7 +6706,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6611,7 +6722,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6692,6 +6803,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "صدور" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6700,6 +6820,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "صدور پروژه" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6760,6 +6885,16 @@ msgid "Export PCK/Zip" msgstr "صدور pck/zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "ØØ§Ù„ت صدور:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "صدور" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7224,10 +7359,6 @@ msgstr "تنظیمات پروژه (پروژه.گودات)" msgid "General" msgstr "Ú©Ù„ÛŒ" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "ویژگی:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7361,10 +7492,6 @@ msgstr "کاویدن گره" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp #, fuzzy msgid "Select Property" @@ -7456,7 +7583,7 @@ msgid "Step" msgstr "گام(ها):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7465,7 +7592,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7508,7 +7635,7 @@ msgstr "" msgid "Reset" msgstr "بازنشانی بزرگنمایی" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7567,6 +7694,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "ارث‌بری صØÙ†Ù‡Ù” ÙØ±Ø²Ù†Ø¯" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "صØÙ†Ù‡ جدید" @@ -7604,6 +7735,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "ÙØ±Ø²Ù†Ø¯ قابل ویرایش" @@ -7681,6 +7818,11 @@ msgid "Clear Inheritance" msgstr "پاک کردن ارث‌بری" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "شمارش ها" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "ØØ°Ù گره(ها)" @@ -7689,14 +7831,15 @@ msgid "Add Child Node" msgstr "Ø§ÙØ²ÙˆØ¯Ù† گره ÙØ±Ø²Ù†Ø¯" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "ارث‌بری صØÙ†Ù‡Ù” ÙØ±Ø²Ù†Ø¯" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "تغییر نوع" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "باز کردن Ùˆ اجرای یک اسکریپت" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" msgstr "" @@ -7849,6 +7992,11 @@ msgid "Path is empty" msgstr "مسیر خالی است" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "مسیر خالی است" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7945,19 +8093,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7990,18 +8126,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8441,11 +8565,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8733,6 +8853,10 @@ msgid "Base Type:" msgstr "نوع پایه:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "عضوها:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "گره های موجود:" @@ -8840,11 +8964,11 @@ msgid "Search VisualScript" msgstr "ØØ°Ù گره اسکریپت٠دیداری" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Ú¯Ø±ÙØªÙ†" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8943,6 +9067,12 @@ msgstr "" "یک Ø´Ú©Ù„ باید برای CollisionShape2D ÙØ±Ø§Ù‡Ù… شده باشد تا عمل کند. Ù„Ø·ÙØ§ یک Ø´Ú©Ù„ " "منبع برای آن ایجاد کنید!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8989,6 +9119,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9120,6 +9256,16 @@ msgstr "" "باید یک Ø´Ú©Ù„ برای CollisionShape ÙØ±Ø§Ù‡Ù… شده باشد تا عمل کند. Ù„Ø·ÙØ§ یک منبع Ø´Ú©Ù„ " "برای آن ایجاد کنید!" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9141,6 +9287,30 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D تنها در زمانی Ú©Ù‡ به عنوان یک ÙØ±Ø²Ù†Ø¯ یک گره Path2D تنظیم شود کار " +"می‌کند." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D تنها در زمانی Ú©Ù‡ به عنوان یک ÙØ±Ø²Ù†Ø¯ یک گره Path2D تنظیم شود کار " +"می‌کند." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9176,7 +9346,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9252,11 +9422,6 @@ msgstr "هشدار!" msgid "Please Confirm..." msgstr "Ù„Ø·ÙØ§Ù‹ تأیید کنید…" -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "انتخاب ØØ§Ù„ت" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9267,6 +9432,10 @@ msgstr "" "()*popup را ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ کنید. در هر صورت نمایان کردن آن‌ها برای ویرایش خوب است، " "اما به Ù…ØØ¶ اجرا مخÙÛŒ می‌شوند." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9337,6 +9506,46 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "بزرگنمایی بیشتر" + +#~ msgid "Class List:" +#~ msgstr "Ùهرست کلاس:" + +#~ msgid "Search Classes" +#~ msgstr "جستجوی کلاسها" + +#~ msgid "Public Methods" +#~ msgstr "روش های عمومی" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "ویژگی:" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "ساختن پوشه" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "عین کلمات (بدون هیچ Ú©Ù… Ùˆ کاستی)" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "بین ØØ±ÙˆÙ Ú©ÙˆÚ†Ú© Ùˆ بزرگ لاتین تمایز قائل شو" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "جستجوی کلاسها" + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "اتصال به گره:" + +#~ msgid "Get" +#~ msgstr "Ú¯Ø±ÙØªÙ†" + #~ msgid "Disabled" #~ msgstr "ØºÛŒØ±ÙØ¹Ø§Ù„ شده" @@ -9449,10 +9658,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "دنباله" -#, fuzzy -#~ msgid "Switch" -#~ msgstr "سوییچ" - #~ msgid "Iterator" #~ msgstr "تکرارکننده" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index c6efa1f56a..8e3c605afb 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-21 21:36+0000\n" +"PO-Revision-Date: 2018-12-04 05:21+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -29,41 +29,38 @@ msgstr "" "Virheellinen tyyppiargumentti convert() metodille, käytä TYPE_* vakioita." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Ei tarpeeksi tavuja tavujen purkamiseksi tai virheellinen formaatti." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Virheellinen syöte %i (ei välitetty) lausekkeessa" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "'self' ei kelpaa koska ilmentymä on 'null' (ei välitetty)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Virheellinen osoitinominaisuuden nimi '%s' solmussa %s." +msgstr "Virheelliset operandit operaattorille %s, %s ja %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Virheellinen osoitinominaisuuden nimi '%s' solmussa %s." +msgstr "Virheellinen indeksi tyyppiä %s perustyypille %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Virheellinen nimetty indeksi '%s' perustyypille %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Virheellinen argumentti tyyppiä: " +msgstr "Virheelliset argumentit rakenteelle '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Kutsuttaessa funktiota '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -72,27 +69,23 @@ msgstr "Vapauta" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Tasapainotettu" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Peilaa X" +msgstr "Peilaa" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Lisää keyframe" +msgstr "Lisää tähän avainruutu" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Kahdenna valinta" +msgstr "Kahdenna valitut avaimet" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Poista valitut" +msgstr "Poista valitut avaimet" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -123,46 +116,40 @@ msgid "Anim Change Call" msgstr "Animaatio: muuta kutsua" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Ominaisuus:" +msgstr "Ominaisuusraita" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Muunnoksen tyyppi" +msgstr "3D-muunnosraita" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Metodikutsuraita" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Bezier-käyräraita" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Äänentoistoraita" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Lopeta animaation toisto. (S)" +msgstr "Animaatiotoistoraita" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Animaatio: Lisää raita" +msgstr "Lisää raita" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Animaation pituus (sekunteina)." +msgstr "Animaation pituus (sekunteina)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Animaation lähennystaso." +msgstr "Animaation kierto" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -170,42 +157,36 @@ msgid "Functions:" msgstr "Funktiot:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Äänikuuntelija" +msgstr "Äänileikkeet:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Klippejä" +msgstr "Animaatioleikkeet:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Käytä häiriötöntä tilaa." +msgstr "Käytä tämä raita päälle/pois." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Päivitystila (Kuinka tämä ominaisuus on asetettu)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Animaatiosolmu" +msgstr "Interpolaatiotila" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Kierron tila (Interpoloi loppu alun kanssa kiertäessä)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Poista valittu raita." +msgstr "Poista tämä raita." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Ristihäivytyksen aika (s):" +msgstr "Aika (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -220,13 +201,12 @@ msgid "Trigger" msgstr "Liipaisin" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Ominaisuudet" +msgstr "Kaappaa" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Lähin" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -235,30 +215,28 @@ msgstr "Lineaarinen" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Kuutiollinen" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Leikkaa kierron interpolointi" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Kiedo kierron interpolointi" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Lisää keyframe" +msgstr "Lisää avainruutu" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Kahdenna solmu(t)" +msgstr "Kahdenna avainruudut" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Poista solmu(t)" +msgstr "Poista avainruudut" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -288,7 +266,7 @@ msgstr "Animaatio: lisää" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer ei voi animoida itseään, vain muita toistimia." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -304,7 +282,7 @@ msgstr "Animaatio: Lisää avain" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Raitojen muunnos toimii vain Spatial-pohjaisille solmuille." #: editor/animation_track_editor.cpp msgid "" @@ -313,44 +291,46 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Ääniraidat voivat osoittaa vain seuraavan tyyppisiin solmuihin:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Animaatioraidat voivat osoittaa vain AnimationPlayer solmuihin." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "Animaatiotoistin ei voi animoida itseään, ainoastaan muita toistimia." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Uutta raitaa ei voida lisätä ilman juurta" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Raidan polku on virheellinen, joten ei voida lisätä avainruutua." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Raita ei ole Spatial-tyyppinen, joten ei voida lisätä avainruutua" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Raidan polku on virheellinen, joten ei voida lisätä metodin avainta." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet ei löytynyt skriptistä: " +msgstr "Metodia ei löydy objektista: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Animaatio: siirrä avaimia" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Leikepöytä on tyhjä!" +msgstr "Leikepöytä on tyhjä" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -359,25 +339,23 @@ msgstr "Animaatio: Skaalaa avaimia" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "" +msgstr "Tämä valinta ei käy Bezier-editoinnille, koska se on vain yksi raita." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Näytä raidat vain puussa valituista solmuista." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Ryhmitä raidat solmujen mukaan tai näytä ne tavallisena luettelona." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Askellus (s):" +msgstr "Askellus (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Animaatiopuu on kelvollinen." +msgstr "Animaation askelluksen arvo." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -389,19 +367,16 @@ msgid "Edit" msgstr "Muokkaa" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Animaatiopuu" +msgstr "Animaation ominaisuudet." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Kopioi parametrit" +msgstr "Kopioi raidat" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Liitä parametrit" +msgstr "Liitä raidat" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -411,8 +386,7 @@ msgstr "Skaalaa valintaa" msgid "Scale From Cursor" msgstr "Skaalaa kursorista" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Kahdenna valinta" @@ -421,16 +395,17 @@ msgid "Duplicate Transposed" msgstr "Kahdenna käänteisesti" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" msgstr "Poista valitut" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Mene seuraavaan vaiheeseen" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Mene edelliseen vaiheeseen" #: editor/animation_track_editor.cpp @@ -443,11 +418,11 @@ msgstr "Siivoa animaatio" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Valitse animoitava solmu:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Käytä Bezier-käyriä" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -495,7 +470,7 @@ msgstr "Skaalaussuhde:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Valitse kopioitavat raidat:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -533,11 +508,11 @@ msgstr "Ei osumia" msgid "Replaced %d occurrence(s)." msgstr "Korvattu %d osuvuutta." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Huomioi kirjainkoko" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Kokonaisia sanoja" @@ -566,16 +541,15 @@ msgid "Reset Zoom" msgstr "Palauta oletuslähennystaso" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Varoitukset" +msgstr "Varoitukset:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Lähennä (%):" +msgid "Font Size:" +msgstr "Etunäkymä" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Rivi:" @@ -608,6 +582,7 @@ msgstr "Lisää" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -664,9 +639,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Katkaise yhteys solmusta '%s' solmuun '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Katkaise yhteys solmusta '%s' solmuun '%s'" +msgstr "Katkaise kaikki yhteydet signaalista: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -678,19 +652,16 @@ msgid "Disconnect" msgstr "Katkaise yhteys" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Yhdistävä signaali:" +msgstr "Yhdistä signaali: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Muokkaa yhteyksiä" +msgstr "Muokkaa yhteyttä: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Haluatko varmasti suorittaa usemman projektin?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Oletko varma, että haluat poistaa kaikki kytkennät signaalilta \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -698,22 +669,19 @@ msgstr "Signaalit" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Oletko varma, että haluat poistaa kaikki kytkennät tältä signaalilta?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Katkaise yhteys" +msgstr "Katkaise kaikki yhteydet" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Muokkaa" +msgstr "Muokkaa..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Metodit" +msgstr "Mene metodiin" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -744,17 +712,14 @@ msgstr "Viimeaikaiset:" msgid "Search:" msgstr "Hae:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Osumat:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Kuvaus:" @@ -815,9 +780,10 @@ msgid "Search Replacement Resource:" msgstr "Etsi korvaava resurssi:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -850,8 +816,8 @@ msgid "Error loading:" msgstr "Virhe ladatessa:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "Skenen lataaminen epäonnistui puuttuvan riippuvuuden takia:" +msgid "Load failed due to missing dependencies:" +msgstr "Lataaminen epäonnistui puuttuvien riippuvuuksien takia:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -909,14 +875,6 @@ msgstr "Vaihda hakurakenteen arvoa" msgid "Thanks from the Godot community!" msgstr "Kiitos Godot-yhteisöltä!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot moottorin kehittäjät" @@ -1092,8 +1050,7 @@ msgid "Bus options" msgstr "Väylän asetukset" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Monista" @@ -1266,8 +1223,9 @@ msgstr "Polku:" msgid "Node Name:" msgstr "Solmun nimi:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nimi" @@ -1337,12 +1295,17 @@ msgid "Template file not found:" msgstr "Mallitiedostoa ei löytynyt:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Valitse nykyinen kansio" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Tiedosto on jo olemassa, korvaa?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Valitse nykyinen kansio" +#, fuzzy +msgid "Select This Folder" +msgstr "Valitse tämä kansio" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1350,12 +1313,13 @@ msgstr "Kopioi polku" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" -msgstr "Näytä tiedostonhallinnassa" +msgid "Open in File Manager" +msgstr "Avaa tiedostonhallinnassa" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Näytä tiedostonhallinnassa" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1391,7 +1355,8 @@ msgid "Open a File or Directory" msgstr "Avaa tiedosto tai hakemisto" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Tallenna" @@ -1449,8 +1414,7 @@ msgstr "Hakemistot ja tiedostot:" msgid "Preview:" msgstr "Esikatselu:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Tiedosto:" @@ -1466,24 +1430,11 @@ msgstr "Selaa lähdetiedostoja" msgid "(Re)Importing Assets" msgstr "Tuodaan (uudelleen) assetteja" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Etsi ohjeesta" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Luokkaluettelo:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Etsi luokkia" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Yläpuoli" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Luokka:" @@ -1500,28 +1451,31 @@ msgid "Brief Description:" msgstr "Lyhyt kuvaus:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Jäsenet" +msgid "Properties" +msgstr "Ominaisuudet" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Jäsenet:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Ominaisuudet:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Julkiset metodit" +msgid "Methods" +msgstr "Metodit" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Julkiset metodit:" +#, fuzzy +msgid "Methods:" +msgstr "Metodit" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Käyttöliittymäteeman osat" +#, fuzzy +msgid "Theme Properties" +msgstr "Ominaisuudet" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Käyttöliittymäteeman osat:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Ominaisuudet:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1548,10 +1502,16 @@ msgid "Constants:" msgstr "Vakiot:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Kuvaus" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Kuvaus:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Online-oppaat:" @@ -1566,11 +1526,13 @@ msgstr "" "sellaisen[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Ominaisuudet" +#, fuzzy +msgid "Property Descriptions" +msgstr "Ominaisuuden kuvaus:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Ominaisuuden kuvaus:" #: editor/editor_help.cpp @@ -1582,11 +1544,13 @@ msgstr "" "$color][url=$url]kirjoittamalla sellaisen[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metodit" +#, fuzzy +msgid "Method Descriptions" +msgstr "Metodin kuvaus:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Metodin kuvaus:" #: editor/editor_help.cpp @@ -1597,18 +1561,67 @@ msgstr "" "Tälle metodille ei vielä löydy kuvausta. Voit auttaa meitä [color=$color]" "[url=$url]kirjoittamalla sellaisen[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Etsi ohjeesta" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Näytä normaali" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Luokat" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Methods Only" +msgstr "Metodit" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signaalit" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Vakiot" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Ominaisuudet" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Ominaisuudet" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Jäsenet" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Luokka:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Ominaisuus:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Aseta" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Aseta useita:" #: editor/editor_log.cpp msgid "Output:" @@ -1636,6 +1649,11 @@ msgstr "Projektin vienti epäonnistui virhekoodilla %d." msgid "Error saving resource!" msgstr "Virhe tallennettaessa resurssia!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Tallenna resurssi nimellä..." @@ -1654,7 +1672,7 @@ msgstr "Virhe tallennettaessa." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "Ei voida avata tiedostoa '%s'. Se on voitu siirtää tai tuhota." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1690,12 +1708,22 @@ msgstr "Tätä toimintoa ei voi tehdä ilman että puun juuri on olemassa." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Skeneä ei voitu tallentaa. Mahdollisia riippuvuuksia (ilmentymiä tai " "perintää) ei voida toteuttaa." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Ei voitu ladata MeshLibrary resurssia yhdistämistä varten!" @@ -1947,6 +1975,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Virhe ladattaessa lisäosaa polusta: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Virhe ladattaessa lisäosaa polusta: '%s'. Skripti ei ole työkalu-tilassa." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "Virhe ladattaessa lisäosaa polusta: '%s'. Tyyppi ei ole EditorPlugin." @@ -1993,15 +2029,19 @@ msgstr "Poista asettelu" msgid "Default" msgstr "Oletus" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "Näytä tiedostojärjestelmässä" + +#: editor/editor_node.cpp msgid "Play This Scene" -msgstr "Pelaa skeneä" +msgstr "Pelaa tätä skeneä" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Sulje muut välilehdet" +msgstr "Sulje välilehti" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2076,7 +2116,8 @@ msgid "Save Scene" msgstr "Tallenna skene" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Tallenna kaikki skenet" #: editor/editor_node.cpp @@ -2105,7 +2146,7 @@ msgid "Undo" msgstr "Peru" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Tee uudelleen" @@ -2134,15 +2175,15 @@ msgid "Tools" msgstr "Työkalut" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Avataanko projektinhallinta?" +msgstr "Avaa projektin datakansio" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Lopeta ja palaa projektiluetteloon" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Virheenkorjaus" @@ -2249,18 +2290,16 @@ msgid "Toggle Fullscreen" msgstr "Siirry koko näytön tilaan" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Editorin asetukset" +msgstr "Avaa editorin data/asetuskansio" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Avaa editorin datakansio" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Editorin asetukset" +msgstr "Avaa editorin asetuskansio" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2270,10 +2309,6 @@ msgstr "Hallinnoi vientimalleja" msgid "Help" msgstr "Ohje" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Luokat" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2344,13 +2379,12 @@ msgstr "Valitse ja käynnistä skene" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Näyttöajurin vaihtaminen edellyttää editorin uudelleenkäynnistystä." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Tallenna & tuo uudelleen" +msgstr "Tallenna & käynnistä uudelleen" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2368,27 +2402,26 @@ msgstr "Päivitä muutokset" msgid "Disable Update Spinner" msgstr "Poista päivitysanimaatio" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Tarkastelu" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Tuo" #: editor/editor_node.cpp -msgid "Node" -msgstr "Solmu" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Tiedostojärjestelmä" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Tarkastelu" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Solmu" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Laajenna kaikki" +msgstr "Laajenna alapaneeli" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2467,9 +2500,8 @@ msgid "Thumbnail..." msgstr "Pienoiskuva..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Muokkaa polygonia" +msgstr "Muokkaa liitännäistä" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2493,15 +2525,13 @@ msgid "Status:" msgstr "Tila:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Muokkaa" +msgstr "Muokkaa:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Aloita!" +msgstr "Aloita" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2523,7 +2553,7 @@ msgstr "Kuvaruutujen %" msgid "Physics Frame %" msgstr "Fysiikkaruutujen %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Aika:" @@ -2547,27 +2577,39 @@ msgstr "Aika" msgid "Calls" msgstr "Kutsuja" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Päällä" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Kerros" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bitti %d, arvo %d." +msgstr "Bitti %d, arvo %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Tyhjä]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Aseta" +msgstr "Aseta..." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2586,10 +2628,6 @@ msgstr "Uusi %s" msgid "Make Unique" msgstr "Tee yksilölliseksi" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Näytä tiedostojärjestelmässä" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2598,7 +2636,8 @@ msgstr "Näytä tiedostojärjestelmässä" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Liitä" @@ -2611,36 +2650,32 @@ msgstr "Muunna muotoon %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Avaa editorissa" +msgstr "Avaa editori" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Valittu solmu ei ole Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Solun koko:" +msgstr "Koko: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Sivu: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Uusi nimi:" +msgstr "Uusi avain:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Uusi nimi:" +msgstr "Uusi arvo:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Lisää avain/arvopari" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2733,9 +2768,8 @@ msgid "Can't open export templates zip." msgstr "Vientimallien zip-tiedostoa ei voitu avata." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Vientimalli sisältää virheellisen version.txt tiedoston." +msgstr "Vientimalli sisältää virheellisen version.txt tiedoston: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2800,6 +2834,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Vientimallien asennus epäonnistui. Ongelmallisten vientimallien arkisto " +"löytyy kohteesta '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2880,9 +2916,8 @@ msgid "Download Templates" msgstr "Lataa mallit" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Valitse peilipalvelin listasta: " +msgstr "Valitse peilipalvelin listasta: (Shift+napsautus: Avaa selaimessa)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2891,20 +2926,23 @@ msgstr "" "Välimuistia ei tallenneta!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Suosikit:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Tiedostoa '%s' ei voida avata, koska sitä ei näytä löytyvän " "tiedostojärjestelmästäsi!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Ruudukkonäkymä esikatselukuvilla" +msgstr "Ruudukkonäkymä esikatselukuvilla." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Listanäkymä" +msgstr "Listanäkymä." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2931,7 +2969,7 @@ msgstr "Virhe kahdennettaessa:" msgid "Unable to update dependencies:" msgstr "Ei voida päivittää riippuvuuksia:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nimeä ei annettu" @@ -2968,22 +3006,6 @@ msgid "Duplicating folder:" msgstr "Kahdennetaan kansio:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Laajenna kaikki" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Pienennä kaikki" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Nimeä uudelleen..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Siirrä..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Avaa skene tai skenejä" @@ -2992,6 +3014,16 @@ msgid "Instance" msgstr "Luo ilmentymä" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Suosikit:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Poista ryhmästä" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Muokkaa riippuvuuksia..." @@ -2999,19 +3031,35 @@ msgstr "Muokkaa riippuvuuksia..." msgid "View Owners..." msgstr "Tarkastele omistajia..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Nimeä uudelleen..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Kahdenna..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Siirrä..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Uusi skripti" +msgstr "Uusi skripti..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Tallenna resurssi nimellä..." +msgstr "Uusi resurssi..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Laajenna kaikki" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Pienennä kaikki" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3034,28 +3082,18 @@ msgstr "Skannaa tiedostojärjestelmä uudelleen" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Merkitse kansio suosikkeihin" +msgid "Toggle split mode" +msgstr "Aseta tila" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Valitse muokattavana oleva aliruutu." +msgid "Search files" +msgstr "Etsi tiedostoista" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Luo valituista skeneistä ilmentymä valitun solmun alle." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Etsi luokkia" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3063,18 +3101,17 @@ msgstr "" "Selataan tiedostoja,\n" "Hetkinen…" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Siirrä" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Polusta löytyy jo kansio annetulla nimellä." +msgstr "Tästä sijainnista löytyy jo samanniminen tiedosto tai kansio." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Ylikirjoita" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3082,32 +3119,23 @@ msgstr "Luo skripti" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" -msgstr "Etsi ruutu" +msgid "Find in Files" +msgstr "Etsi tiedostoista" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "Etsi" +msgid "Find:" +msgstr "Etsi: " #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Kokonaisia sanoja" +msgid "Folder:" +msgstr "Kansio: " #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Huomioi kirjainkoko" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Suodatin:" +msgid "Filters:" +msgstr "Suodattimet" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3123,52 +3151,48 @@ msgid "Cancel" msgstr "Peru" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Etsi: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Korvaa" +msgstr "Korvaa: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Korvaa kaikki" +msgstr "Korvaa kaikki (ei voi perua)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Tallennetaan..." +msgstr "Haetaan..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Hae tekstiä" +msgstr "Haku valmis" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "VIRHE: Samanniminen animaatio on jo olemassa!" +msgstr "Ryhmän nimi on jo olemassa." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Virheellinen nimi." +msgstr "virheellinen ryhmän nimi." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Ryhmät" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Lisää ryhmään" +msgstr "Ryhmään kuulumattomat solmut" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Suodata solmuja" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Muokkaa ryhmiä" +msgstr "Ryhmään kuuluvat solmut" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3179,9 +3203,8 @@ msgid "Remove from Group" msgstr "Poista ryhmästä" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Ryhmät" +msgstr "Hallinnoi ryhmiä" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3289,17 +3312,14 @@ msgstr "Tuo uudelleen" msgid "Failed to load resource." msgstr "Resurssin lataaminen epäonnistui." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Laajenna kaikki ominaisuudet" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Tiivistä kaikki ominaisuudet" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3316,9 +3336,8 @@ msgid "Paste Params" msgstr "Liitä parametrit" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Resurssien leikepöytä on tyhjä!" +msgstr "Muokkaa resurssien leikepöytää" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3361,9 +3380,8 @@ msgid "Object properties." msgstr "Objektin ominaisuudet." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Suodata solmuja" +msgstr "Suodata ominaisuuksia" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3378,37 +3396,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Valitse solmu, jonka signaaleja ja ryhmiä haluat muokata." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Muokkaa polygonia" +msgstr "Muokkaa liitännäistä" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Luo C# ratkaisu" +msgstr "Luo liitännäinen" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Lisäosat" +msgstr "Liitännäisen nimi:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Alikansio:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Kieli" +msgstr "Kieli:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Skripti kelpaa" +msgstr "Skriptin nimi:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Aktivoi nyt?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3467,15 +3480,15 @@ msgstr "Lisää animaatio" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Lataa" +msgstr "Lataa..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Tämän tyyppistä solmua ei voi käyttää. Vain juurisolmut ovat sallittuja." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3485,66 +3498,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree ei ole aktiivinen.\n" +"Aktivoi se käynnistääksesi toiston, ja tarkista solmujen varoitukset, jos se " +"epäonnistuu." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Aseta sulautussijainti tilassa" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Valitse ja siirrä pisteitä, luo pisteitä hiiren oikealla napilla." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Poista pisteitä" +msgstr "Luo pisteitä." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "OHP: Pyyhi piste." +msgstr "Pyyhi pisteitä." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Siirrä pistettä" +msgstr "Piste" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Animaatiosolmu" +msgstr "Avaa animaatiosolmu" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Tapahtuma '%s' on jo olemassa!" +msgstr "Kolmio on jo olemassa" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D ei kuulu AnimationTree solmuun." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Kolmioita ei ole olemassa, joten mitään sulautusta ei tapahdu." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Luo kolmiot yhdistämällä pisteet." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." -msgstr "" +msgstr "Poista pisteet ja kolmiot." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Luo sulautuskolmiot automaattisesti (manuaalisen sijaan)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3552,6 +3563,11 @@ msgstr "" msgid "Snap" msgstr "Tartu" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Sulautus:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3559,20 +3575,23 @@ msgstr "Muokkaa suodattimia" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Lähtösolmua ei voida lisätä sulautuspuuhun." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Ei voida yhdistää, portti voi olla käytössä tai yhteys voi olla virheellinen." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Animaatiotoistinta ei ole asetettu, joten raitojen nimien haku ei onnistu." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Toistimen polku on virheellinen, joten raitojen nimien haku ei onnistu." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3580,23 +3599,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Animaatiotoistimella ei ole kelvollista juurisolmun polkua, joten raitojen " +"nimien haku ei onnistu." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Lisää solmu" +msgstr "Lisää solmu..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Muokkaa suodattimia" +msgstr "Muokkaa suodatettuja raitoja:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Muokattavat alisolmut" +msgstr "Kytke suodatus" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3624,14 +3642,12 @@ msgid "Remove Animation" msgstr "Poista animaatio" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "VIRHE: Virheellinen animaation nimi!" +msgstr "Virheellinen animaation nimi!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "VIRHE: Samanniminen animaatio on jo olemassa!" +msgstr "Samanniminen animaatio on jo olemassa!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3655,14 +3671,12 @@ msgid "Duplicate Animation" msgstr "Monista animaatio" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "VIRHE: Ei kopioitavaa animaatiota!" +msgstr "Ei kopioitavaa animaatiota!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "VIRHE: Ei animaation resurssia leikepöydällä!" +msgstr "Ei animaation resurssia leikepöydällä!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3673,9 +3687,8 @@ msgid "Paste Animation" msgstr "Liitä animaatio" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "VIRHE: Ei muokattavaa animaatiota!" +msgstr "Ei muokattavaa animaatiota!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3719,14 +3732,12 @@ msgid "New" msgstr "Uusi" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Siirtymät" +msgstr "Muokkaa siirtymiä..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Avaa editorissa" +msgstr "Avaa tarkastelijassa" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3785,9 +3796,8 @@ msgid "Include Gizmos (3D)" msgstr "Näytä 3D-muokkaimet" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Liitä animaatio" +msgstr "Kiinnitä AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3818,34 +3828,32 @@ msgid "Cross-Animation Blend Times" msgstr "Lomittautuvien animaatioiden sulautusajat" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "Loppu(u)" +msgstr "End" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Välitön" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Synkronoi" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Lopussa" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Matkaa" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Alku- ja loppusolmut tarvitaan alisiirtymään." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Ei löytynyt resurssipolusta." +msgstr "Polulle ei ole asetettu toistoresurssia: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3853,34 +3861,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Valitse ja siirrä solmuja.\n" +"Oikea hiirenkorva lisää uusia solmuja.\n" +"Shift+vasen hiirenkorva luo yhteyksiä." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Luo uusi %s" +msgstr "Luo uusia solmuja." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Kytke solmut" +msgstr "Kytke solmut." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Poista valittu raita." +msgstr "Poista valittu solmu tai siirtymä" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Kytke tämän animaation automaattinen toisto alussa, aloita uudelleen tai " +"palaa nollaan." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Aseta loppuanimaatio. Tämä on hyödyllistä alisiirtymiä varten." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Siirtymä" +msgstr "Siirtymä: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3914,11 +3923,11 @@ msgstr "Sekoita" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "Automaattinen uudelleenkäynnistys:" +msgstr "Automaattinen uudelleenaloitus:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" -msgstr "Käynnistä uudelleen (s):" +msgstr "Aloita uudelleen (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Random Restart (s):" @@ -3934,10 +3943,6 @@ msgid "Amount:" msgstr "Määrä:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Sulautus:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Sulautus 0:" @@ -4064,7 +4069,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "Oletettiin:" +msgstr "Odotettiin:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" @@ -4079,14 +4084,12 @@ msgid "Asset Download Error:" msgstr "Assettien latausvirhe:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Ladataan" +msgstr "Ladataan (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Ladataan" +msgstr "Ladataan..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4113,14 +4116,12 @@ msgid "Download for this asset is already in progress!" msgstr "Tämän assetin lataus on jo käynnissä!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "ensimmäinen" +msgstr "Ensimmäinen" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Edellinen välilehti" +msgstr "Edellinen" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4128,7 +4129,7 @@ msgstr "Seuraava" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Viimeinen" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4138,7 +4139,7 @@ msgstr "Kaikki" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "Lisäosat" +msgstr "Liitännäiset" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Sort:" @@ -4220,7 +4221,7 @@ msgstr "Ruudukon välistys:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "Ruudukon siirtymä:" +msgstr "Kierron siirtymä:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" @@ -4228,7 +4229,7 @@ msgstr "Kierron välistys:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" -msgstr "Siirrä pystysuuntaista apuviivaa" +msgstr "Siirrä pystysuoraa apuviivaa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new vertical guide" @@ -4255,29 +4256,29 @@ msgid "Create new horizontal and vertical guides" msgstr "Luo uudet vaaka- ja pystysuorat apuviivat" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" msgstr "Siirrä keskikohtaa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Muokkaa CanvasItemiä" +msgstr "Kierrä CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "Siirrä" +msgstr "Siirrä ankkuri" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Muokkaa CanvasItemiä" +msgstr "Muokkaa CanvasItemin kokoa" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Kierrä CanvasItemiä" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "Muokkaa CanvasItemiä" +msgstr "Siirrä CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4296,17 +4297,14 @@ msgid "Paste Pose" msgstr "Liitä asento" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" msgstr "Loitonna" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" msgstr "Palauta lähennys" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" msgstr "Lähennä" @@ -4341,6 +4339,11 @@ msgid "Rotate Mode" msgstr "Kääntötila" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Skaalaustila (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4358,16 +4361,14 @@ msgid "Pan Mode" msgstr "Panorointitila" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Asettaa tarttumisen" +msgstr "Aseta tarttuminen." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "Käytä tarttumista" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "Tarttumisen asetukset" @@ -4409,9 +4410,8 @@ msgid "Snap to node sides" msgstr "Tartu solmun reunoihin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "Tartu solmun ankkuriin" +msgstr "Tartu solmun keskipisteeseen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4433,13 +4433,18 @@ msgstr "Poista valittujen objektien lukitus (voi liikutella)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "Varmistaa ettei objektin lapsia voi valita." +msgstr "Varmistaa, ettei objektin alisolmuja voi valita." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." msgstr "Palauttaa objektin aliobjektien mahdollisuuden tulla valituksi." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Luuranko" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Näytä luut" @@ -4453,12 +4458,11 @@ msgstr "Tyhjennä IK ketju" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Luo mukautetut luut solmuista" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Tyhjennä luut" +msgstr "Poista mukautetut luut" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4491,21 +4495,24 @@ msgid "Show Viewport" msgstr "Näytä näyttöikkuna" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Valinta keskikohtaan" +msgstr "Keskitä valintaan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "Framen valinta" +msgstr "Rajaa valintaan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" msgstr "Asettelu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Lisää avainruutuja" +msgstr "Lisää avainruutuja." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4570,9 +4577,8 @@ msgid "Set Handle" msgstr "Aseta kahva" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "Partikkelit" +msgstr "CPUPartikkelit" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4933,9 +4939,9 @@ msgid "Create Navigation Polygon" msgstr "Luo navigointipolygoni" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Luodaan AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Kartoita näkyvä alue" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4964,6 +4970,11 @@ msgstr "Tyhjennä emissiomaski" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Muunna CPUPartikkeleiksi" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Partikkelit" @@ -5033,13 +5044,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Tarvitaan 'ParticlesMaterial' tyyppinen prosessorimateriaali." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Luo AABB" +msgid "Generating AABB" +msgstr "Luodaan AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Muunna isoiksi kirjaimiksi" +msgid "Generate AABB" +msgstr "Luo AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5127,12 +5137,12 @@ msgstr "Asetuksia" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Peilaa kahvojen kulmat" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Peilaa kahvojen pituudet" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5167,56 +5177,49 @@ msgid "Remove In-Control Point" msgstr "Poista tulo-ohjaimen piste" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Siirrä pistettä" +msgstr "Siirrä liitosta" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "Polygon2D solmun luuominaisuus ei osoita Skeleton2D solmuun" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Näytä luut" +msgstr "Synkkaa luut" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Luo UV kartta" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Luo polygoni" +msgstr "Luo polygoni ja UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Jaa piste itsellään." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "Jako ei voi muodostaa olemassa olevaa reunaa." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "Tapahtuma '%s' on jo olemassa!" +msgstr "Jako on jo olemassa." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Lisää pistä" +msgstr "Lisää jako" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Virheellinen polku!" +msgstr "Virheellinen jako: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Poista piste" +msgstr "Poista jako" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5224,7 +5227,7 @@ msgstr "Muunna UV kartta" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Maalaa luiden painot" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5232,25 +5235,21 @@ msgstr "Polygon 2D UV-editori" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Muokkaa polygonia" +msgstr "Polygoni" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Puolita polku" +msgstr "Jaot" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Tee luut" +msgstr "Luut" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Luo polygoni" @@ -5284,24 +5283,23 @@ msgstr "Skaalaa polygonia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Yhdistä kaksi pistettä luodaksesi jaon" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Valitse asetus ensin!" +msgstr "Valitse jako poistaaksesi sen" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Maalaa painot tietyllä voimakkuudella" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Poista painojen maalaus tietyllä voimakkuudella" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "Säde:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5316,7 +5314,6 @@ msgid "Clear UV" msgstr "Tyhjennä UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" msgstr "Ruudukon asetukset" @@ -5329,34 +5326,28 @@ msgid "Grid" msgstr "Ruudukko" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Määrittele tarttuminen" +msgstr "Määrittele ruudukko:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Ruudukon siirtymä:" +msgstr "Ruudukon X-siirtymä:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Ruudukon siirtymä:" +msgstr "Ruudukon Y-siirtymä:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Ruudukon välistys:" +msgstr "Ruudukon X-välistys:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Ruudukon välistys:" +msgstr "Ruudukon Y-välistys:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Skaalaa polygonia" +msgstr "Synkkaa luut polygoniin" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5384,22 +5375,22 @@ msgid "Paste Resource" msgstr "Liitä resurssi" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Avaa editorissa" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Ilmentymä:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tyyppi:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Avaa editorissa" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Lataa resurssi" @@ -5410,12 +5401,11 @@ msgstr "Resurssien esilataaja" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree solmulle ei ole asetettu polkua AnimationPlayer solmuun" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Animaatiopuu ei ole kelvollinen." +msgstr "Polku AnimationPlayer solmuun ei ole kelvollinen" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5426,19 +5416,21 @@ msgid "Close and save changes?" msgstr "Sulje ja tallenna muutokset?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Virhe ladattaessa kuvaa:" +msgstr "Virhe kirjoitettaessa teksitiedostoa:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Virhe - Ei voitu ladata tiedostoa." + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." -msgstr "Virhe - Ei voitu luoda skriptiä tiedostojärjestelmään." +msgstr "Virhe - Ei voitu ladata tiedostoa." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Virhe tallennettaessa ruutuvalikoimaa!" +msgstr "Virhe tallennettaessa tiedostoa!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5457,19 +5449,16 @@ msgid "Error importing" msgstr "Virhe tuonnissa" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Uusi kansio..." +msgstr "Uusi tekstitiedosto..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "Avaa tiedosto" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Tallenna nimellä..." +msgstr "Tallenna tiedosto nimellä..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5485,7 +5474,7 @@ msgstr " Luokan referenssi" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Kytke metodilistan aakkosellinen järjestys." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5516,9 +5505,8 @@ msgid "File" msgstr "Tiedosto" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Näytä tiedostot" +msgstr "Uusi tekstitiedosto" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5533,11 +5521,8 @@ msgid "Copy Script Path" msgstr "Kopioi skriptin polku" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Näytä tiedostojärjestelmässä" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Edellinen historiassa" #: editor/plugins/script_editor_plugin.cpp @@ -5608,7 +5593,8 @@ msgid "Keep Debugger Open" msgstr "Pidä testaaja auki" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Testaa ulkoisella editorilla" #: editor/plugins/script_editor_plugin.cpp @@ -5616,10 +5602,6 @@ msgid "Open Godot online documentation" msgstr "Avaa Godotin online-dokumentaatio" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Etsi luokkahierarkiasta." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Etsi dokumentaatiosta." @@ -5657,38 +5639,29 @@ msgstr "Debuggeri" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" -msgstr "Etsi ohjeesta" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Etsi luokkia" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Sisäänrakennettuja skriptejä voi muokata ainoastaan, kun skene, johon ne " -"kuuluvat, on ladattu" +msgid "Search Results" +msgstr "Haun tulokset" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Rivi:" +msgstr "Rivi" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(sivuuta)" + +#: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Mene funktioon..." #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Vain tiedostojärjestelmän resursseja voi raahata ja pudottaa." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Täydennä symbooli" +msgstr "Haettava symboli" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5712,11 +5685,11 @@ msgstr "Isot alkukirjaimet" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "Syntaksin korostaja" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Standardi" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5742,7 +5715,7 @@ msgstr "Sisennä oikealle" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "Näytä/Piilota kommentit" +msgstr "Lisää tai poista kommentit" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" @@ -5769,11 +5742,13 @@ msgid "Trim Trailing Whitespace" msgstr "Poista välilyönnit lopusta" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Muuta sisennys välilyönneiksi" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Muuta sisennys sarkaimiksi" #: editor/plugins/script_text_editor.cpp @@ -5790,36 +5765,32 @@ msgid "Remove All Breakpoints" msgstr "Poista kaikki breakpointit" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Mene seuraavaan breakpointiin" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Mene edelliseen breakpointiin" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Muunna isoiksi kirjaimiksi" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Muunna pieniksi kirjaimiksi" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Etsi edellinen" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." -msgstr "Suodata tiedostot..." +msgid "Find in Files..." +msgstr "Etsi tiedostoista..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Mene funktioon..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Mene riville..." #: editor/plugins/script_text_editor.cpp @@ -5832,40 +5803,35 @@ msgstr "Sävytin" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Tällä luurangolla ei ole luita, luo joitakin Bone2D alisolmuja." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Luuranko..." +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Tee lepoasento (luista)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Aseta luut lepoasentoon" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Luo navigointiverkko" +msgstr "Luo fyysiset luut" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Luuranko..." +msgstr "Luuranko" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Luo C# ratkaisu" +msgstr "Luo fyysinen luuranko" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Pelaa" +msgstr "Toista IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5916,6 +5882,14 @@ msgid "Animation Key Inserted." msgstr "Animaatioavain lisätty." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Sävelkorkeus" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objekteja piirretty" @@ -6000,9 +5974,8 @@ msgid "This operation requires a single selected node." msgstr "Tämä toiminto vaatii yhden valitun solmun." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Näytä tiedot" +msgstr "Lukitse näkymän kierto" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6049,9 +6022,8 @@ msgid "Doppler Enable" msgstr "Doppler käytössä" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Luodaan meshien esikatseluita" +msgstr "Elokuvallinen esikatselu" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6082,6 +6054,11 @@ msgid "Freelook Speed Modifier" msgstr "Liikkumisen nopeussäädin" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Lukitse näkymän kierto" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm-ikkuna" @@ -6184,11 +6161,6 @@ msgid "Tool Scale" msgstr "Skaalaustyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Tartu ruudukkoon" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Kytke liikkuminen päälle/pois" @@ -6198,7 +6170,7 @@ msgstr "Muunna" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Kohdista objekti lattiaan" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6229,9 +6201,8 @@ msgid "4 Viewports" msgstr "4 Näyttöruutua" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Näytä muokkaimet" +msgstr "Muokkaimet" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6307,50 +6278,44 @@ msgid "Post" msgstr "Jälki" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Tallennuspolku on tyhjä!" +msgstr "Sprite on tyhjä!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "Ei voida muuntaa spriteä meshiin animaatioruutuja käyttäen." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Virheellinen geometria, ei voida korvata meshillä." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Muunna muotoon %s" +msgstr "Muunna 2D-meshiksi" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Luo reunoista Mesh" +msgstr "Luo 2D-mesh" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Yksinkertaistus: " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "" +msgstr "Suurrennus (pikseleissä): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Esikatselu" +msgstr "Päivitä esikatselu" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Asetukset" +msgstr "Asetukset:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6398,7 +6363,7 @@ msgstr "Toista" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "Animaatioframet" +msgstr "Animaatioruudut" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -6454,10 +6419,9 @@ msgstr "Välistys:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Erotin:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Tekstuurialue" @@ -6590,9 +6554,13 @@ msgid "Erase Selection" msgstr "Tyhjennä valittu alue" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Virheellinen nimi." +msgstr "Korjaa virheelliset ruudut" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Keskitä valintaan" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6615,7 +6583,6 @@ msgid "Erase TileMap" msgstr "Tyhjennä ruudukko" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" msgstr "Etsi ruutu" @@ -6641,34 +6608,39 @@ msgstr "Poimi ruutu" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" -msgstr "Poista valinta" +msgid "Copy Selection" +msgstr "Siirrä valintaa" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Käännä 0 astetta" +#, fuzzy +msgid "Rotate left" +msgstr "Kääntötila" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Käännä 90 astetta" +#, fuzzy +msgid "Rotate right" +msgstr "Siirry oikealle" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Käännä 180 astetta" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Käännä 270 astetta" +msgid "Flip vertically" +msgstr "" -#: editor/plugins/tile_set_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy +msgid "Clear transform" +msgstr "Muunna" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" -msgstr "Lisää solmut puusta" +msgstr "Lisää tekstuurit ruutuvalikoimaan" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Poista nykyinen kohde" +msgstr "Poista nykyinen tekstuuri ruutuvalikoimasta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6688,15 +6660,16 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Näytä ruutujen nimet (pidä Alt-näppäin pohjassa)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +#, fuzzy +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Poista valittu tekstuuri ja KAIKKI RUUDUT, jotka käyttävät sitä?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Et ole valinnut poistettavaa tekstuuria." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6707,77 +6680,77 @@ msgid "Merge from scene?" msgstr "Yhdistä skenestä?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +#, fuzzy +msgid "%s file(s) were not added because was already on the list." +msgstr " tiedostoa ei lisätty, koska ne ovat jo listalla." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Vedä kahvoja muokataksesi suorakulmiota.\n" +"Napsauta toista ruutua muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" "Hiiren vasen: aseta bitti päälle.\n" -"Hiiren oikea: aseta bitti pois päältä." +"Hiiren oikea: aseta bitti pois päältä.\n" +"Napsauta toista ruutua muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Valitse muokattavana oleva aliruutu." +msgstr "" +"Valitse muokattavana oleva aliruutu.\n" +"Napsauta toista ruutua muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" "Valitse aliruutu, jota käytetään ikonina ja myös virheellisten " -"automaattiruudutusten ilmaisemiseen." +"automaattiruudutusten ilmaisemiseen.\n" +"Napsauta toista ruutua muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Valitse aliruutu muuttaaksesi sen tärkeyttä." +msgstr "" +"Valitse aliruutu muuttaaksesi sen tärkeyttä.\n" +"Napsauta toista ruutua muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Tätä toimintoa ei voi tehdä ilman skeneä." +msgstr "Tätä ominaisuutta ei voi muuttaa." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Ruutuvalikoima" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Kärkipisteet" +msgstr "Vertex" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Fragment" -msgstr "Argumentit:" +msgstr "Fragment" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "OIkea" +msgstr "Valo" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Sävytin" +msgstr "VisualShader" #: editor/project_export.cpp msgid "Runnable" @@ -6796,6 +6769,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "juuri julkaistu" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Vie" + +#: editor/project_export.cpp msgid "Presets" msgstr "Esiasetukset" @@ -6804,6 +6787,11 @@ msgid "Add..." msgstr "Lisää..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Vie projekti" + +#: editor/project_export.cpp msgid "Resources" msgstr "Resurssit" @@ -6866,6 +6854,16 @@ msgid "Export PCK/Zip" msgstr "Vie PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Vientitila:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Vie" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Tälle alustalle ei löytynyt vientipohjia:" @@ -6878,22 +6876,22 @@ msgid "The path does not exist." msgstr "Polkua ei ole olemassa." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "Ole hyvä ja valitse hakemisto jossa ei ole 'project.godot' tiedostoa." +msgstr "" +"Virheellinen '.zip' projektitiedosto; se ei sisällä 'project.godot' " +"tiedostoa." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Ole hyvä ja valitse tyhjä kansio." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Ole hyvä ja valitse 'project.godot' tiedosto." +msgstr "Ole hyvä ja valitse 'project.godot' tai '.zip' tiedosto." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "Hakemisto sisältää jo Godot-projektin." #: editor/project_manager.cpp msgid "Imported Project" @@ -6984,9 +6982,8 @@ msgid "Project Path:" msgstr "Projektin polku:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Projektin polku:" +msgstr "Projektin asennuspolku:" #: editor/project_manager.cpp msgid "Browse" @@ -7106,13 +7103,12 @@ msgid "Mouse Button" msgstr "Hiiren painike" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" "Virheellinen toiminnon nimi. Se ei voi olla tyhjä eikä voi sisältää merkkejä " -"'/', ':', '=', '\\' tai '\"'." +"'/', ':', '=', '\\' tai '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7123,18 +7119,16 @@ msgid "Rename Input Action Event" msgstr "Nimeä syötetoiminto uudelleen" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Vaihda animaation nimi:" +msgstr "Vaihda toiminnon katvealue" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Lisää syötetoiminnon tapahtuma" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Laite" +msgstr "Kaikki laitteet" #: editor/project_settings_editor.cpp msgid "Device" @@ -7181,24 +7175,20 @@ msgid "Wheel Down Button" msgstr "Rulla alas painike" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Rulla ylös painike" +msgstr "Rullan vasen painike" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Oikea painike" +msgstr "Rullan oikea painike" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Painike 6" +msgstr "X-painike 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Painike 6" +msgstr "X-painike 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7340,17 +7330,13 @@ msgstr "Projektin asetukset (project.godot)" msgid "General" msgstr "Yleistä" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Ominaisuus:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Ohita alustalle..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Editori täytyy käynnistää uudelleen, jotta muutokset tulevat voimaan" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7361,13 +7347,12 @@ msgid "Action:" msgstr "Toiminto:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "Toiminto:" +msgstr "Toiminto" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Katvealue" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7477,10 +7462,6 @@ msgstr "Poimi solmu" msgid "Bit %d, val %d." msgstr "Bitti %d, arvo %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Ominaisuudet:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Valitse ominaisuus" @@ -7502,129 +7483,124 @@ msgid "Can't load back converted image using PVRTC tool:" msgstr "Muunnettua kuva ei voitu ladata takaisin PVRTC-työkalulla:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Nimeä uudelleen" +msgstr "Niputettu uudelleennimeäminen" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Etuliite" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Pääte" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Tarttumisen asetukset" +msgstr "Edistyneet asetukset" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Korvike" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Solmun nimi:" +msgstr "Solmun nimi" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Solmun yläsolmun nimi, jos saatavilla" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Etsi solmun tyyppi" +msgstr "Solmun tyyppi" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Nykyinen skene" +msgstr "Nykyisen skene nimi" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nimeä uudelleen" +msgstr "Juurisolmun nimi" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Jaksollinen kokonaislukulaskuri.\n" +"Vertaa laskurin valintoja." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Per taso -laskuri" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Jos asetettu, laskuri alkaa alusta jokaiselle alisolmujen ryhmälle" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Laskurin alkuarvo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Välistys:" +msgstr "Askel" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +#, fuzzy +msgid "Amount by which counter is incremented for each node" +msgstr "Lukumäärä, jolla laskuria kasvatetaan kullekin solmulle" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Täyte" #: editor/rename_dialog.cpp +#, fuzzy msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Pienin määrä numeromerkkejä laskurille.\n" +"Puuttuvat numermerkit täytetään edeltävillä nollilla." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Vaihda lauseketta" +msgstr "Säännölliset lausekkeet" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "Jälkikäsittely" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "Pidä" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase ala_viivoiksi" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "ala_viivat CamelCaseksi" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Aakkoslaji" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Pienet kirjaimet" +msgstr "Pieniksi kirjaimiksi" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Isot kirjaimet" +msgstr "Isoiksi kirjaimiksi" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Palauta oletuslähennystaso" +msgstr "Palauta" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Virhe" @@ -7685,6 +7661,10 @@ msgid "Instance Scene(s)" msgstr "Luo ilmentymä skenestä tai skeneistä" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Luo aliskenen ilmentymä" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Tyhjennä skripti" @@ -7721,6 +7701,12 @@ msgid "Save New Scene As..." msgstr "Tallenna uusi skene nimellä..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Muokattavat alisolmut" @@ -7729,34 +7715,28 @@ msgid "Load As Placeholder" msgstr "Lataa paikanpitäjäksi" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "Paikallinen" +msgstr "Tee paikallinen" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Luo solmu" +msgstr "Luo juurisolmu:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Skene" +msgstr "2D-skene" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Skene" +msgstr "3D-skene" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Poista perintä" +msgstr "Käyttöliittymä" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Leikkaa solmut" +msgstr "Mukautettu solmu" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7799,6 +7779,11 @@ msgid "Clear Inheritance" msgstr "Poista perintä" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Avaa Godotin online-dokumentaatio" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Poista solmu(t)" @@ -7807,17 +7792,17 @@ msgid "Add Child Node" msgstr "Lisää alisolmu" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Luo aliskenen ilmentymä" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Muuta tyyppiä" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Avaa skripti" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Käy järkeen!" +msgstr "Tee skenen juuri" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7868,7 +7853,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Poistetaanko perintä? (Ei voi perua!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Aseta näkyvyys" @@ -7877,12 +7861,11 @@ msgid "Node configuration warning:" msgstr "Solmun konfiguroinnin varoitus:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"Solmulla on liitäntöjä ja ryhmiä\n" +"Solmulla on yhteyksiä ja ryhmiä.\n" "Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp @@ -7902,27 +7885,24 @@ msgstr "" "Napsauta näyttääksesi ryhmätelakan." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Avaa skripti" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "Solmu on lukittu.\n" -"Napsauta lukituksen avaamiseksi" +"Napsauta lukituksen avaamiseksi." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "Alisolmut eivät ole valittavissa.\n" -"Napsauta niiden tekemiseksi valittavaksi" +"Napsauta niiden tekemiseksi valittavaksi." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7933,6 +7913,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer on kiinnitetty.\n" +"Napsauta kiinnityksen poistamiseksi." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7971,15 +7953,19 @@ msgid "N/A" msgstr "Ei mitään" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Avaa skriptieditori" +msgstr "Avaa skripti / Valitse sijainti" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Polku on tyhjä" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Sprite on tyhjä!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Polku ei ole paikallinen" @@ -8068,20 +8054,9 @@ msgid "Bytes:" msgstr "Tavu(j)a:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Varoitus" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Virhe:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Lähde:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funktio:" +#, fuzzy +msgid "Stack Trace" +msgstr "Pinokehykset" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8109,19 +8084,7 @@ msgstr "Tarkastele seuraavaa ilmentymää" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "Pinoa Framet" - -#: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Muuttuja" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Virheet:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Metodipino (jos soveltuva):" +msgstr "Pinokehykset" #: editor/script_editor_debugger.cpp msgid "Profiler" @@ -8212,9 +8175,8 @@ msgid "Change Camera Size" msgstr "Muuta kameran kokoa" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Muuta ilmoittajan kattavuutta" +msgstr "Muuta ilmoittajan AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8241,38 +8203,32 @@ msgid "Change Capsule Shape Height" msgstr "Muuta kapselimuodon korkeutta" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Muuta kapselimuodon sädettä" +msgstr "Muuta sylinterimuodon sädettä" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Muuta kapselimuodon korkeutta" +msgstr "Muuta sylinterimuodon korkeutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Vaihda säteen muodon pituutta" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Muuta valon sädettä" +msgstr "Muuta sylinterin sädettä" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Muuta kapselimuodon korkeutta" +msgstr "Muuta sylinterin korkeutta" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Muuta pallomuodon sädettä" +msgstr "Muuta toruksen sisäsädettä" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Muuta valon sädettä" +msgstr "Muuta toruksen ulkosädettä" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8395,9 +8351,8 @@ msgid "GridMap Delete Selection" msgstr "Poista valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "Poista valinta" +msgstr "Täytä valinta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8480,9 +8435,8 @@ msgid "Clear Selection" msgstr "Tyhjennä valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Koko valinta" +msgstr "Täytä valinta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8553,12 +8507,8 @@ msgid "End of inner exception stack trace" msgstr "Sisemmän poikkeuksen kutsupinon loppu" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Kehitä!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Kehitä navigointiverkko." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8786,14 +8736,12 @@ msgid "Connect Nodes" msgstr "Kytke solmut" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Kytke solmut" +msgstr "Kytke solmun data" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Kytke solmut" +msgstr "Kytke solmun järjestys" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8840,6 +8788,10 @@ msgid "Base Type:" msgstr "Kantatyyppi:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Jäsenet:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Saatavilla olevat solmut:" @@ -8876,9 +8828,8 @@ msgid "Paste Nodes" msgstr "Liitä solmut" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Jäsenet" +msgstr "Muokkaa jäsentä" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8938,17 +8889,17 @@ msgstr "" "tai merkkijono (virhe)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Poista VisualScript solmu" +msgstr "Hae VisualScriptistä" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Get" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +#, fuzzy +msgid "Set %s" +msgstr "Set " #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8999,14 +8950,13 @@ msgstr "" "joukko). Ensimmäisenä luotu toimii ja loput jätetään huomioimatta." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Tämän solmun alaisuudessa ei ole muotoja, joten se ei voi olla " -"vuorovaikutuksessa avaruuden kanssa.\n" +"Tämän solmulla ei ole muotoa, joten se ei voi törmätä tai olla " +"vuorovaikutuksessa muiden objektien kanssa.\n" "Harkitse CollisionShape2D tai CollisionPolygon2D solmun lisäämistä " "alisolmuksi muodon määrittämiseksi." @@ -9042,6 +8992,12 @@ msgstr "" "CollisionShape2D solmulla täytyy olla muoto, jotta se toimisi. Ole hyvä ja " "luo sille muotoresurssi!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9093,6 +9049,12 @@ msgstr "" "Materiaalia partikkeleiden käsittelemiseksi ei ole määritetty, joten mitään " "ei tapahdu." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9115,16 +9077,19 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Tämän Bone2D ketjun pitäisi päättyä Skeleton2D solmuun." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Bone2D solmu toimii vain, jos sen yläsolmu on Skeleton2D tai toinen Bone2D." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Tältä luulta puuttuu kunnollinen lepoasento (REST). Mene Skeleton2D solmuun " +"ja aseta sellainen." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9191,14 +9156,13 @@ msgid "Lighting Meshes: " msgstr "Valaistaan meshejä: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Tällä solmulla ei ole alimuotoja, joten se ei voi olla vuorovaikutuksessa " -"avaruuden kanssa.\n" +"Tällä solmulla ei ole muotoa, joten se ei voi törmätä tai olla " +"vuorovaikutuksessa muiden objektien kanssa.\n" "Harkitse CollisionShape tai CollisionPolygon solmun lisäämistä sen " "alisolmuksi määritelläksesi sen muodon." @@ -9234,6 +9198,19 @@ msgstr "" "CollisionShape solmulle täytyy antaa muoto, jotta se toimisi. Ole hyvä ja " "luo sille muotoresurssi!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" +"Mitään ei näy, koska mesheille ei ole asetettu piirtopyyhkäisyjä (draw " +"passes)." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Piirretään meshejä" @@ -9259,6 +9236,28 @@ msgstr "" "Mitään ei näy, koska mesheille ei ole asetettu piirtopyyhkäisyjä (draw " "passes)." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D toimii ainoastaan ollessaan asetettuna Path2D solmun alle." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D toimii ainoastaan ollessaan asetettuna Path2D solmun alle." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9295,18 +9294,17 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Tämä kappale sivuutetaan, kunnes asetat meshin" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Fysiikkamoottori ylikirjoittaa RigidBody kokomuutokset (hahmo- tai " -"jäykkätilassa) ajon aikana.\n" -"Muuta sen sijaan solmun alla olevia törmäysmuotoja." +"Fysiikkamoottori ylikirjoittaa SoftBody kokomuutokset ajon aikana.\n" +"Muuta kokoa sen sijaan alisolmujen törmäysmuodoissa." #: scene/3d/sprite_3d.cpp msgid "" @@ -9326,44 +9324,40 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "BlendTree solmusta '%' ei löytynyt animaatiota: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Animaatiotyökalut" +msgstr "Animaatio ei löytynyt: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "Virheellinen animaatio solmussa '%s': '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "VIRHE: Virheellinen animaation nimi!" +msgstr "Virheellinen animaatio: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Katkaise yhteys solmusta '%s' solmuun '%s'" +msgstr "Mitään ei ole yhdistetty syötteeseen '%s' solmussa '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "Graafille ei ole asetettu AnimationNode juurisolmua." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Valitse AnimationPlayer skenen puusta muokataksesi animaatioita." +msgstr "Polku animaatiot sisältävään AnimationPlayer solmuun on asettamatta." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"AnimationPlayer solmulle asetettu polku ei johda AnimationPlayer solmuun." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Animaatiopuu ei ole kelvollinen." +msgstr "AnimationPlayer juuri ei ole kelvollinen solmu." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9381,10 +9375,6 @@ msgstr "Huomio!" msgid "Please Confirm..." msgstr "Ole hyvä ja vahvista..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Valitse tämä kansio" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9395,6 +9385,10 @@ msgstr "" "popup*() -funktiota. Ne saadaan näkyville muokatessa, mutta eivät näy " "suoritettaessa." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9446,31 +9440,143 @@ msgid "Invalid font size." msgstr "Virheellinen fonttikoko." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Lisää syöte" +msgstr "Syöte" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Ei mitään>" +msgstr "Ei mitään" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Virheellinen lähde!" +msgstr "Virheellinen lähde sävyttimelle." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Sijoitus funktiolle." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Sijoitus uniformille." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." + +#~ msgid "Zoom:" +#~ msgstr "Lähennä:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Oletko varma, että haluat poistaa kaikki yhteydet kohteesta \"" + +#~ msgid "Class List:" +#~ msgstr "Luokkaluettelo:" + +#~ msgid "Search Classes" +#~ msgstr "Etsi luokkia" + +#~ msgid "Public Methods" +#~ msgstr "Julkiset metodit" + +#~ msgid "Public Methods:" +#~ msgstr "Julkiset metodit:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Käyttöliittymäteeman osat" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Käyttöliittymäteeman osat:" + +#~ msgid "Property: " +#~ msgstr "Ominaisuus: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Merkitse kansio suosikkeihin." + +#~ msgid "Show current scene file." +#~ msgstr "Näytä nykyinen skenetiedosto." + +#~ msgid "Enter tree-view." +#~ msgstr "Mene puunäkymään." + +#~ msgid "Whole words" +#~ msgstr "Kokonaisia sanoja" + +#~ msgid "Match case" +#~ msgstr "Huomioi kirjainkoko" + +#~ msgid "Filter: " +#~ msgstr "Suodatin: " + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Näytä tiedostojärjestelmässä" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Etsi luokkahierarkiasta." + +#~ msgid "Search in files" +#~ msgstr "Hae tiedostoista" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Sisäänrakennettuja skriptejä voi muokata ainoastaan, kun skene, johon ne " +#~ "kuuluvat, on ladattu" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Muunna isoiksi kirjaimiksi" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Muunna pieniksi kirjaimiksi" + +#~ msgid "Snap To Floor" +#~ msgstr "Tartu lattiaan" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Käännä 0 astetta" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Käännä 90 astetta" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Käännä 180 astetta" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Käännä 270 astetta" + +#~ msgid "Warning" +#~ msgstr "Varoitus" + +#~ msgid "Error:" +#~ msgstr "Virhe:" + +#~ msgid "Source:" +#~ msgstr "Lähde:" + +#~ msgid "Function:" +#~ msgstr "Funktio:" + +#~ msgid "Variable" +#~ msgstr "Muuttuja" + +#~ msgid "Errors:" +#~ msgstr "Virheet:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Metodipino (jos soveltuva):" + +#~ msgid "Bake!" +#~ msgstr "Kehitä!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Kehitä navigointiverkko." + +#~ msgid "Get" +#~ msgstr "Get" #~ msgid "Change Scalar Constant" #~ msgstr "Muuta skalaarivakiota" @@ -10038,9 +10144,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Alkaa" -#~ msgid "Filters" -#~ msgstr "Suodattimet" - #~ msgid "Source path is empty." #~ msgstr "Lähdepolku on tyhjä." @@ -10237,15 +10340,9 @@ msgstr "" #~ msgid "8 Bits" #~ msgstr "8 bittiä" -#~ msgid "Pitch" -#~ msgstr "Sävelkorkeus" - #~ msgid "Window" #~ msgstr "Ikkuna" -#~ msgid "Move Right" -#~ msgstr "Siirry oikealle" - #~ msgid "Up" #~ msgstr "Ylös" @@ -10290,9 +10387,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "juuri painettu" -#~ msgid "just released" -#~ msgstr "juuri julkaistu" - #~ msgid "Error creating the signature object." #~ msgstr "Virhe luotaessa allekirjoitusoliota." diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 2f98c3cf99..4e2515081c 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -44,12 +44,20 @@ # Ewan Lehnebach <ewan.lehnebach@gmail.com>, 2018. # Hugo Locurcio <hugo.locurcio@hugo.pro>, 2018. # Grigore Antoniuc <grisa181@gmail.com>, 2018. +# x2f <x.defoy@gmail.com>, 2018. +# LittleWhite <lw.demoscene@googlemail.com>, 2018. +# Brice Lobet <tempo.data@gmail.com>, 2018. +# Florent Wijanto <f_wijanto@hotmail.com>, 2018. +# Olivier gareau <olivier.gareau@protonmail.com>, 2018. +# Rémi Verschelde <akien@godotengine.org>, 2018. +# Rémi Bintein <reminus5@hotmail.fr>, 2018. +# Sylvain Corsini <sylvain.corsini@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-08-05 00:41+0000\n" -"Last-Translator: Grigore Antoniuc <grisa181@gmail.com>\n" +"PO-Revision-Date: 2018-11-29 13:23+0000\n" +"Last-Translator: Sylvain Corsini <sylvain.corsini@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -57,7 +65,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 3.1.1\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -66,41 +74,38 @@ msgstr "" "Argument de type incorrect dans convert(), utilisez les constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Pas assez d'octets pour les octets de décodage, ou format non valide." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Entrée non valide %i (non passée) dans l’expression" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self ne peut être utilisé car l'instance est null (non fournie)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Nom de propriété invalide '%s' dans le nÅ“ud %s." +msgstr "Opérandes invalides pour les opérateurs %s, %s et %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Nom de propriété invalide '%s' dans le nÅ“ud %s." +msgstr "Index de type %s invalide pour le type de base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Index nommé %s invalide pour le type de base %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argument invalide de type: " +msgstr "Arguments invalides pour construire '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Sur appel à '%s' :" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -109,27 +114,23 @@ msgstr "Libérer" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Équilibré" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Miroir X" +msgstr "Miroir" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Insérer une clé" +msgstr "Insérer la clé ici" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Dupliquer la sélection" +msgstr "Dupliquer les clé(s) sélectionnée(s)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Supprimer la selection" +msgstr "Supprimer la(es) clé(s) sélectionnée(s)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -141,65 +142,59 @@ msgstr "Anim Supprimer Clés" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Animation Changer l'heure de l'image clé" +msgstr "Anim: Change Temps de l'Image Clé" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "Animation Changer la transition" +msgstr "Anim: Change Transition" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Animation Changer la transformation" +msgstr "Anim: Change Transformation" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Animation Changer la valeur de l'image clé" +msgstr "Anim: Change Valeur de l'Image Clé" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Animation Changer l'appel" +msgstr "Anim: Change l'Appel" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Propriété :" +msgstr "Piste de propriété" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Type de transformation" +msgstr "Piste de transformation 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Piste de la méthode d'appel" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Piste de la courbe de Bézier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Piste de lecture audio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Arrêter la lecture de l'animation. (S)" +msgstr "Piste de lecture d'animation" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Animation Ajouter une piste" +msgstr "Ajouter une piste" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Longueur de l'animation (en secondes)." +msgstr "Durée de l'animation (en secondes)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Zoom de l'animation." +msgstr "Bouclage de l'animation" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -207,42 +202,36 @@ msgid "Functions:" msgstr "Fonctions :" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Écouteur audio" +msgstr "Clips audio :" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Séquences" +msgstr "Clips d'animation :" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Basculer en mode sans distraction." +msgstr "Activer/Désactiver cette piste." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Mode de mise à jour (Comment cette propriété est définie)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "NÅ“ud d'animation" +msgstr "Mode d'interpolation" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Mode bouclé (fin interpolée avec début en boucle)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Supprimer la piste sélectionnée." +msgstr "Supprimer la piste." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Durée du fondu (s) :" +msgstr "Temps (s) : " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -257,13 +246,12 @@ msgid "Trigger" msgstr "Déclencheur" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Fonctionnalités" +msgstr "Capturer" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Plus proche" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -272,16 +260,15 @@ msgstr "Linéaire" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cubique" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Changer l'interpolation de la boucle d'animation" +msgstr "Limiter l'interpolation de la boucle" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Enrouler l'interpolation de la boucle" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -289,14 +276,12 @@ msgid "Insert Key" msgstr "Insérer une clé" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Dupliquer le(s) nÅ“ud(s)" +msgstr "Dupliquer clé(s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Supprimer nÅ“ud(s)" +msgstr "Supprimer clé(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -327,6 +312,7 @@ msgstr "Insérer une animation" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" +"AnimationPlayer ne peut s'animer lui-même, seulement les autres lecteurs." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -343,6 +329,8 @@ msgstr "Animation Inserer une clé" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"Les pistes de transformation ne s'appliquent qu'aux nÅ“uds basés dans " +"l'espace." #: editor/animation_track_editor.cpp msgid "" @@ -351,42 +339,47 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Les pistes audio ne peuvent pointer que sur les nÅ“uds du type :\n" +"- AudioStreamPlayer\n" +"- AudioStreamPlayer2D\n" +"- AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." msgstr "" +"Les pistes d'animation ne peuvent pointer que sur les nÅ“uds AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Un lecteur d'animation ne peut s'animer lui-même, seulement les autres " +"lecteurs." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Impossible d'ajouter une nouvelle piste sans racine" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Chemin de piste invalide, ne peut ajouter une clé." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "La piste n'est pas du type Spatial, ne peut insérer de clé" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Chemin de la piste invalide, ne peut ajouter une méthode clé." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet introuvable dans le script: " +msgstr "Méthode introuvable dans l'objet : " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Anim Déplacer Clés" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" msgstr "Le presse-papiers est vide !" @@ -398,24 +391,26 @@ msgstr "Anim Mettre à l’Échelle les Clés" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Cette option ne fonctionne pas pour l'édition de Bézier, comme il ne s'agit " +"que d'une seule piste." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." msgstr "" +"Afficher seulement les pistes provenant des nÅ“uds sélectionnés dans " +"l'arborescence." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Grouper les pistes par nÅ“uds ou les afficher dans une liste simple." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Aligner (pixels) :" +msgstr "Alignements (s) : " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "L'arbre d'animations est valide." +msgstr "Valeur du pas d'animation." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -427,19 +422,16 @@ msgid "Edit" msgstr "Édition" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimationTree" +msgstr "Propriétés de l'animation." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Copier paramètres" +msgstr "Copier pistes" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Coller les paramètres" +msgstr "Coller pistes" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -449,8 +441,7 @@ msgstr "Mettre à l'échelle la sélection" msgid "Scale From Cursor" msgstr "Mettre à l’Échelle Avec Curseur" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Dupliquer la sélection" @@ -459,16 +450,15 @@ msgid "Duplicate Transposed" msgstr "Dupliquer Transposé" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Supprimer la selection" +msgstr "Supprimer la sélection" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "Aller à l'étape suivante" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "Aller à l'étape précédente" #: editor/animation_track_editor.cpp @@ -481,11 +471,11 @@ msgstr "Nettoyer l'animation" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Choisir le nÅ“ud à animer :" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Utiliser les courbes de Bézier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -533,7 +523,7 @@ msgstr "Ratio d'échelle :" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Sélectionner les pistes à copier :" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -571,11 +561,11 @@ msgstr "Pas de correspondances" msgid "Replaced %d occurrence(s)." msgstr "%d occurrence(s) remplacée(s)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Sensible à la casse" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Mots entiers" @@ -604,16 +594,15 @@ msgid "Reset Zoom" msgstr "Réinitialiser le zoom" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Avertissements" +msgstr "Avertissements :" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom (%) :" +msgid "Font Size:" +msgstr "Taille de la police source :" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Ligne :" @@ -646,6 +635,7 @@ msgstr "Ajouter" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -702,9 +692,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Déconnecter « %s » de « %s »" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Déconnecter « %s » de « %s »" +msgstr "Tout déconnecter au signal : '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -716,19 +705,16 @@ msgid "Disconnect" msgstr "Déconnecter" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Connecter un signal :" +msgstr "Signal de connexion : " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Modifier les connexions" +msgstr "Modifier les connexions : " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Voulez-vous vraiment lancer plus d'un projet à la fois ?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Voulez-vous vraiment supprimer toutes les connexions de ce signal ?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -736,22 +722,19 @@ msgstr "Signaux" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Voulez-vous vraiment supprimer toutes les connexions de ce signal ?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Déconnecter" +msgstr "Tout déconnecter" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Édition" +msgstr "Édition..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Méthodes :" +msgstr "Aller à la méthode :" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -782,17 +765,14 @@ msgstr "Récents :" msgid "Search:" msgstr "Rechercher :" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Correspondances :" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Description :" @@ -853,9 +833,10 @@ msgid "Search Replacement Resource:" msgstr "Recherche ressource de remplacement :" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -889,7 +870,7 @@ msgid "Error loading:" msgstr "Erreur au chargement :" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "La scène n'a pas pu être chargée à cause de dépendances manquantes :" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -948,14 +929,6 @@ msgstr "Modifier valeur du dictionnaire" msgid "Thanks from the Godot community!" msgstr "La communauté Godot vous dit merci !" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Contributeurs de Godot Engine" @@ -1131,8 +1104,7 @@ msgid "Bus options" msgstr "Options de tranport" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliquer" @@ -1305,8 +1277,9 @@ msgstr "Chemin :" msgid "Node Name:" msgstr "Nom de nÅ“ud :" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nom" @@ -1376,25 +1349,28 @@ msgid "Template file not found:" msgstr "Fichier modèle introuvable :" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Sélectionner le dossier courant" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Le fichier existe, l'écraser ?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Sélectionner le dossier courant" +msgid "Select This Folder" +msgstr "Sélectionner ce dossier" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Copier le chemin" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Montrer dans le gestionnaire de fichiers" +msgid "Open in File Manager" +msgstr "Ouvrir dans le gestionnaire de fichiers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "Montrer dans le gestionnaire de fichiers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1430,7 +1406,8 @@ msgid "Open a File or Directory" msgstr "Ouvrir un fichier ou un répertoire" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Enregistrer" @@ -1488,8 +1465,7 @@ msgstr "Répertoires et fichiers :" msgid "Preview:" msgstr "Aperçu :" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Fichier :" @@ -1505,24 +1481,11 @@ msgstr "Scanner les sources" msgid "(Re)Importing Assets" msgstr "Ré-importation des assets" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Chercher dans l'aide" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Liste des classes :" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Chercher dans les classes" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Dessus" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Classe :" @@ -1539,28 +1502,28 @@ msgid "Brief Description:" msgstr "Brève description :" #: editor/editor_help.cpp -msgid "Members" -msgstr "Membres" +msgid "Properties" +msgstr "Propriétés" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Membres :" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Propriétés :" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Méthodes Publiques" +msgid "Methods" +msgstr "Méthodes :" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Méthodes publiques :" +msgid "Methods:" +msgstr "Méthodes :" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Items de thème GUI" +msgid "Theme Properties" +msgstr "Propriétés du thème" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Items de thème GUI :" +msgid "Theme Properties:" +msgstr "Propriétés du thème :" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1587,8 +1550,12 @@ msgid "Constants:" msgstr "Constantes :" #: editor/editor_help.cpp -msgid "Description" -msgstr "Description" +msgid "Class Description" +msgstr "Description de la classe" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "Description de la classe :" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1605,11 +1572,11 @@ msgstr "" "demander un[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Propriétés" +msgid "Property Descriptions" +msgstr "Description des propriétés :" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "Description des propriétés :" #: editor/editor_help.cpp @@ -1621,11 +1588,11 @@ msgstr "" "[color=$color][url=$url]en créant[/url][/color] une !" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Méthodes :" +msgid "Method Descriptions" +msgstr "Description de la méthode :" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "Description de la méthode :" #: editor/editor_help.cpp @@ -1636,18 +1603,58 @@ msgstr "" "Il n'y a pas de description disponible pour cette méthode. Aidez-nous en " "[color=$color][url=$url]en créant[/url][/color] une !" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Chercher dans l'aide" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Tout afficher" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Classes seulement" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Méthodes seulement" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Signaux seulement" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Constantes seulement" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Propriétés seulement" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Propriétés du thème seulement" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Type de membre" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "Classe :" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Propriété :" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Définir" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Définir plusieurs :" #: editor/editor_log.cpp msgid "Output:" @@ -1675,6 +1682,11 @@ msgstr "L'export du projet a échoué avec le code erreur %d." msgid "Error saving resource!" msgstr "Erreur d'enregistrement de la ressource !" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Enregistrer la ressource sous…" @@ -1693,7 +1705,7 @@ msgstr "Erreur lors de l'enregistrement." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "Impossible d'ouvrir '%s'. Le fichier a pu être déplacé ou supprimé." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1729,12 +1741,22 @@ msgstr "Cette opération ne peut être réalisée sans une arborescence racine." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Impossible d'enregistrer la scène. Les dépendances (instances ou héritage) " "n'ont sans doute pas pu être satisfaites." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Impossible de ré-écrire une scène encore ouverte !" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Impossible de charger la MeshLibrary pour fusion !" @@ -2003,6 +2025,14 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Impossible de charger le script de l’extension depuis le chemin : '%s' Il " +"semble y avoir une erreur dans le code, merci de vérifier la syntaxe." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Impossible de charger le script de l'addon depuis le chemin : '%s' Le type " @@ -2053,15 +2083,18 @@ msgstr "Supprimer la disposition" msgid "Default" msgstr "Par défaut" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Montrer dans le système de fichiers" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Lancer la scène" +msgstr "Jouer Cette Scène" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Fermer les autres onglets" +msgstr "Fermer l'onglet" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2136,7 +2169,7 @@ msgid "Save Scene" msgstr "Enregistrer la scène" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Enregistrer toutes les scènes" #: editor/editor_node.cpp @@ -2165,7 +2198,7 @@ msgid "Undo" msgstr "Annuler" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refaire" @@ -2194,15 +2227,15 @@ msgid "Tools" msgstr "Outils" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Ouvrir gestionnaire de projets ?" +msgstr "Ouvrir le dossier de données du projets" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Quitter vers la liste des projets" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Débogage" @@ -2312,18 +2345,16 @@ msgid "Toggle Fullscreen" msgstr "Activer/Désactiver le plein écran" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Paramètres de l'éditeur" +msgstr "Ouvrir le dossier de données/paramètres de l'éditeur" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Ouvrir le dossier de données de l'éditeur" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Paramètres de l'éditeur" +msgstr "Ouvrir le dossier des paramètres de l'éditeur" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2333,10 +2364,6 @@ msgstr "Gérer les modèles d'exportation" msgid "Help" msgstr "Aide" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Classes" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2407,13 +2434,12 @@ msgstr "Jouer une scène personnalisée" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Changer le pilote vidéo nécessite le redémarrage de l'éditeur." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Enregistrer et ré-importer" +msgstr "Enregistrer et Redémarrer" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2431,27 +2457,26 @@ msgstr "Repeindre quand modifié" msgid "Disable Update Spinner" msgstr "Désactiver l'indicateur d'activité" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspecteur" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importer" #: editor/editor_node.cpp -msgid "Node" -msgstr "NÅ“ud" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Système de fichiers" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspecteur" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "NÅ“ud" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Développer tout" +msgstr "Développez le panneau inférieur" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2530,9 +2555,8 @@ msgid "Thumbnail..." msgstr "Aperçu…" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Modifier le polygone" +msgstr "Modifier le Plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2556,15 +2580,13 @@ msgid "Status:" msgstr "État :" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Édition" +msgstr "Éditer :" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Démarrer !" +msgstr "Démarrer" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2586,7 +2608,7 @@ msgstr "% d'image" msgid "Physics Frame %" msgstr "Frame physique %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Temps :" @@ -2610,27 +2632,42 @@ msgstr "Temps" msgid "Calls" msgstr "Appels" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Activé" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Calque" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, valeur %d." +msgstr "Bit %d, valeur %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Vide]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Assigner" +msgstr "Assigner..." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Impossible de créer un ViewportTexture sur des ressources enregistrées comme " +"fichier.\n" +"La ressource a besoin d'appartenir à une scène." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2649,10 +2686,6 @@ msgstr "Nouveau %s" msgid "Make Unique" msgstr "Rendre unique" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Montrer dans le système de fichiers" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2661,7 +2694,8 @@ msgstr "Montrer dans le système de fichiers" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Coller" @@ -2674,36 +2708,32 @@ msgstr "Convertir en %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir l'éditeur" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "Le nÅ“ud sélectionné n'est pas un Viewport !" +msgstr "Le nÅ“ud sélectionné n'est pas une fenêtre d'affichage !" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Taille des cellules :" +msgstr "Taille : " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Page : " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Nouveau nom :" +msgstr "Nouvelle Clé :" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Nouveau nom :" +msgstr "Nouvelle Valeur :" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Ajouter une paire clé/valeur" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2796,9 +2826,8 @@ msgid "Can't open export templates zip." msgstr "Impossible d'ouvrir le ZIP de modèles d'exportation." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Format de version.txt invalide dans les modèles." +msgstr "Format de version.txt invalide dans les modèles : %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2863,6 +2892,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"L'installation des modèles à échoué. Les archives des modèles posant " +"problème peuvent être trouvées ici : '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2943,9 +2974,10 @@ msgid "Download Templates" msgstr "Télécharger les modèles" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Sélectionner un miroir depuis la liste : " +msgstr "" +"Sélectionner un miroir depuis la liste : (Maj+Click : Ouvrir dans le " +"navigateur)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2954,20 +2986,22 @@ msgstr "" "sera pas sauvé !" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Favoris :" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Impossible d'accédez à '%s' car celui-ci n'existe pas dans le système de " "fichiers !" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Afficher les éléments sous forme de grille de vignettes" +msgstr "Afficher les éléments sous forme de grille de vignettes." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Afficher les éléments sous forme de liste" +msgstr "Afficher les éléments sous forme de liste." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2995,7 +3029,7 @@ msgstr "Erreur à la duplication :" msgid "Unable to update dependencies:" msgstr "Impossible de mettre à jour les dépendences :" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Aucun nom renseigné" @@ -3032,22 +3066,6 @@ msgid "Duplicating folder:" msgstr "Duplication du dossier :" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Développer tout" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Réduire tout" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renommer..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Déplacer vers…" - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Ouvrir une(des) scène(s)" @@ -3056,6 +3074,14 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Ajouter aux favoris" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Supprimer des favoris" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Modifier les dépendances…" @@ -3063,19 +3089,33 @@ msgstr "Modifier les dépendances…" msgid "View Owners..." msgstr "Voir les propriétaires…" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renommer..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Dupliquer…" #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Déplacer vers…" + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Nouveau script" +msgstr "Nouveau Script..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Enregistrer la ressource sous…" +msgstr "Nouvelle Ressource…" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "Développer tout" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Réduire tout" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3098,13 +3138,12 @@ msgstr "Analyser à nouveau le système de fichiers" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Basculer l'état favori du dossier" +msgid "Toggle split mode" +msgstr "Basculer le mode" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Sélectionner la sous-tuile en cours d'édition." +msgid "Search files" +msgstr "Rechercher des fichiers" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -3113,15 +3152,6 @@ msgstr "" "sélectionné." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Chercher dans les classes" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3129,51 +3159,38 @@ msgstr "" "Analyse des fichiers en cours,\n" "Veuillez patienter..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Déplacer" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Un dossier avec le nom spécifié existe déjà dans ce chemin." +msgstr "" +"Il existe déjà un fichier ou un dossier ayant le même nom à cet emplacement." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Écraser" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "Créer un script" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Trouver une tuile" +msgid "Find in Files" +msgstr "Trouver dans les fichiers" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Trouver" +msgid "Find:" +msgstr "Trouver :" #: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "Mots entiers" +msgid "Folder:" +msgstr "Dossier :" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Sensible à la casse" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Filtre:" +msgid "Filters:" +msgstr "Filtres :" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3189,52 +3206,48 @@ msgid "Cancel" msgstr "Annuler" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Trouver : " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Remplacer" +msgstr "Remplacer : " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Remplacer tout" +msgstr "Remplacer tout (pas de retour en arrière)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Enregistrement…" +msgstr "Recherche…" #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Chercher du texte" +msgstr "Recherche terminée" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ERREUR : Le nom de l'animation existe déjà !" +msgstr "Le nom du groupe existe déjà ." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Nom invalide." +msgstr "Nom de groupe invalide." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Groupes" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Groupes de nÅ“uds" +msgstr "Noeuds non groupés" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Filtrer les noeuds" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Groupes de nÅ“uds" +msgstr "NÅ“uds groupés" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3245,9 +3258,8 @@ msgid "Remove from Group" msgstr "Supprimer du groupe" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Groupes d'images" +msgstr "Gérer les groupes" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3355,17 +3367,12 @@ msgstr "Ré-importer" msgid "Failed to load resource." msgstr "Impossible de charger la ressource." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "OK" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "Développer toutes les propriétés" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "Réduire toutes les propriétés" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3382,9 +3389,8 @@ msgid "Paste Params" msgstr "Coller les paramètres" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Le presse-papiers des ressources est vide !" +msgstr "Modifier le Presse-papiers de la ressource" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3427,9 +3433,8 @@ msgid "Object properties." msgstr "Propriétés de l'objet." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtrer les noeuds" +msgstr "Filtrer les propriétés" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3444,37 +3449,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Sélectionnez un nÅ“ud pour editer des signaux et des groupes." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Modifier le polygone" +msgstr "Modifier un plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Créer la solution C#" +msgstr "Créer un Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Liste d'extensions :" +msgstr "Nom du plugin :" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Sous-dossier :" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Langage" +msgstr "Langage :" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Script valide" +msgstr "Nom du script :" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Activer maintenant ?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3533,15 +3533,16 @@ msgstr "Ajouter une animation" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Charger" +msgstr "Chargement..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Ce type de nÅ“ud ne peut pas être utilisé. Seuls les nÅ“uds racine sont " +"autorisés." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3551,67 +3552,67 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree est inactif.\n" +"Activez le pour permettre la lecture, vérifier les avertissements des nÅ“uds " +"en cas d'échec de l'activation." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Définir la position de mélange dans l'espace" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." msgstr "" +"Sélectionner et déplacer les points, créer des points avec le bouton droit " +"de la souris." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Supprimer les points" +msgstr "Créer des points." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "Bouton droit : effacer un point." +msgstr "Effacer des points." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Déplacer le point" +msgstr "Point" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "NÅ“ud d'animation" +msgstr "Ouvrir le NÅ“ud Animation" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "L'action « %s » existe déjà !" +msgstr "Le triangle existe déjà " #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D n'appartient pas à un noeud AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Il n'existe pas de triangles, donc aucun mélange ne peut avoir lieu." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Créer des triangles en reliant les points." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "Analyse de %d triangles :" +msgstr "Effacer les points et les triangles." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" msgstr "" +"Générer des triangles de mélange automatiquement (au lieu de manuellement)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3619,6 +3620,11 @@ msgstr "" msgid "Snap" msgstr "Aligner" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Mélange :" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3626,20 +3632,26 @@ msgstr "Editer les filtres" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Un nÅ“ud de sortie ne peut être ajouté à l'arborescence du mélange." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Impossible de se connecter, le port peut être en cours d'utilisation ou la " +"connexion peut être invalide." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Aucun lecteur d'animation défini, dès lors impossible de retrouver les noms " +"des pistes." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Le chemin défini pour le lecteur est invalide, dès lors impossible de " +"récupérer les noms des pistes." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3647,23 +3659,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Le lecteur d'animation n'a pas un chemin de nÅ“ud racine valide, dès lors " +"impossible de récupérer les noms des pistes." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Ajouter un nÅ“ud" +msgstr "Ajouter un nÅ“ud..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Editer les filtres" +msgstr "Éditer Pistes Filtrées :" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Enfants modifiables" +msgstr "Activer le filtrage" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3691,14 +3702,12 @@ msgid "Remove Animation" msgstr "Supprimer l'animation" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ERREUR : Nom de l'animation invalide !" +msgstr "Nom d'animation invalide !" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ERREUR : Le nom de l'animation existe déjà !" +msgstr "Ce nom d'animation existe déjà !" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3722,14 +3731,12 @@ msgid "Duplicate Animation" msgstr "Dupliquer l'animation" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ERREUR : Aucune animation à copier !" +msgstr "Aucune animation à copier !" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ERREUR : Pas de ressource de type animation dans le presse-papiers !" +msgstr "Aucune ressource d'animation dans le presse-papiers !" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3740,9 +3747,8 @@ msgid "Paste Animation" msgstr "Coller l'animation" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ERREUR : Pas d'animation à modifier !" +msgstr "Pas d'animation à modifier !" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3787,14 +3793,12 @@ msgid "New" msgstr "Nouveau" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Modifier les connexions..." +msgstr "Modification Transitions..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Ouvrir dans l'éditeur" +msgstr "Ouvrir dans l'Inspecteur" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3853,9 +3857,8 @@ msgid "Include Gizmos (3D)" msgstr "Inclure les Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Coller l'animation" +msgstr "Épingler AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3886,34 +3889,33 @@ msgid "Cross-Animation Blend Times" msgstr "Temps de mélange des entre animations" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "Fin(s)" +msgstr "Fin" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Immédiat" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Synchroniser" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "À la fin" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Déplacement" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." msgstr "" +"Les nÅ“uds de départ et de fin sont nécessaire pour une sous-transition." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Pas dans le chemin de la ressource." +msgstr "Aucune ressource de lecture définie sur le chemin : %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3921,34 +3923,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Sélectionnez et déplacez les nÅ“uds.\n" +"Bouton droit pour ajouter de nouveaux nÅ“uds\n" +"Majuscule+Bouton gauche pour créer des connexions." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Créer un nouveau %s" +msgstr "Créer de nouveaux nÅ“uds." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Connecter nÅ“ud" +msgstr "Connecter des nÅ“uds." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Supprimer la piste sélectionnée." +msgstr "Supprimer le nÅ“ud sélectionné ou la transition" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Activer/désactiver cette animation au (re) démarrage ou lors du retour à " +"zéro." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Définir l'animation de fin. Ceci est utile pour les sous-transitions." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Transition" +msgstr "Transition : " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4002,10 +4005,6 @@ msgid "Amount:" msgstr "Quantité :" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Mélange :" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Mélange 0 :" @@ -4146,14 +4145,12 @@ msgid "Asset Download Error:" msgstr "Erreur dans le téléchargement d'une ressource:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Téléchargement en cours" +msgstr "Téléchargement (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Téléchargement en cours" +msgstr "Téléchargement..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4180,14 +4177,12 @@ msgid "Download for this asset is already in progress!" msgstr "Le téléchargement de cette ressource est déjà en cours!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "premier" +msgstr "Premier" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Onglet precedent" +msgstr "Précédent" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4195,7 +4190,7 @@ msgstr "Suivant" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Dernier" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4323,29 +4318,29 @@ msgid "Create new horizontal and vertical guides" msgstr "Créer de nouveaux guides horizontaux et verticaux" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" msgstr "Déplacer le pivot" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Modifier le CanvasItem" +msgstr "Pivoter l'élément de canevas" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "Déplacer l'action" +msgstr "Déplacer l'ancre" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Modifier le CanvasItem" +msgstr "Redimensionner l'élément de canevas" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Pivoter l'élément de canevas" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "Modifier le CanvasItem" +msgstr "Déplacer l'élément de canevas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4364,19 +4359,16 @@ msgid "Paste Pose" msgstr "Coller la pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "Dézoomer" +msgstr "Éloigner" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "Réinitialiser le zoom" +msgstr "Réinitialiser le facteur d'agrandissement" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Zoomer" +msgstr "Rapprocher" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4409,6 +4401,10 @@ msgid "Rotate Mode" msgstr "Mode rotation" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Mode de mise à l'échelle" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4426,18 +4422,16 @@ msgid "Pan Mode" msgstr "Mode navigation" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Activer/Désactiver le magnétisme de grille" +msgstr "Activer/Désactiver le magnétisme." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "Aligner sur la grille" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" -msgstr "Options du magnétisme" +msgstr "Options de magnétisme" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" @@ -4477,9 +4471,8 @@ msgid "Snap to node sides" msgstr "Accrocher aux flancs du nÅ“ud" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "Accrocher à l'ancre du nÅ“ud" +msgstr "Accrocher au centre du nÅ“ud" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4508,6 +4501,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Rendre la sélection des enfants de l'objet de nouveau possible." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Squelette" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Afficher les os" @@ -4521,12 +4519,11 @@ msgstr "Effacer la chaîne IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Créer des os personnalisés à partir d'un ou de plusieurs nÅ“uds" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Effacer les os" +msgstr "Effacer les os personnalisés" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4556,7 +4553,11 @@ msgstr "Afficher l'origine" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Viewport" -msgstr "Afficher le Viewport" +msgstr "Montrer La fenêtre d'affichage" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Montrer le groupe et verrouiller les icônes" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4571,9 +4572,8 @@ msgid "Layout" msgstr "Disposition sur l'écran" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Insérer des clefs" +msgstr "Insérer les clefs." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4638,9 +4638,8 @@ msgid "Set Handle" msgstr "Définir la poignée" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "Particules" +msgstr "ParticulesCPU" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -5004,9 +5003,9 @@ msgid "Create Navigation Polygon" msgstr "Créer Polygone de Navigation" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Générer AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Générer Rect de Visibilité" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5035,6 +5034,11 @@ msgstr "Effacer Masque d'Émission" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Convertir en ParticulesCPU" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Particules" @@ -5104,13 +5108,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Un matériel processeur de type 'ParticlesMaterial' est requis." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "Générer AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Convertir en majuscule" +msgid "Generate AABB" +msgstr "Générer AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5198,12 +5201,12 @@ msgstr "Options" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Refléter les angles de poignée" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Refléter les longeurs de poignée" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5238,56 +5241,50 @@ msgid "Remove In-Control Point" msgstr "Supprimer point In-Control" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Déplacer le point" +msgstr "Déplacer la jointure" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" msgstr "" +"La propriété squelette du Polygon2D ne pointe pas vers un noeud Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Afficher les os" +msgstr "Synchroniser les os" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Créer une carte UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Créer un polygone" +msgstr "Créer un polygone & UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Point de séparation avec lui-même." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "Le fractionnement ne peut pas former une arête existante." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "L'action « %s » existe déjà !" +msgstr "Le fractionnement existe déjà ." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Ajouter un point" +msgstr "Ajouter un fractionnement" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Chemin invalide !" +msgstr "Fractionnement invalide : " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Supprimer point" +msgstr "Supprimer le fractionnement" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5295,7 +5292,7 @@ msgstr "Transformer la carte UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Poids de la peinture de l'os" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5303,25 +5300,21 @@ msgstr "Éditeur UV de polygones 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Modifier le polygone" +msgstr "Polygone" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Diviser le chemin" +msgstr "Fractionnements" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Créer les os" +msgstr "Os" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Créer un polygone" @@ -5355,24 +5348,23 @@ msgstr "Mettre à l'échelle le polygone" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Relier deux points pour faire une scission" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Sélectionnez d'abord un élément à configurer !" +msgstr "Sélectionnez un fractionnement à effacer" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Poids de la peinture avec intensité spécifiée" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Poids non peints avec intensité spécifiée" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "Rayon :" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5387,9 +5379,8 @@ msgid "Clear UV" msgstr "Effacer l'UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Paramètres GridMap" +msgstr "Paramètres de la grille" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5400,34 +5391,28 @@ msgid "Grid" msgstr "Grille" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Configurer la grille" +msgstr "Configurer la grille :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Décalage de la grille :" +msgstr "Décalage X de la grille :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Décalage de la grille :" +msgstr "Décalage Y de la grille :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Pas de la grille :" +msgstr "Pas X de la grille :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Pas de la grille :" +msgstr "Pas Y de la grille :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Mettre à l'échelle le polygone" +msgstr "Synchroniser les os avec le polygone" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5455,22 +5440,22 @@ msgid "Paste Resource" msgstr "Coller la ressource" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Ouvrir dans l'éditeur" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instance :" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Type :" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Ouvrir dans l'éditeur" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Charger une ressource" @@ -5481,12 +5466,11 @@ msgstr "ResourcePreloader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree n'a pas de chemin défini vers un AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "L'arbre d'animations est invalide." +msgstr "Le chemin vers AnimationPlayer est invalide" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5497,19 +5481,20 @@ msgid "Close and save changes?" msgstr "Quitter et sauvegarder les modifications ?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Erreur lors du déplacement de fichier :\n" +msgstr "Erreur lors de l'écriture du fichier texte :" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Erreur de chargement de fichier." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Impossible de charger l'image" +msgstr "Erreur de chargement de fichier." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Erreur d'enregistrement du TileSet !" +msgstr "Erreur lors de l'enregistrement du fichier !" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5528,17 +5513,14 @@ msgid "Error importing" msgstr "Erreur d'importation" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Nouveau dossier..." +msgstr "Nouveau fichier texte..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" -msgstr "Ouvrir un fichier" +msgstr "Ouvrir le fichier" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." msgstr "Enregistrer sous…" @@ -5556,7 +5538,7 @@ msgstr " Référence de classe" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Basculer le tri alphabétique de la liste de méthodes." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5587,9 +5569,8 @@ msgid "File" msgstr "Fichier" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Voir Fichiers" +msgstr "Nouveau fichier texte" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5604,11 +5585,8 @@ msgid "Copy Script Path" msgstr "Copier le chemin du script" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Afficher dans le système de fichiers" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Précédent dans l'historique" #: editor/plugins/script_editor_plugin.cpp @@ -5679,7 +5657,7 @@ msgid "Keep Debugger Open" msgstr "Garder le débogueur ouvert" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "Déboguer avec un éditeur externe" #: editor/plugins/script_editor_plugin.cpp @@ -5687,10 +5665,6 @@ msgid "Open Godot online documentation" msgstr "Ouvrir la documentation Godot en ligne" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Cherche dans la hiérarchie des classes." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Chercher dans la documentation de référence." @@ -5727,39 +5701,28 @@ msgid "Debugger" msgstr "Débogueur" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Chercher dans l'aide" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Chercher dans les classes" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Les scripts intégrés ne peuvent être modifiés uniquement lorsque la scène à " -"qui ils appartiennent est ouverte" +msgid "Search Results" +msgstr "Résultats de recherche" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Ligne :" +msgstr "Ligne" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignorer)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Aller à la fonction" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Seules les ressources du système de fichiers peuvent être abaissées." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Compléter le symbole" +msgstr "Symbole de recherche" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5783,11 +5746,11 @@ msgstr "Capitaliser" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "Surligneur de syntaxe" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Standard" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5840,11 +5803,11 @@ msgid "Trim Trailing Whitespace" msgstr "Supprimer les espaces de fin de ligne" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "Convertir indentations en espaces" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "Convertir les indentations en tabulations" #: editor/plugins/script_text_editor.cpp @@ -5861,36 +5824,27 @@ msgid "Remove All Breakpoints" msgstr "Supprimer tous les points d'arrêt" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "Aller au point d'arrêt suivant" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "Aller au point d'arrêt précédent" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Convertir en majuscule" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Convertir en minuscule" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Trouver le précédent" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Filtrer Fichiers..." +msgid "Find in Files..." +msgstr "Trouver dans les fichiers..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Aller à la fonction…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "Aller à la ligne…" #: editor/plugins/script_text_editor.cpp @@ -5903,40 +5857,35 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Ce squelette n'a pas d'os, créez des nÅ“uds Bone2D enfants." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Squelette…" +msgstr "Squelette 2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Créer une position de repos (d'après les os)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Placer les os en position de repos" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Créer un maillage de navigation" +msgstr "Créer des os physiques" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Squelette…" +msgstr "Squelette" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Créer la solution C#" +msgstr "Créer un squelette physique" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Jouer" +msgstr "Jouer IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5987,6 +5936,14 @@ msgid "Animation Key Inserted." msgstr "Clé d'animation insérée." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Hauteur" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objets dessinés" @@ -6073,9 +6030,8 @@ msgstr "" "sélectionné." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Voir information" +msgstr "Verrouiller la rotation de la vue" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6122,9 +6078,8 @@ msgid "Doppler Enable" msgstr "Activer Doppler" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Création des prévisualisations des maillages" +msgstr "Aperçu cinématographique" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6155,6 +6110,10 @@ msgid "Freelook Speed Modifier" msgstr "Modificateur de vitesse de la vue libre" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "Verrouiller la rotation de la vue" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Dialogue XForm" @@ -6257,11 +6216,6 @@ msgid "Tool Scale" msgstr "Outil échelle" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Accrocher à la grille" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Basculer en vue libre" @@ -6271,7 +6225,7 @@ msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Aligner l'objet sur le sol" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6302,9 +6256,8 @@ msgid "4 Viewports" msgstr "4 vues" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Voir les gadgets" +msgstr "Gadgets" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6380,51 +6333,46 @@ msgid "Post" msgstr "Post" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Le chemin de sauvegarde est vide !" +msgstr "Le sprite est vide !" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." msgstr "" +"Impossible de convertir un sprite en utilisant des images d'animation à " +"mailler." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Géométrie invalide, impossible de remplacer par un maillage." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Convertir en %s" +msgstr "Convertir en maillage 2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Créer un maillage de contour" +msgstr "Créer un maillage 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Simplification : " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "Aligner (pixels) :" +msgstr "Croissance (Pixels) : " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Aperçu de l'atlas" +msgstr "Aperçu de la mise à jour" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Paramètres" +msgstr "Paramètres :" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6528,12 +6476,11 @@ msgstr "Pas (s) :" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Sep. :" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" -msgstr "Région de texture" +msgstr "RegionDeTexture" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -6664,9 +6611,12 @@ msgid "Erase Selection" msgstr "Supprimer la sélection" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Nom invalide." +msgstr "Résoudre les tuiles invalides" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Couper la sélection" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6689,7 +6639,6 @@ msgid "Erase TileMap" msgstr "Supprimer la TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" msgstr "Trouver une tuile" @@ -6714,35 +6663,37 @@ msgid "Pick Tile" msgstr "Sélectionner une case" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "Supprimer la sélection" +msgid "Copy Selection" +msgstr "Copier la sélection" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Tourner de 0 degrés" +msgid "Rotate left" +msgstr "Rotation à gauche" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Tourner de 90 degrés" +msgid "Rotate right" +msgstr "Rotation à droite" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Tourner de 180 degrés" +msgid "Flip horizontally" +msgstr "Retourner horizontalement" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Tourner de 270 degrés" +msgid "Flip vertically" +msgstr "Retourner verticalement" -#: editor/plugins/tile_set_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy +msgid "Clear transform" +msgstr "Transformation" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" -msgstr "Ajouter un nÅ“ud à partir de l'arbre" +msgstr "Ajouter texture(s) au TileSet" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Supprimer l’entrée" +msgstr "Supprimer la texture courante du TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6762,15 +6713,17 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Afficher les noms des tuiles (maintenez la touche Alt enfoncée)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +#, fuzzy +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" +"Supprimer la texture sélectionnée et TOUTES LES TUILES qui l'utilisent ?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Vous n'avez pas sélectionné de texture à supprimer." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6781,76 +6734,77 @@ msgid "Merge from scene?" msgstr "Fusionner depuis la scène ?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +#, fuzzy +msgid "%s file(s) were not added because was already on the list." +msgstr " fichier(s) non ajouté(s) car déjà sur la liste." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Faites glisser les poignées pour modifier Rect.\n" +"Cliquez sur une autre tuile pour la modifier." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" -"Clic-gauche : Activer\n" -"Clic-droit : Désactiver" +"Bouton-gauche : Activer le bit\n" +"Bouton-droit : Désactiver le bit\n" +"Cliquer sur une autre tuile pour l'éditer." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Sélectionner la sous-tuile en cours d'édition." +msgstr "" +"Sélectionner la sous-tuile en cours d'édition.\n" +"Cliquer sur une autre tuile pour l'éditer." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" "Sélectionner une sous-tuile à utiliser comme icône, celle-ci sera aussi " -"utilisée pour les liaisons de tuiles automatiques invalides." +"utilisée pour les liaisons de tuiles automatiques invalides.\n" +"Cliquer sur une autre tuile pour la modifier." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Sélectionner une sous-tuile pour changer sa priorité." +msgstr "" +"Sélectionner une sous-tuile pour changer sa priorité.\n" +"Cliquer sur une autre tuile pour l'éditer." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Cette opération ne peut être réalisée sans une scène." +msgstr "Cette propriété ne peut être changée." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Jeu de tuiles" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Vertex" +msgstr "Sommet" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" msgstr "Fragment" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Droite" +msgstr "Lumière" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "VisualShader" #: editor/project_export.cpp msgid "Runnable" @@ -6869,6 +6823,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Modèles d'exportation manquants ou corrompus pour cette plateforme :" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "Réalisation" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "Tout exporter" + +#: editor/project_export.cpp msgid "Presets" msgstr "Pré-réglages" @@ -6877,6 +6840,11 @@ msgid "Add..." msgstr "Ajouter…" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Pré-réglage d'exportation :" + +#: editor/project_export.cpp msgid "Resources" msgstr "Ressources" @@ -6939,6 +6907,14 @@ msgid "Export PCK/Zip" msgstr "Exporter le PCK/ZIP" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "Mode Exportation?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "Tout exporter" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Modèles d'exportation manquants pour cette plateforme :" @@ -6951,23 +6927,22 @@ msgid "The path does not exist." msgstr "Le chemin vers ce fichier n'existe pas." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." msgstr "" -"Veuillez choisir un dossier qui ne contient pas de fichier 'project.godot'." +"Fichier de projet '.zip' invalide, il ne contient pas de fichier 'project." +"godot'." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Veuillez choisir un dossier vide." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Veuillez choisir un fichier 'project.godot'." +msgstr "Veuillez choisir un fichier 'project.godot' ou '.zip'." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "Le répertoire contient déjà un projet Godot." #: editor/project_manager.cpp msgid "Imported Project" @@ -7059,9 +7034,8 @@ msgid "Project Path:" msgstr "Chemin du projet :" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Chemin du projet :" +msgstr "Chemin d'installation du projet :" #: editor/project_manager.cpp msgid "Browse" @@ -7185,13 +7159,12 @@ msgid "Mouse Button" msgstr "Bouton de souris" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"Nom d'action invalide. Il ne peux être vide ou contenir '/', ':', '=', '\\' " -"ou '\"'." +"Nom d'action invalide. Il ne peux être vide ni contenir '/', ':', '=', '\\' " +"ou '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7202,18 +7175,16 @@ msgid "Rename Input Action Event" msgstr "Renommer l'événement d'action d'entrée" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Modifier le nom de l'animation :" +msgstr "Modifier la zone morte de l'action" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Ajouter un événement d'action d'entrée" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Périphérique" +msgstr "Tous les périphérique" #: editor/project_settings_editor.cpp msgid "Device" @@ -7260,24 +7231,20 @@ msgid "Wheel Down Button" msgstr "Molette vers le bas" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Molette vers le haut" +msgstr "Molette Bouton Gauche" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Bouton droite" +msgstr "Molette Bouton droit" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Bouton 6" +msgstr "X Bouton 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Bouton 6" +msgstr "X Bouton 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7419,17 +7386,13 @@ msgstr "Paramètres du projet (project.godot)" msgid "General" msgstr "Général" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Propriété :" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Écraser pour…" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "L'éditeur doit être redémarré pour que les changements prennent effet" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7445,7 +7408,7 @@ msgstr "Action" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Zone morte" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7555,10 +7518,6 @@ msgstr "Choisissez un nÅ“ud" msgid "Bit %d, val %d." msgstr "Bit %d, valeur %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Propriétés :" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Sélectionnez une propriété" @@ -7581,97 +7540,92 @@ msgstr "" "L'image convertie n'a pas pu être rechargée en utilisant l'outil PVRTC :" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Renommer" +msgstr "Renommer par lot" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Préfixe" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "suffixe" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Options du magnétisme" +msgstr "Options avancées" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Remplacer" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nom de nÅ“ud :" +msgstr "Nom de nÅ“ud" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nom parent du nÅ“ud, si disponible" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Trouver le type du nÅ“ud" +msgstr "Type de nÅ“ud" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Scène actuelle" +msgstr "Nom de la scène courante" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nom de nÅ“ud racine :" +msgstr "Nom de nÅ“ud racine" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Compteur entier séquentiel.\n" +"Comparez les options du compteur." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Compteur par niveau" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Si défini, le compteur redémarre pour chaque groupe de nÅ“uds enfant" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Valeur initiale pour le compteur" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Pas (s) :" +msgstr "Pas" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "Valeur par laquelle le compteur est incrémenté pour chaque nÅ“ud" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Remplissage" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Nombre minimum de chiffres pour le compteur.\n" +"Les chiffres manquants sont complétés par des zéros en tête." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Changer l'expression" +msgstr "Expressions régulières" #: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "Script de post-traitement :" +msgstr "Post-traitement" #: editor/rename_dialog.cpp msgid "Keep" @@ -7679,32 +7633,29 @@ msgstr "Conserver" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase vers sous_ligné" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "sous_ligné vers CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Cas" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Minuscule" +msgstr "Convertir en minuscule" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Majuscule" +msgstr "Convertir en majuscule" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Réinitialiser le zoom" +msgstr "Réinitialiser" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Erreur" @@ -7765,6 +7716,10 @@ msgid "Instance Scene(s)" msgstr "Instancier scène(s)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instancier une scène enfant" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Supprimer le script" @@ -7801,6 +7756,12 @@ msgid "Save New Scene As..." msgstr "Enregistrer la nouvelle scène sous…" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Enfants modifiables" @@ -7813,29 +7774,24 @@ msgid "Make Local" msgstr "Rendre local" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Créer un nÅ“ud" +msgstr "Créer un nÅ“ud racine :" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Scène" +msgstr "Scène 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Scène" +msgstr "Scène 3D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Effacer l'héritage" +msgstr "Interface utilisateur" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Couper les nÅ“uds" +msgstr "NÅ“ud personnalisé" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7878,6 +7834,10 @@ msgid "Clear Inheritance" msgstr "Effacer l'héritage" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "Ouvrir la documentation" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Supprimer nÅ“ud(s)" @@ -7886,17 +7846,17 @@ msgid "Add Child Node" msgstr "Ajouter un nÅ“ud enfant" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Instancier une scène enfant" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Changer le type" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Ouvrir un script" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Nouvelle racine de la scène" +msgstr "Choisir comme racine de scène" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7948,22 +7908,20 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Effacer l'héritage ? (Pas de retour en arrière !)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" -msgstr "Basculer la visibilité" +msgstr "Rendre visible" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "Avertissement de configuration de noeud :" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" "Le noeud possède une (des) connection(s) et un (des) groupe(s)\n" -"Cliquez pour montrer l'arrimage de signaux." +"Cliquez pour afficher l'onglet des signaux." #: editor/scene_tree_editor.cpp msgid "" @@ -7982,27 +7940,24 @@ msgstr "" "Cliquez pour montrer l'arrimage de goupes." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" -msgstr "Ouvrir script" +msgstr "Ouvrir un script" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" -"Noeud verouillé.\n" -"Cliquez pour dévérouiller" +"Le nÅ“ud est verrouillé.\n" +"Cliquer pour le déverrouiller." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"Enfants non séléctionnable.\n" -"Cliquez pour les rendre sélectionnable" +"Enfants non sélectionnables.\n" +"Cliquer pour les rendre sélectionnables." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -8013,6 +7968,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer est épinglé.\n" +"Cliquez pour détacher." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -8051,15 +8008,18 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Ouvrir l'éditeur de script" +msgstr "Ouvrir le script / Choisir l'emplacement" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Le chemin est vide" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Le nom de fichier est vide" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Le chemin n'est pas local" @@ -8148,20 +8108,9 @@ msgid "Bytes:" msgstr "Octets :" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Avertissement" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Erreur :" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Source :" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Fonction :" +#, fuzzy +msgid "Stack Trace" +msgstr "Pile des appels" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8193,18 +8142,6 @@ msgid "Stack Frames" msgstr "Pile des appels" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variable" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Erreurs :" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Trace de pile (si applicable) :" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profileur" @@ -8293,9 +8230,8 @@ msgid "Change Camera Size" msgstr "Changer la taille d'une caméra" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Changer les extents d'un notificateur" +msgstr "Changer le notificateur AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8322,38 +8258,32 @@ msgid "Change Capsule Shape Height" msgstr "Changer la hauteur de la forme capsule" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Changer le rayon d'une forme en capsule" +msgstr "Changer le rayon de la forme du cylindre" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Changer la hauteur de la forme capsule" +msgstr "Changer la hauteur de la forme du cylindre" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Changer la longueur d'une forme en rayon" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Changer le rayon d'une lumière" +msgstr "Changer le rayon du cylindre" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Changer la hauteur de la forme capsule" +msgstr "Changer la hauteur du cylindre" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Changer le rayon d'une forme en sphère" +msgstr "Changer le rayon intérieur de la tour" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Changer le rayon d'une lumière" +msgstr "Changer le rayon extérieur de la tour" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8473,12 +8403,11 @@ msgstr "Étage :" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Delete Selection" -msgstr "Sélection de la supression de GridMap" +msgstr "Suppression de la sélection de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "Sélection de la supression de GridMap" +msgstr "Remplissage de la sélection de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8561,9 +8490,8 @@ msgid "Clear Selection" msgstr "Supprimer la sélection" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Toute la sélection" +msgstr "Remplir la sélection" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8634,12 +8562,8 @@ msgid "End of inner exception stack trace" msgstr "Fin de la trace d'appel (stack trace) intrinsèque" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Calculer !" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Précalculer le maillage de navigation." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8868,14 +8792,12 @@ msgid "Connect Nodes" msgstr "Connecter nÅ“ud" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Connecter nÅ“ud" +msgstr "Données de connexion du nÅ“ud" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Connecter nÅ“ud" +msgstr "Séquence de connexion du nÅ“ud" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8922,6 +8844,10 @@ msgid "Base Type:" msgstr "Type de base :" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Membres :" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "NÅ“uds disponibles :" @@ -8958,9 +8884,8 @@ msgid "Paste Nodes" msgstr "Coller les nÅ“uds" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Membres" +msgstr "Modifier le membre" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -9021,17 +8946,16 @@ msgstr "" "out), ou une chaîne (erreur)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Supprimer nÅ“ud VisualScript" +msgstr "Rechercher VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Récupérer" +msgid "Get %s" +msgstr "Obtenir %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Définir %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9082,15 +9006,15 @@ msgstr "" "scènes instanciées). Le premier créé fonctionnera, les autres seront ignorés." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Ce nÅ“ud n'a aucune forme enfant, et ne peut donc interagir avec l'espace.\n" -"Considérez ajouter un nÅ“ud enfant CollisionShape2D ou un CollisionPolygon2D " -"pour définir sa forme." +"Ce nÅ“ud n'a pas de forme, il ne peut donc pas entrer en collision ou " +"interagir avec d'autres objets.\n" +"Envisagez d'ajouter un CollisionShape2D ou CollisionPolygon2D en tant " +"qu'enfant pour définir sa forme." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -9124,6 +9048,15 @@ msgstr "" "Une forme doit être créée afin qu'une CollisionShape2D fonctionne. Veuillez " "créer une ressource de forme !" +#: scene/2d/cpu_particles_2d.cpp +#, fuzzy +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"L'animation CPUParticles2D a besoin de l'usage d'un CanvasItemMaterial avec " +"\"Animation de Particules\" activé." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9177,6 +9110,15 @@ msgstr "" "Un matériau de traitement des particules n'est pas assigné, aucun " "comportement n'est donc imprimé." +#: scene/2d/particles_2d.cpp +#, fuzzy +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"L'animation Particles2D a besoin de l'usage d'un CanvasItemMaterial avec " +"\"Animation de Particules\" activé." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9201,16 +9143,20 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Cette chaîne Bone2D doit se terminer sur un nÅ“ud Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Un Bone2D ne fonctionne qu'avec un Skeleton2D ou un autre Bone2D en tant que " +"nÅ“ud parent." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Cet os ne dispose pas d'une pose REST appropriée. Accédez au nÅ“ud Skeleton2D " +"et définissez-en une." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9277,15 +9223,15 @@ msgid "Lighting Meshes: " msgstr "Tracer les maillages : " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Ce nÅ“ud n'a aucune forme enfant, il ne peut donc interagir avec l'espace.\n" -"Considérez ajouter un nÅ“ud enfant CollisionShape ou CollisionPolygon pour " -"définir sa forme." +"Ce nÅ“ud n'a pas de forme, il ne peut donc pas entrer en collision ou " +"interagir avec d'autres objets.\n" +"Envisagez d'ajouter un CollisionShape ou CollisionPolygon en tant qu'enfant " +"pour définir sa forme." #: scene/3d/collision_polygon.cpp msgid "" @@ -9317,6 +9263,16 @@ msgstr "" "Une CollisionShape nécessite une forme pour fonctionner. Créez une ressource " "de forme pour cette CollisionShape !" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Rien n'est visible car aucun maillage n'a été assigné." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Tracer les maillages" @@ -9342,6 +9298,30 @@ msgstr "" "Rien n'est visible car les maillages n'ont pas été assignés au tirage des " "passes." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"Un PathFollow2D fonctionne seulement quand défini comme un enfant d'un nÅ“ud " +"Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"Un PathFollow2D fonctionne seulement quand défini comme un enfant d'un nÅ“ud " +"Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9379,18 +9359,18 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Ce corps sera ignoré jusqu'à ce que vous définissiez un maillage" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Les changements de taille pour RigidBody (dans les modes caractère ou " -"rigide) seront remplacés par le moteur physique lors de l'exécution. " -"Modifiez la taille dans les formes de collision enfants à la place." +"Les changements de tailles des SoftBody seront suppléés par le moteur " +"physique lors de l'exécution. Modifiez les tailles dans les formes de " +"collision enfants à la place." #: scene/3d/sprite_3d.cpp msgid "" @@ -9410,46 +9390,42 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "Sur le noeud BlendTree '%s', animation introuvable : '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Outils d'animation" +msgstr "Animation introuvable : '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "Dans le noeud '%s', animation non valide : '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ERREUR : Nom de l'animation invalide !" +msgstr "Animation invalide : '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Déconnecter « %s » de « %s »" +msgstr "Rien n'est connecté à l'entrée '%s' du nÅ“ud '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "Un AnimationNode racine pour le graphique n'est pas défini." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"Sélectionnez un AnimationPlayer de l'arbre de scène pour modifier les " -"animations." +"Le chemin d'accès à un nÅ“ud AnimationPlayer contenant des animations n'est " +"pas défini." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"Le chemin défini pour AnimationPlayer ne mène pas à un nÅ“ud AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "L'arbre d'animations est invalide." +msgstr "La racine AnimationPlayer n'est pas un nÅ“ud valide." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9467,10 +9443,6 @@ msgstr "Alerte !" msgid "Please Confirm..." msgstr "Veuillez confirmer…" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Sélectionner ce dossier" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9482,6 +9454,10 @@ msgstr "" "l'édition ne pose pas de problème, mais elles seront cachées lors de " "l'exécution." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "Si exp_edit est vrai min_value doit être > 0." + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9533,31 +9509,143 @@ msgid "Invalid font size." msgstr "Taille de police invalide." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Ajouter une entrée" +msgstr "Entrée" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Aucun>" +msgstr "Aucun" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Source invalide !" +msgstr "Source invalide pour la forme." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Affectation à la fonction." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Affectation à l'uniforme." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." + +#~ msgid "Zoom:" +#~ msgstr "Agrandissement (%) :" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Voulez-vous vraiment supprimer toutes les connexions du ''" + +#~ msgid "Class List:" +#~ msgstr "Liste des classes :" + +#~ msgid "Search Classes" +#~ msgstr "Chercher dans les classes" + +#~ msgid "Public Methods" +#~ msgstr "Méthodes Publiques" + +#~ msgid "Public Methods:" +#~ msgstr "Méthodes publiques :" + +#~ msgid "GUI Theme Items" +#~ msgstr "Items de thème GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Items de thème GUI :" + +#~ msgid "Property: " +#~ msgstr "Propriété : " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Basculer le statut du dossier sur Favori." + +#~ msgid "Show current scene file." +#~ msgstr "Afficher le fichier de la scène courante." + +#~ msgid "Enter tree-view." +#~ msgstr "Entrer dans la vue en arborescence." + +#~ msgid "Whole words" +#~ msgstr "Mots entiers" + +#~ msgid "Match case" +#~ msgstr "Cas de correspondance" + +#~ msgid "Filter: " +#~ msgstr "Filtrer : " + +#~ msgid "Ok" +#~ msgstr "OK" + +#~ msgid "Show In File System" +#~ msgstr "Afficher dans le système de fichiers" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Cherche dans la hiérarchie des classes." + +#~ msgid "Search in files" +#~ msgstr "Chercher dans les fichiers" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Les scripts intégrés ne peuvent être modifiés uniquement lorsque la scène " +#~ "à qui ils appartiennent est ouverte" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Convertir en majuscule" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Convertir en minuscule" + +#~ msgid "Snap To Floor" +#~ msgstr "Accrocher au sol" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Tourner de 0 degrés" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Tourner de 90 degrés" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Tourner de 180 degrés" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Tourner de 270 degrés" + +#~ msgid "Warning" +#~ msgstr "Avertissement" + +#~ msgid "Error:" +#~ msgstr "Erreur :" + +#~ msgid "Source:" +#~ msgstr "Source :" + +#~ msgid "Function:" +#~ msgstr "Fonction :" + +#~ msgid "Variable" +#~ msgstr "Variable" + +#~ msgid "Errors:" +#~ msgstr "Erreurs :" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Trace de pile (si applicable) :" + +#~ msgid "Bake!" +#~ msgstr "Calculer !" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Précalculer le maillage de navigation." + +#~ msgid "Get" +#~ msgstr "Récupérer" #~ msgid "Change Scalar Constant" #~ msgstr "Modifier une constante scalaire" @@ -10067,9 +10155,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Impossible d'enregistrer la sous-texture atlas :" -#~ msgid "Exporting for %s" -#~ msgstr "Exportation pour %s" - #~ msgid "Setting Up..." #~ msgstr "Configuration…" @@ -10177,9 +10262,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Police source :" -#~ msgid "Source Font Size:" -#~ msgstr "Taille de la police source :" - #~ msgid "Dest Resource:" #~ msgstr "Ressource de destination :" @@ -10256,9 +10338,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Départ(s)" -#~ msgid "Filters" -#~ msgstr "Filtres" - #~ msgid "Source path is empty." #~ msgstr "Le chemin source est vide." @@ -10533,15 +10612,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Stéréo" -#~ msgid "Pitch" -#~ msgstr "Hauteur" - #~ msgid "Window" #~ msgstr "Fenêtre" -#~ msgid "Move Right" -#~ msgstr "Aller à droite" - #~ msgid "Scaling to %s%%." #~ msgstr "Mise à l'échelle %s%%." @@ -10619,9 +10692,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "vient d'être appuyé" -#~ msgid "just released" -#~ msgstr "vient d'être relâché" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " @@ -10954,9 +11024,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Exportation de projet" -#~ msgid "Export Preset:" -#~ msgstr "Pré-réglage d'exportation :" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "La BakedLightInstance ne contient pas de ressource BakedLight." diff --git a/editor/translations/he.po b/editor/translations/he.po index 43bfd2a473..3d9418b4fd 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -28,7 +28,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -402,8 +402,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -417,11 +416,13 @@ msgid "Delete Selection" msgstr "ביטול הבחירה" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "מעבר לצעד הב×" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "מעבר לצעד הקוד×" #: editor/animation_track_editor.cpp @@ -524,11 +525,11 @@ msgstr "×ין תוצ×ות" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "הת×מת רישיות" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "×ž×™×œ×™× ×©×œ×ž×•×ª" @@ -563,10 +564,10 @@ msgstr "×זהרות" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "להתקרב" +msgid "Font Size:" +msgstr "מבט קדמי" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "שורה:" @@ -597,6 +598,7 @@ msgstr "הוספה" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -676,7 +678,7 @@ msgid "Edit Connection: " msgstr "שגי×ת חיבור" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -731,17 +733,14 @@ msgstr "××—×¨×•× ×™×:" msgid "Search:" msgstr "חיפוש:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "הת×מות:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "תי×ור:" @@ -798,9 +797,10 @@ msgid "Search Replacement Resource:" msgstr "חיפוש מש×ב חלופי:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -830,7 +830,8 @@ msgid "Error loading:" msgstr "שגי××” ×‘×˜×¢×™× ×”:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "×˜×¢×™× ×ª ×”×¡×¦× ×” × ×›×©×œ×” עקב תלויות חסרות:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -889,14 +890,6 @@ msgstr "החלפת ערך מילון" msgid "Thanks from the Godot community!" msgstr "תודה רבה מקהילת Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "×ž×ª× ×“×‘×™ ×ž× ×•×¢ Godot" @@ -1068,8 +1061,7 @@ msgid "Bus options" msgstr "×פשרויות ×פיק" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "שכפול" @@ -1236,8 +1228,9 @@ msgstr "× ×ª×™×‘:" msgid "Node Name:" msgstr "×©× ×”×ž×¤×¨×§:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "ש×" @@ -1307,12 +1300,17 @@ msgid "Template file not found:" msgstr "קובץ ×”×ª×‘× ×™×ª ×œ× × ×ž×¦×:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "× × ×œ×‘×—×•×¨ ×ת התיקייה ×”× ×•×›×—×™×ª" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "הקובץ ×§×™×™×, לשכתב?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "× × ×œ×‘×—×•×¨ ×ת התיקייה ×”× ×•×›×—×™×ª" +#, fuzzy +msgid "Select This Folder" +msgstr "בחירת התיקייה" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1320,12 +1318,13 @@ msgstr "העתקת × ×ª×™×‘" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "הצגה ×‘×ž× ×”×œ הקבצי×" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "הצגה ×‘×ž× ×”×œ הקבצי×" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1361,7 +1360,8 @@ msgid "Open a File or Directory" msgstr "פתיחת קובץ ×ו תיקייה" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "שמירה" @@ -1419,8 +1419,7 @@ msgstr "תיקיות וקבצי×:" msgid "Preview:" msgstr "תצוגה מקדימה:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "קובץ:" @@ -1436,24 +1435,11 @@ msgstr "סריקת מקורות" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "חיפוש בעזרה" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "רשימת מחלקות:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "חיפוש במחלקות" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "עליון" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "מחלקה:" @@ -1470,28 +1456,31 @@ msgid "Brief Description:" msgstr "תי×ור קצר:" #: editor/editor_help.cpp -msgid "Members" -msgstr "חברי×" +msgid "Properties" +msgstr "מ××¤×™×™× ×™×" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "חברי×:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "שיטות ציבוריות" +msgid "Methods" +msgstr "שיטות" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "שיטות ציבוריות:" +#, fuzzy +msgid "Methods:" +msgstr "שיטות" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "פריטי ×ž× ×©×§ משתמש של ערכת העיצוב" +#, fuzzy +msgid "Theme Properties" +msgstr "מ××¤×™×™× ×™×" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "פריטי ×ž× ×©×§ משתמש של ערכת העיצוב:" +#, fuzzy +msgid "Theme Properties:" +msgstr "מ××¤×™×™× ×™×" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1518,10 +1507,16 @@ msgid "Constants:" msgstr "קבועי×:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "תי×ור" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "תי×ור:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "" @@ -1533,11 +1528,13 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "מ××¤×™×™× ×™×" +#, fuzzy +msgid "Property Descriptions" +msgstr "תי×ור המ×פיין:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "תי×ור המ×פיין:" #: editor/editor_help.cpp @@ -1547,11 +1544,13 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "שיטות" +#, fuzzy +msgid "Method Descriptions" +msgstr "תי×ור השיטה:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "תי×ור השיטה:" #: editor/editor_help.cpp @@ -1560,12 +1559,61 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "חיפוש בעזרה" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Display All" +msgstr "הצגה × ×•×¨×ž×œ×™×ª" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "מחלקות" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "שיטות" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "×ותות" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "קבועי×" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" msgstr "מ××¤×™×™× ×™×" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "מ××¤×™×™× ×™×" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "חברי×" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "מחלקה:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1599,6 +1647,11 @@ msgstr "" msgid "Error saving resource!" msgstr "שגי××” בשמירת המש×ב!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "שמירת המש×ב בתור…" @@ -1653,12 +1706,22 @@ msgstr "×œ× × ×™×ª×Ÿ לבצע פעולה זו ×œ×œ× ×©×•×¨×© ×”×¢×¥." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "×œ× × ×™×ª×Ÿ לשמור ×ת ×”×¡×¦× ×”. כפי ×”× ×¨××” עקב תלויות (×ž×•×¤×¢×™× ×ו ירושות) ש××™× ×Ÿ " "מסופקות." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1890,6 +1953,12 @@ msgstr "×œ× × ×™×ª×Ÿ לטעון סקריפט הרחבה ×ž×”× ×ª×™×‘: ‚%s’. #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1930,6 +1999,12 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "הצגה במערכת הקבצי×" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2013,7 +2088,8 @@ msgid "Save Scene" msgstr "שמירת ×¡×¦× ×”" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "שמירת כל ×”×¡×¦× ×•×ª" #: editor/editor_node.cpp @@ -2042,7 +2118,7 @@ msgid "Undo" msgstr "ביטול" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "ביצוע חוזר" @@ -2080,6 +2156,7 @@ msgid "Quit to Project List" msgstr "יצי××” לרשימת המיזמי×" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "× ×™×¤×•×™ שגי×ות" @@ -2191,10 +2268,6 @@ msgstr "× ×™×”×•×œ ×ª×‘× ×™×•×ª ייצו×" msgid "Help" msgstr "עזרה" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "מחלקות" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2289,24 +2362,24 @@ msgstr "עדכון ×©×™× ×•×™×™×" msgid "Disable Update Spinner" msgstr "השבתת שבשבת עדכון" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "חוקר" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "ייבו×" #: editor/editor_node.cpp -msgid "Node" -msgstr "מפרק" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "מערכת קבצי×" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "חוקר" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "מפרק" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "להרחיב הכול" @@ -2443,7 +2516,7 @@ msgstr "שקופית %" msgid "Physics Frame %" msgstr "שקופית פיזיקלית %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "זמן:" @@ -2467,7 +2540,7 @@ msgstr "זמן" msgid "Calls" msgstr "קרי×ות" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2479,7 +2552,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2487,6 +2560,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2504,10 +2591,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2516,7 +2599,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "הדבקה" @@ -2801,6 +2885,11 @@ msgstr "" "×œ× × ×™×ª×Ÿ לפתוח ×ת file_type_cache.cch לכתיבה, מטמון סוג ×”×§×‘×¦×™× ×œ× ×™×™×©×ž×¨!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "מועדפי×:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "×œ× × ×™×ª×Ÿ ×œ× ×•×•×˜ ×ל ‚%s’ כיוון ×©×œ× × ×ž×¦× ×‘×ž×¢×¨×›×ª הקבצי×!" @@ -2838,7 +2927,7 @@ msgstr "שגי××” בשכפול:" msgid "Unable to update dependencies:" msgstr "×œ× × ×™×ª×Ÿ לעדכן ×ת התלויות:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "×œ× ×¦×•×™×Ÿ ש×" @@ -2875,22 +2964,6 @@ msgid "Duplicating folder:" msgstr "תיקייה משוכפלת:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "להרחיב הכול" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "×œ×¦×ž×¦× ×”×›×•×œ" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "×©×™× ×•×™ ש×…" - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "העברה ×ל…" - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "פתיחת ×¡×¦× ×•×ª" @@ -2899,6 +2972,16 @@ msgid "Instance" msgstr "עותק" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "מועדפי×:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "הסרה מקבוצה" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "עריכת תלויות…" @@ -2906,11 +2989,19 @@ msgstr "עריכת תלויות…" msgid "View Owners..." msgstr "צפייה בבעלי×…" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "×©×™× ×•×™ ש×…" + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "שכפול…" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "העברה ×ל…" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "פתיחת סקריפט מהירה…" @@ -2920,6 +3011,16 @@ msgstr "פתיחת סקריפט מהירה…" msgid "New Resource..." msgstr "שמירת המש×ב בתור…" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "להרחיב הכול" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "×œ×¦×ž×¦× ×”×›×•×œ" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2941,27 +3042,19 @@ msgstr "סריקת מערכת ×”×§×‘×¦×™× ×ž×—×“×©" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "החלפת מצב התיקייה כמועדפת" +msgid "Toggle split mode" +msgstr "החלפת מצב" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "חיפוש במחלקות" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "חיפוש במחלקות" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -2969,7 +3062,7 @@ msgstr "" "×”×§×‘×¦×™× × ×¡×¨×§×™×,\n" "× × ×œ×”×ž×ª×™×Ÿâ€¦" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "העברה" @@ -2987,30 +3080,22 @@ msgid "Create Script" msgstr "יצירת סקריפט" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "×יתור" +msgid "Find in Files" +msgstr "×יתור…" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "×ž×™×œ×™× ×©×œ×ž×•×ª" +msgid "Find:" +msgstr "×יתור" #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "הת×מת רישיות" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "יצירת תיקייה" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3028,6 +3113,11 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "×יתור" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "להחליף" @@ -3192,17 +3282,14 @@ msgstr "×™×™×‘×•× ×ž×—×“×©" msgid "Failed to load resource." msgstr "×˜×¢×™× ×ª המש×ב × ×›×©×œ×”." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "הרחבת כל המ××¤×™×™× ×™×" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "×¦×ž×¦×•× ×›×œ המ××¤×™×™× ×™×" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3448,6 +3535,11 @@ msgstr "" msgid "Snap" msgstr "הצמדה" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3826,10 +3918,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4156,6 +4244,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4219,6 +4311,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "מצב ×©×™× ×•×™ ×§× ×” מידה (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4315,6 +4412,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "×™×—×™×“× ×™" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4366,6 +4468,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4801,9 +4907,9 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "× ×•×¦×¨ ×ž×™×–× C#‎…" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4831,6 +4937,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "המרה ל×ותיות גדולות" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4900,13 +5012,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "המרה ל×ותיות גדולות" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5244,22 +5355,22 @@ msgid "Paste Resource" msgstr "הדבקת מש×ב" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "×˜×¢×™× ×ª מש×ב" @@ -5291,6 +5402,11 @@ msgstr "שגי××” ×‘×™×™×‘×•× ×¢×¨×›×ª ×”× ×•×©×" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה." @@ -5391,11 +5507,8 @@ msgid "Copy Script Path" msgstr "העתקת × ×ª×™×‘ הסקריפט" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "הצגה במערכת הקבצי×" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "×”×§×•×“× ×‘×”×™×¡×˜×•×¨×™×”" #: editor/plugins/script_editor_plugin.cpp @@ -5466,7 +5579,8 @@ msgid "Keep Debugger Open" msgstr "להש×יר ×ת ×ž× ×¤×” השגי×ות פתוח" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "× ×™×¤×•×™ שגי×ות ×¢× ×¢×•×¨×š ×—×™×¦×•× ×™" #: editor/plugins/script_editor_plugin.cpp @@ -5474,10 +5588,6 @@ msgid "Open Godot online documentation" msgstr "פתיחת התיעוד המקוון של Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "חיפוש בהיררכיית המחלקות." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5515,19 +5625,9 @@ msgstr "× ×™×¤×•×™ שגי×ות" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "חיפוש בעזרה" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "חיפוש במחלקות" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "× ×™×ª×Ÿ לערוך ×¡×§×¨×™×¤×˜×™× ×ž×•×‘× ×™× ×¨×§ ×›×שר ×”×¡×¦× ×” ××œ×™×”× ×”× ×©×™×™×›×™× × ×˜×¢× ×”" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5538,6 +5638,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "מעבר ×œ×¤×•× ×§×¦×™×”â€¦" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "× ×™×ª×Ÿ להשמיט מש××‘×™× ×ž×ž×¢×¨×›×ª ×”×§×‘×¦×™× ×‘×œ×‘×“." @@ -5624,11 +5729,13 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "המרת הזחות לרווחי×" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "המרת הזחות לט×בי×" #: editor/plugins/script_text_editor.cpp @@ -5645,36 +5752,32 @@ msgid "Remove All Breakpoints" msgstr "הסרת כל × ×§×•×“×•×ª העצירה" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "מעבר ×œ× ×§×•×“×ª העצירה הב××”" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "מעבר ×œ× ×§×•×“×ª העצירה הקודמת" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "המרה ל×ותיות גדולות" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "המרה ל×ותיות ×§×˜× ×•×ª" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "×יתור הקוד×" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "×יתור…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "מעבר ×œ×¤×•× ×§×¦×™×”â€¦" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "מעבר לשורה…" #: editor/plugins/script_text_editor.cpp @@ -5770,6 +5873,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5935,6 +6046,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "הצגת מידע" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6037,10 +6153,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "החלפת מצב מבט חופשי" @@ -6443,6 +6555,11 @@ msgid "Fix Invalid Tiles" msgstr "×©× ×©×’×•×™." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "בחירת מיקוד" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6489,25 +6606,32 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "הסרת הבחירה" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "הטיית מצולע" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "" +#, fuzzy +msgid "Rotate right" +msgstr "הטיית מצולע" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "התמרה" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6535,7 +6659,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6551,7 +6675,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6630,6 +6754,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "ייצו×" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6638,6 +6771,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "×™×™×¦×•× ×ž×™×–×" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6696,6 +6834,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "×™×™×¦×•× ×ž×™×–×" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "ייצו×" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7153,10 +7301,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7290,10 +7434,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7383,7 +7523,7 @@ msgid "Step" msgstr "צעד/×™×:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7392,7 +7532,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7435,7 +7575,7 @@ msgstr "×ותיות גדולות" msgid "Reset" msgstr "×יפוס התקריב" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7494,6 +7634,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7530,6 +7674,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7604,6 +7754,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "פתיחת התיעוד המקוון של Godot" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7612,12 +7767,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "הרצת סקריפט" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7770,6 +7926,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "לוח גזירי המש××‘×™× ×¨×™×§!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7858,19 +8019,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7902,18 +8051,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8332,11 +8469,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8608,6 +8741,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "חברי×:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8708,11 +8845,11 @@ msgid "Search VisualScript" msgstr "חיפוש בעזרה" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8790,6 +8927,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8829,6 +8972,12 @@ msgid "" "imprinted." msgstr "×œ× ×ž×•×§×¦×” חומר לעיבוד חלקיקי×, לכן ×œ× ×ª×•×˜×‘×¢ ×”×ª× ×”×’×•×ª." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D עובד רק ×›×שר ×”×•× ×ž×•×’×“×¨ כצ××¦× ×©×œ מפרק Path2D." @@ -8946,6 +9095,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8965,6 +9124,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D עובד רק ×›×שר ×”×•× ×ž×•×’×“×¨ כצ××¦× ×©×œ מפרק Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D עובד רק ×›×שר ×”×•× ×ž×•×’×“×¨ כצ××¦× ×©×œ מפרק Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8997,7 +9176,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9068,10 +9247,6 @@ msgstr "" msgid "Please Confirm..." msgstr "× × ×œ×מת…" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "בחירת התיקייה" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9079,6 +9254,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9145,6 +9324,62 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "להתקרב" + +#~ msgid "Class List:" +#~ msgstr "רשימת מחלקות:" + +#~ msgid "Search Classes" +#~ msgstr "חיפוש במחלקות" + +#~ msgid "Public Methods" +#~ msgstr "שיטות ציבוריות" + +#~ msgid "Public Methods:" +#~ msgstr "שיטות ציבוריות:" + +#~ msgid "GUI Theme Items" +#~ msgstr "פריטי ×ž× ×©×§ משתמש של ערכת העיצוב" + +#~ msgid "GUI Theme Items:" +#~ msgstr "פריטי ×ž× ×©×§ משתמש של ערכת העיצוב:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "מ××¤×™×™× ×™×" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "החלפת מצב התיקייה כמועדפת" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "×ž×™×œ×™× ×©×œ×ž×•×ª" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "הת×מת רישיות" + +#~ msgid "Search the class hierarchy." +#~ msgstr "חיפוש בהיררכיית המחלקות." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "חיפוש במחלקות" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "× ×™×ª×Ÿ לערוך ×¡×§×¨×™×¤×˜×™× ×ž×•×‘× ×™× ×¨×§ ×›×שר ×”×¡×¦× ×” ××œ×™×”× ×”× ×©×™×™×›×™× × ×˜×¢× ×”" + +#~ msgid "Convert To Uppercase" +#~ msgstr "המרה ל×ותיות גדולות" + +#~ msgid "Convert To Lowercase" +#~ msgstr "המרה ל×ותיות ×§×˜× ×•×ª" + #~ msgid "Change Default Value" #~ msgstr "×©×™× ×•×™ ערך בררת המחדל" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 87c09cdd07..1188b26a7c 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -2,69 +2,69 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# # Abhas Kumar Sinha <abhaskumarsinha@gmail.com>, 2017. -# +# Suryansh5545 <suryanshpathak5545@gmail.com>, 2018. +# Vikram1323 <vikram1323@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-11-25 10:21+0000\n" -"Last-Translator: Abhas Kumar Sinha <abhaskumarsinha@gmail.com>\n" +"PO-Revision-Date: 2018-10-07 18:27+0000\n" +"Last-Translator: Vikram1323 <vikram1323@gmail.com>\n" "Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/" "hi/>\n" "Language: hi\n" "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 2.18-dev\n" +"X-Generator: Weblate 3.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" +msgstr "कनà¥à¤µà¤°à¥à¤Ÿ करने के लिठअमानà¥à¤¯ पà¥à¤°à¤•ार तरà¥à¤• (), TYPE_ * सà¥à¤¥à¤¿à¤°à¤¾à¤‚क का उपयोग करें।" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "डीकोडिंग बाइटà¥à¤¸, या अमानà¥à¤¯ पà¥à¤°à¤¾à¤°à¥‚प के लिठपरà¥à¤¯à¤¾à¤ªà¥à¤¤ बाइटà¥à¤¸ नहीं है।" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "अà¤à¤¿à¤µà¥à¤¯à¤•à¥à¤¤à¤¿ में अमानà¥à¤¯ इनपà¥à¤Ÿ % i (पारित नहीं)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "सà¥à¤µà¤¯à¤‚ का उपयोग नहीं किया जा सकता कà¥à¤¯à¥‹à¤‚कि उदाहरण शूनà¥à¤¯ है (पास नहीं हà¥à¤†)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "" +msgstr "ऑपरेटर %s, %s और %s के लिठअमानà¥à¤¯ ऑपरेंड।" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "बेस पà¥à¤°à¤•ार %s के लिठपà¥à¤°à¤•ार %s का अमानà¥à¤¯ अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•ा" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "आधार पà¥à¤°à¤•ार %s के लिठअवैध नाम सूचकांक '%s'" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "'%s' बनाने के लिठअवैध तरà¥à¤•" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "'% s ' को कॉल करने पर:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "" +msgstr "मà¥à¤«à¥à¤¤" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "संतà¥à¤²à¤¿à¤¤" #: editor/animation_bezier_editor.cpp msgid "Mirror" @@ -72,12 +72,11 @@ msgstr "" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "" +msgstr "चाबी यहां डालें" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन" +msgstr "चयनित चाबी (फ़ाइलें) डà¥à¤ªà¥à¤²à¤¿à¤•ेट" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -86,7 +85,7 @@ msgstr "चयनित फ़ाइलें हटाà¤à¤‚?" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "" +msgstr "Anim डà¥à¤ªà¥à¤²à¤¿à¤•ेट चाबी" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp #, fuzzy @@ -101,7 +100,7 @@ msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ निधि" #: editor/animation_track_editor.cpp #, fuzzy msgid "Anim Change Transition" -msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ संकà¥à¤°à¤®à¤£ (à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨)" +msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ बà¥à¤²à¤¾à¤µà¤¾" #: editor/animation_track_editor.cpp #, fuzzy @@ -109,9 +108,8 @@ msgid "Anim Change Transform" msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ परिणत" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ निधि" +msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ मà¥à¤–à¥à¤¯-फ़à¥à¤°à¥‡à¤® मूलà¥à¤¯(Value) बदलें" #: editor/animation_track_editor.cpp msgid "Anim Change Call" @@ -119,45 +117,45 @@ msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ बà¥à¤²à¤¾à¤µà¤¾" #: editor/animation_track_editor.cpp msgid "Property Track" -msgstr "" +msgstr "गà¥à¤£(Property) टà¥à¤°à¥ˆà¤•" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "" +msgstr "3 डी टà¥à¤°à¥ˆà¤• रूपांतरण" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "कॉल मेथड टà¥à¤°à¥ˆà¤•" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "बेज़ियर वकà¥à¤° टà¥à¤°à¥ˆà¤•" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "ऑडियो पà¥à¤²à¥‡à¤¬à¥ˆà¤• टà¥à¤°à¥ˆà¤•" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "" +msgstr "à¤à¤¨à¤¿à¤®à¥‡à¤¶à¤¨ पà¥à¤²à¥‡à¤¬à¥ˆà¤• टà¥à¤°à¥ˆà¤•" #: editor/animation_track_editor.cpp #, fuzzy msgid "Add Track" -msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ टà¥à¤°à¥ˆà¤• जोड़ें" +msgstr "टà¥à¤°à¥ˆà¤• जोड़ें" #: editor/animation_track_editor.cpp msgid "Animation Length Time (seconds)" -msgstr "" +msgstr "à¤à¤¨à¤¿à¤®à¥‡à¤¶à¤¨ लंबाई समय (सेकंडà¥à¤¸)" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "" +msgstr "à¤à¤¨à¤¿à¤®à¥‡à¤¶à¤¨ लूप" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" -msgstr "" +msgstr "कारà¥à¤¯à¥‹à¤‚:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" @@ -387,8 +385,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Duplicate Selection" msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन" @@ -403,11 +400,11 @@ msgid "Delete Selection" msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -510,11 +507,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -547,11 +544,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "बड़ा करो" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "रेखा:" @@ -585,6 +581,7 @@ msgstr "जोड़ें" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -670,7 +667,7 @@ msgid "Edit Connection: " msgstr "परिवरà¥à¤¤à¤¨ वकà¥à¤° चयन" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -725,17 +722,14 @@ msgstr "हाल ही में किया:" msgid "Search:" msgstr "खोज कर:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "à¤à¤• जैसा:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "विवरण:" @@ -799,9 +793,10 @@ msgid "Search Replacement Resource:" msgstr "खोज रिपà¥à¤²à¥‡à¤¸à¤®à¥‡à¤‚ट संसाधन:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -834,7 +829,8 @@ msgid "Error loading:" msgstr "लोड होने मे तà¥à¤°à¥à¤Ÿà¤¿:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "लापता निरà¥à¤à¤°à¤¤à¤¾à¤“ं के कारण दृशà¥à¤¯ लोड करने में विफल रहे:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -894,14 +890,6 @@ msgstr "शबà¥à¤¦ बदलें मूलà¥à¤¯" msgid "Thanks from the Godot community!" msgstr "गोडोट समà¥à¤¦à¤¾à¤¯ से आपको धनà¥à¤¯à¤µà¤¾à¤¦!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "गॉडोट इंजन योगदानकरà¥à¤¤à¤¾" @@ -1085,8 +1073,7 @@ msgid "Bus options" msgstr "बस विकलà¥à¤ª" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" @@ -1253,8 +1240,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1324,11 +1312,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1336,12 +1328,13 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "खोलो इसे" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1377,7 +1370,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1435,8 +1429,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1452,24 +1445,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1486,27 +1466,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1534,8 +1514,14 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" -msgstr "" +#, fuzzy +msgid "Class Description" +msgstr "विवरण:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "विवरण:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1549,12 +1535,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "विवरण:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "विवरण:" #: editor/editor_help.cpp msgid "" @@ -1563,12 +1551,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "विवरण:" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "विवरण:" #: editor/editor_help.cpp msgid "" @@ -1576,11 +1566,53 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "संकेत" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1614,6 +1646,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1668,10 +1705,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1899,6 +1946,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1939,6 +1992,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -2021,7 +2079,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2050,7 +2108,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2088,6 +2146,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2195,10 +2254,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2221,11 +2276,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "समà¥à¤¦à¤¾à¤¯" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "के बारे में" #: editor/editor_node.cpp msgid "Play the project." @@ -2292,21 +2347,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2443,7 +2498,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2467,7 +2522,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2479,7 +2534,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2487,6 +2542,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2504,10 +2573,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2516,7 +2581,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2799,6 +2865,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "पसंदीदा:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2837,7 +2908,7 @@ msgstr "लोड होने मे तà¥à¤°à¥à¤Ÿà¤¿:" msgid "Unable to update dependencies:" msgstr "लापता निरà¥à¤à¤°à¤¤à¤¾à¤“ं के कारण दृशà¥à¤¯ लोड करने में विफल रहे:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2876,27 +2947,20 @@ msgid "Duplicating folder:" msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" -msgstr "" +#, fuzzy +msgid "Add to favorites" +msgstr "पसंदीदा:" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp @@ -2907,12 +2971,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp msgid "New Script..." msgstr "" @@ -2921,6 +2993,14 @@ msgstr "" msgid "New Resource..." msgstr "संसाधन" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2941,33 +3021,25 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "खोज कर:" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "खोज कर:" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2984,28 +3056,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Find: " +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Whole words" +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "à¤à¤• जैसा:" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3022,6 +3085,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3180,17 +3247,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3429,6 +3491,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3800,10 +3867,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4125,6 +4188,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4188,6 +4255,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4282,6 +4353,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4332,6 +4407,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4766,8 +4845,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4796,6 +4874,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4865,11 +4948,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5199,22 +5282,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5245,6 +5328,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5343,11 +5430,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5418,7 +5501,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5426,10 +5509,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5464,17 +5543,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +#, fuzzy +msgid "Search Results" +msgstr "खोज कर:" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -5486,6 +5557,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "कारà¥à¤¯à¥‹à¤‚:" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5572,11 +5648,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5593,19 +5669,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5613,15 +5681,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5714,6 +5782,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5878,6 +5954,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5977,10 +6057,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6379,6 +6455,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6424,25 +6505,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "सà¤à¥€ खंड" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ परिणत" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6470,7 +6556,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6486,7 +6572,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6562,6 +6648,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6570,6 +6664,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6628,6 +6726,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7078,11 +7184,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" - -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" +msgstr "सामानà¥à¤¯" #: editor/project_settings_editor.cpp msgid "Override For..." @@ -7217,10 +7319,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7304,7 +7402,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7313,7 +7411,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7354,7 +7452,7 @@ msgstr "" msgid "Reset" msgstr "रीसेट आकार" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7413,6 +7511,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7449,6 +7551,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7521,6 +7629,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7529,11 +7641,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7683,6 +7795,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7771,19 +7887,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7815,18 +7919,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8246,11 +8338,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8520,6 +8608,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8618,11 +8710,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8700,6 +8792,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8738,6 +8836,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8855,6 +8959,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8874,6 +8988,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8906,7 +9038,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8977,10 +9109,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8988,6 +9116,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9055,6 +9187,14 @@ msgid "Varyings can only be assigned in vertex function." msgstr "" #, fuzzy +#~ msgid "Zoom:" +#~ msgstr "बड़ा करो" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "à¤à¤• जैसा:" + +#, fuzzy #~ msgid "Disabled" #~ msgstr "बंद कर दिया गया है" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 1518b02617..7fb0a8b353 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -26,7 +26,7 @@ msgstr "" "Érvénytelen tÃpus argumentum a convert()-hez használjon TYPE_* konstansokat." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Nincs elég bájt a bájtok dekódolására, vagy hibás formátum." @@ -403,8 +403,7 @@ msgstr "Kiválasztás átméretezés" msgid "Scale From Cursor" msgstr "Ãtméretezés a kurzortól" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Kiválasztás megkettÅ‘zés" @@ -418,11 +417,13 @@ msgid "Delete Selection" msgstr "Kijelölés Középre" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Ugrás a következÅ‘ lépésre" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Ugrás az elÅ‘zÅ‘ lépésre" #: editor/animation_track_editor.cpp @@ -525,11 +526,11 @@ msgstr "Nincs Találat" msgid "Replaced %d occurrence(s)." msgstr "Lecserélve %d elÅ‘fordulás." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Pontos Egyezés" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Teljes Szavak" @@ -563,10 +564,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "NagyÃtás" +msgid "Font Size:" +msgstr "Körvonal Mérete:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Sor:" @@ -599,6 +600,7 @@ msgstr "Hozzáad" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -679,7 +681,7 @@ msgid "Edit Connection: " msgstr "Kapcsolathiba" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -734,17 +736,14 @@ msgstr "Legutóbbi:" msgid "Search:" msgstr "Keresés:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Találatok:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "LeÃrás:" @@ -805,9 +804,10 @@ msgid "Search Replacement Resource:" msgstr "Csere Forrás Keresése:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -839,7 +839,8 @@ msgid "Error loading:" msgstr "Hiba betöltéskor:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "A Jelenetet nem sikerült betölteni a hiányzó függÅ‘ségek miatt:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -898,14 +899,6 @@ msgstr "Szótár Érték MódosÃtása" msgid "Thanks from the Godot community!" msgstr "Köszönet a Godot közösségétÅ‘l!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine közreműködÅ‘k" @@ -1081,8 +1074,7 @@ msgid "Bus options" msgstr "Busz beállÃtások" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "MegkettÅ‘zés" @@ -1250,8 +1242,9 @@ msgstr "Útvonal:" msgid "Node Name:" msgstr "Node neve:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Név" @@ -1321,11 +1314,16 @@ msgid "Template file not found:" msgstr "Sablon fájl nem található:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Aktuális Mappa Kiválasztása" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Fájl Létezik, FelülÃrja?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +#, fuzzy +msgid "Select This Folder" msgstr "Aktuális Mappa Kiválasztása" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1334,12 +1332,13 @@ msgstr "Útvonal másolása" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Mutat FájlkezelÅ‘ben" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Mutat FájlkezelÅ‘ben" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1375,7 +1374,8 @@ msgid "Open a File or Directory" msgstr "Fájl vagy Könyvtár Megnyitása" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Mentés" @@ -1433,8 +1433,7 @@ msgstr "Könyvtárak és Fájlok:" msgid "Preview:" msgstr "ElÅ‘nézet:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Fájl:" @@ -1450,24 +1449,11 @@ msgstr "Források Vizsgálata" msgid "(Re)Importing Assets" msgstr "Eszközök (Újra) Betöltése" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Keresés Súgóban" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Osztálylista:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Osztályok Keresése" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Eleje" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Osztály:" @@ -1484,28 +1470,31 @@ msgid "Brief Description:" msgstr "Rövid LeÃrás:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Tagok" +msgid "Properties" +msgstr "Tulajdonságok" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Tagok:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Publikus Metódusok" +msgid "Methods" +msgstr "Metódusok" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Publikus Metódusok:" +#, fuzzy +msgid "Methods:" +msgstr "Metódusok" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI Téma Elemek" +#, fuzzy +msgid "Theme Properties" +msgstr "Tulajdonságok" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI Téma Elemek:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Tulajdonságok" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1532,10 +1521,16 @@ msgid "Constants:" msgstr "Konstansok:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "LeÃrás" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "LeÃrás:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Online Oktatóanyagok:" @@ -1550,11 +1545,13 @@ msgstr "" "$url2]kérvényezhet egyet[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Tulajdonságok" +#, fuzzy +msgid "Property Descriptions" +msgstr "Tulajdonság LeÃrása:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Tulajdonság LeÃrása:" #: editor/editor_help.cpp @@ -1566,11 +1563,13 @@ msgstr "" "[color=$color][url=$url]hozzájárul eggyel[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metódusok" +#, fuzzy +msgid "Method Descriptions" +msgstr "Metódus LeÃrás:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Metódus LeÃrás:" #: editor/editor_help.cpp @@ -1581,12 +1580,61 @@ msgstr "" "Ennek a metódusnak jelenleg nincs leÃrása. SegÃtsen minket azzal, hogy " "[color=$color][url=$url]hozzájárul eggyel[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Keresés Súgóban" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Mind Lecserélése" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Classes Only" +msgstr "Osztályok" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metódusok" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Jelzések" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstansok" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Tulajdonságok" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "Tulajdonságok" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Tagok" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Osztály:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1620,6 +1668,11 @@ msgstr "Projekt export nem sikerült, hibakód %d." msgid "Error saving resource!" msgstr "Hiba történt az erÅ‘forrás mentésekor!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "ErÅ‘forrás Mentése Másként..." @@ -1674,12 +1727,22 @@ msgstr "Ezt a műveletet nem lehet fagyökér nélkül végrehajtani." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Nem sikerült a Scene mentése. ValószÃnű, hogy a függÅ‘ségei (példányok vagy " "öröklések) nem voltak megfelelÅ‘ek." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Nem lehet betölteni a MeshLibrary-t összeolvasztásra!" @@ -1944,6 +2007,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Nem sikerült az addon szkript betöltése a következÅ‘ útvonalról: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Nem sikerült az addon szkript betöltése a következÅ‘ útvonalról: '%s' A " +"szkript nem eszközmódban van." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1994,6 +2066,12 @@ msgstr "Elrendezés Törlése" msgid "Default" msgstr "Alapértelmezett" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Mutassa a Fájlrendszerben" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2077,7 +2155,8 @@ msgid "Save Scene" msgstr "Scene mentés" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Minden Scene mentés" #: editor/editor_node.cpp @@ -2106,7 +2185,7 @@ msgid "Undo" msgstr "Visszavonás" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Mégis" @@ -2144,6 +2223,7 @@ msgid "Quit to Project List" msgstr "Kilépés a Projektlistába" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Hibakeresés" @@ -2273,10 +2353,6 @@ msgstr "Export Sablonok Kezelése" msgid "Help" msgstr "Súgó" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Osztályok" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2371,24 +2447,24 @@ msgstr "Változások FrissÃtése" msgid "Disable Update Spinner" msgstr "FrissÃtési Forgó Kikapcsolása" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "MegfigyelÅ‘" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importálás" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Fájlrendszer" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "MegfigyelÅ‘" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Összes kibontása" @@ -2526,7 +2602,7 @@ msgstr "Keret %" msgid "Physics Frame %" msgstr "Fizika Keret %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "IdÅ‘:" @@ -2550,7 +2626,7 @@ msgstr "IdÅ‘" msgid "Calls" msgstr "HÃvások" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2562,7 +2638,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2570,6 +2646,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2587,10 +2677,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2599,7 +2685,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Beillesztés" @@ -2891,6 +2978,11 @@ msgstr "" "gyorsÃtótár nem lesz mentve!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Kedvencek:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "Nem lehet '%s'-t elérni, mivel nem létezik a fájlrendszerben!" @@ -2930,7 +3022,7 @@ msgstr "Hiba másoláskor:" msgid "Unable to update dependencies:" msgstr "Nem sikerült a függÅ‘ségek frissÃtése:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nincs név megadva" @@ -2967,22 +3059,6 @@ msgid "Duplicating folder:" msgstr "Mappa másolása:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Összes kibontása" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Összes összecsukása" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Ãtnevezés..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Ãthelyezés..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Scene(k) megnyitás" @@ -2991,6 +3067,16 @@ msgid "Instance" msgstr "Példány" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Kedvencek:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "EltávolÃtás Csoportból" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "FüggÅ‘ségek Szerkesztése..." @@ -2998,11 +3084,19 @@ msgstr "FüggÅ‘ségek Szerkesztése..." msgid "View Owners..." msgstr "Tulajdonosok Megtekintése..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Ãtnevezés..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "MegkettÅ‘zés..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Ãthelyezés..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Szkript gyors megnyitás..." @@ -3012,6 +3106,16 @@ msgstr "Szkript gyors megnyitás..." msgid "New Resource..." msgstr "ErÅ‘forrás Mentése Másként..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Összes kibontása" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Összes összecsukása" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3033,27 +3137,19 @@ msgstr "Fájlrendszer Újra-vizsgálata" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Mappa Kedvencnek jelölése / Kedvenc jelölés visszavonása" +msgid "Toggle split mode" +msgstr "Mód Váltása" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "Osztályok Keresése" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Kiválasztott Scene(k) példányosÃtása a kiválasztott Node gyermekeként." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Osztályok Keresése" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3061,7 +3157,7 @@ msgstr "" "Fájlok Vizsgálata,\n" "Kérem Várjon..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Ãthelyezés" @@ -3080,31 +3176,22 @@ msgstr "Szkript Létrehozása" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d további fájl" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Keres" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Teljes Szavak" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Pontos Egyezés" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Mappa Létrehozása" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "SzűrÅ‘k..." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3122,6 +3209,11 @@ msgstr "Mégse" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Keres" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Lecserélés" @@ -3287,17 +3379,14 @@ msgstr "Újraimportálás" msgid "Failed to load resource." msgstr "Nem sikerült betölteni az erÅ‘forrást." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Rendben" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Összes tulajdonság kibontása" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Összes tulajdonság összecsukása" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3548,6 +3637,11 @@ msgstr "" msgid "Snap" msgstr "Illesztés" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Keverés:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3928,10 +4022,6 @@ msgid "Amount:" msgstr "Mennyiség:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Keverés:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Keverés 0:" @@ -4273,6 +4363,11 @@ msgstr "CanvasItem Szerkesztése" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "CanvasItem Szerkesztése" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "CanvasItem Szerkesztése" @@ -4338,6 +4433,11 @@ msgid "Rotate Mode" msgstr "Forgató mód" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Kiválasztó Mód" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4437,6 +4537,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Újra kiválaszthatóvá teszi az objektum gyermekeit." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Egyke" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Csontok Mutatása" @@ -4488,6 +4593,10 @@ msgid "Show Viewport" msgstr "Nézet MegjelenÃtése" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Kijelölés Középre" @@ -4930,9 +5039,9 @@ msgid "Create Navigation Polygon" msgstr "Navigációs Sokszög Létrehozása" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "AABB Generálása" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Láthatósági Téglalap Generálása" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4960,6 +5069,12 @@ msgstr "Kibocsátási Maszk Törlése" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Konvertálás Nagybetűsre" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Részecskék" @@ -5029,13 +5144,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Egy 'ParticlesMaterial' tÃpusú feldolgozó anyag szükséges." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "AABB Generálása" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Konvertálás Nagybetűsre" +msgid "Generate AABB" +msgstr "AABB Generálása" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5379,22 +5493,22 @@ msgid "Paste Resource" msgstr "ErÅ‘forrás Beillesztése" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Megnyitás SzerkesztÅ‘ben" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Példány:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "TÃpus:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Megnyitás SzerkesztÅ‘ben" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "ErÅ‘forrás Betöltése" @@ -5427,6 +5541,11 @@ msgstr "Hiba TileSet mentésekor!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Nem sikerült létrehozni a mappát." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Nem sikerült létrehozni a mappát." @@ -5528,11 +5647,8 @@ msgid "Copy Script Path" msgstr "Szkript Útvonal Másolása" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Mutassa a Fájlrendszerben" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "ElÅ‘zÅ‘ ElÅ‘zmény" #: editor/plugins/script_editor_plugin.cpp @@ -5603,7 +5719,8 @@ msgid "Keep Debugger Open" msgstr "HibakeresÅ‘ Nyitva Tartása" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Hibakeresés külsÅ‘ szerkesztÅ‘vel" #: editor/plugins/script_editor_plugin.cpp @@ -5611,10 +5728,6 @@ msgid "Open Godot online documentation" msgstr "Godot online dokumentáció megnyitása" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Keresés az osztályhierarchiában." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Keresés a referencia dokumentációban." @@ -5652,21 +5765,9 @@ msgstr "HibakeresÅ‘" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Keresés Súgóban" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Osztályok Keresése" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"A beépÃtett szkriptek csak akkor szerkeszthetÅ‘ek, amikor az a Scene amihez " -"tartoznak éppen be van töltve" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5677,6 +5778,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Ugrás Funkcióra..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Csak a fájlrendszerbÅ‘l eredÅ‘ erÅ‘forrásokat lehet bedobni." @@ -5764,11 +5870,13 @@ msgid "Trim Trailing Whitespace" msgstr "Sorvégi Szóközök LenyÃrása" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Behúzások Ãtkonvertálása Szóközökre" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Behúzások Ãtkonvertálása Tabokra" #: editor/plugins/script_text_editor.cpp @@ -5785,36 +5893,32 @@ msgid "Remove All Breakpoints" msgstr "Összes Töréspont EltávolÃtása" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Ugrás KövetkezÅ‘ Töréspontra" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Ugrás ElÅ‘zÅ‘ Töréspontra" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Konvertálás Nagybetűsre" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Konvertálás Kisbetűsre" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "ElÅ‘zÅ‘ Keresése" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Fájlok Szűrése..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Ugrás Funkcióra..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Ugrás Sorra..." #: editor/plugins/script_text_editor.cpp @@ -5910,6 +6014,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6075,6 +6187,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6174,11 +6290,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Rácshoz illesztés" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6582,6 +6693,11 @@ msgid "Fix Invalid Tiles" msgstr "Érvénytelen név." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Kijelölés Középre" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6628,25 +6744,32 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Kiválasztás eltávolÃtás" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "Forgató mód" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "" +#, fuzzy +msgid "Rotate right" +msgstr "Sokszög Forgatása" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Animáció transzformáció változtatás" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6675,7 +6798,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6691,7 +6814,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6769,6 +6892,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportálás" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6777,6 +6909,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Projekt Exportálása" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6835,6 +6972,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Projekt Exportálása" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exportálás" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7284,10 +7431,6 @@ msgstr "" msgid "General" msgstr "Ãltalános" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7421,10 +7564,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7515,7 +7654,7 @@ msgid "Step" msgstr "Lépés (mp):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7524,7 +7663,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7567,7 +7706,7 @@ msgstr "Mind Nagybetű" msgid "Reset" msgstr "NagyÃtás VisszaállÃtása" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7626,6 +7765,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7662,6 +7805,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7737,6 +7886,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Godot online dokumentáció megnyitása" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7745,12 +7899,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Szkript Futtatása" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7903,6 +8058,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "A háló üres!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7991,19 +8151,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8035,18 +8183,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8469,12 +8605,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Besütés!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "A navigációs mesh besütése." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8751,6 +8883,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Tagok:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8851,11 +8987,11 @@ msgid "Search VisualScript" msgstr "Keresés Súgóban" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8933,6 +9069,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8971,6 +9113,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9088,6 +9236,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9107,6 +9265,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9139,7 +9315,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9215,10 +9391,6 @@ msgstr "Figyelem!" msgid "Please Confirm..." msgstr "Kérem ErÅ‘sÃtse Meg..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9226,6 +9398,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9297,6 +9473,77 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "NagyÃtás" + +#~ msgid "Class List:" +#~ msgstr "Osztálylista:" + +#~ msgid "Search Classes" +#~ msgstr "Osztályok Keresése" + +#~ msgid "Public Methods" +#~ msgstr "Publikus Metódusok" + +#~ msgid "Public Methods:" +#~ msgstr "Publikus Metódusok:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI Téma Elemek" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI Téma Elemek:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Tulajdonságok" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Mappa Kedvencnek jelölése / Kedvenc jelölés visszavonása" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Teljes Szavak" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Pontos Egyezés" + +#~ msgid "Ok" +#~ msgstr "Rendben" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Keresés az osztályhierarchiában." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Osztályok Keresése" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "A beépÃtett szkriptek csak akkor szerkeszthetÅ‘ek, amikor az a Scene " +#~ "amihez tartoznak éppen be van töltve" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Konvertálás Nagybetűsre" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Konvertálás Kisbetűsre" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Rácshoz illesztés" + +#~ msgid "Bake!" +#~ msgstr "Besütés!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "A navigációs mesh besütése." + #~ msgid "Change Scalar Constant" #~ msgstr "Skaláris állandó változtatás" diff --git a/editor/translations/id.po b/editor/translations/id.po index d8ffaf2e05..a63dd99bc3 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -35,7 +35,7 @@ msgstr "" "Tipe argument salah dalam menggunakan convert(), gunakan konstanta TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Tidak cukup bytes untuk menerjemahkan, atau format tidak sah." @@ -411,8 +411,7 @@ msgstr "Seleksi Skala" msgid "Scale From Cursor" msgstr "Skala dari Kursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplikat Pilihan" @@ -426,11 +425,13 @@ msgid "Delete Selection" msgstr "Hapus yang Dipilih" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Lanjut ke Langkah Berikutnya" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Lanjut ke Langkah Sebelumnya" #: editor/animation_track_editor.cpp @@ -533,11 +534,11 @@ msgstr "Tidak ada yang cocok" msgid "Replaced %d occurrence(s)." msgstr "%d kejadian diganti." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Kasus Kecocokan" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Semua Kata" @@ -571,10 +572,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Perbesar Pandangan" +msgid "Font Size:" +msgstr "Tampilan Depan." -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Baris:" @@ -607,6 +608,7 @@ msgstr "Tambah" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -688,7 +690,7 @@ msgstr "Gangguan Koneksi" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "Apakah Anda yakin menjalankan lebih dari satu projek?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -743,17 +745,14 @@ msgstr "Saat ini:" msgid "Search:" msgstr "Cari:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Kecocokan:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Deskripsi:" @@ -814,9 +813,10 @@ msgid "Search Replacement Resource:" msgstr "Cari Resource Pengganti:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -850,7 +850,8 @@ msgid "Error loading:" msgstr "Error saat memuat:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Scene gagal dimuat disebabkan oleh dependensi yang hilang:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -909,14 +910,6 @@ msgstr "Ubah Nilai Kamus" msgid "Thanks from the Godot community!" msgstr "Terimakasih dari komunitas Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Oke" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine kontributor" @@ -1092,8 +1085,7 @@ msgid "Bus options" msgstr "Opsi Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Gandakan" @@ -1263,8 +1255,9 @@ msgstr "Path:" msgid "Node Name:" msgstr "Nama Node:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nama" @@ -1334,12 +1327,17 @@ msgid "Template file not found:" msgstr "Templat berkas tidak ditemukan:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Pilih Folder Saat Ini" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "File telah ada, Overwrite?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Pilih Folder Saat Ini" +#, fuzzy +msgid "Select This Folder" +msgstr "Pilih Folder ini" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1347,12 +1345,13 @@ msgstr "Salin Lokasi" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Tampilkan di Manajer Berkas" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Tampilkan di Manajer Berkas" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1388,7 +1387,8 @@ msgid "Open a File or Directory" msgstr "Buka sebuah File atau Direktori" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Simpan" @@ -1446,8 +1446,7 @@ msgstr "Direktori-direktori & File-file:" msgid "Preview:" msgstr "Pratinjau:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "File:" @@ -1463,24 +1462,11 @@ msgstr "Sumber Pemindaian" msgid "(Re)Importing Assets" msgstr "Mengimpor ulang Aset" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Mencari Bantuan" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Daftar Class:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Cari Kelas" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Atas" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Kelas:" @@ -1497,28 +1483,31 @@ msgid "Brief Description:" msgstr "Deskripsi Singkat:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Anggota" +msgid "Properties" +msgstr "Properti Objek" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Member-member:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Metode Publik" +msgid "Methods" +msgstr "Fungsi" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Metode Publik:" +#, fuzzy +msgid "Methods:" +msgstr "Fungsi" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Item Tema GUI" +#, fuzzy +msgid "Theme Properties" +msgstr "Properti Objek" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Item-item Tema GUI:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Properti Objek" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1545,10 +1534,16 @@ msgid "Constants:" msgstr "Konstanta:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Deskripsi" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Deskripsi:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Tutorial Daring:" @@ -1563,11 +1558,13 @@ msgstr "" "$url2]memberikan usulan[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Properti Objek" +#, fuzzy +msgid "Property Descriptions" +msgstr "Deskripsi Properti Objek:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Deskripsi Properti Objek:" #: editor/editor_help.cpp @@ -1579,11 +1576,13 @@ msgstr "" "dengan[color=$color][url=$url]kontribusi[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Fungsi" +#, fuzzy +msgid "Method Descriptions" +msgstr "Deskripsi Metode:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Deskripsi Metode:" #: editor/editor_help.cpp @@ -1594,12 +1593,61 @@ msgstr "" "Untuk saat ini tidak ada deskripsi metode ini. Tolong bantu kita dengan " "[color=$color][url=$url]kontribusi[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Mencari Bantuan" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Ganti Semua" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Kelas" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Fungsi" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Signals Only" +msgstr "Sinyal-sinyal" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstanta" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Properti Objek" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "Properti Objek" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Anggota" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Kelas:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1633,6 +1681,11 @@ msgstr "Ekspor proyek gagal dengan kode kesalahan% d." msgid "Error saving resource!" msgstr "Error menyimpan resource!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Oke" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Simpan Resource Sebagai..." @@ -1687,12 +1740,22 @@ msgstr "Operasi ini tidak dapat diselesaikan tanpa root pohon." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Tidak dapat menyimpan scene. Dependensi (instance atau turunannya) mungkin " "tidak terpenuhi." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Tidak dapat memuat MeshLibrary untuk menggabungkan!" @@ -1950,6 +2013,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Tidak bisa memuat script addon dari lokasi: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Tidak dapat memuat addon script dari jalur: '%s' Script tidak pada mode tool." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1998,6 +2069,12 @@ msgstr "Hapus Penampilan" msgid "Default" msgstr "Bawaan" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Tampilkan dalam Manajer Berkas" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2082,7 +2159,8 @@ msgid "Save Scene" msgstr "Simpan Scene" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Simpan semua Scene" #: editor/editor_node.cpp @@ -2111,7 +2189,7 @@ msgid "Undo" msgstr "Batal" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Ulangi" @@ -2149,6 +2227,7 @@ msgid "Quit to Project List" msgstr "Keluar ke daftar proyek" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "\"Debug\"" @@ -2277,10 +2356,6 @@ msgstr "Mengatur Templat Ekspor" msgid "Help" msgstr "Bantuan" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Kelas" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2375,24 +2450,24 @@ msgstr "Perbarui Perubahan" msgid "Disable Update Spinner" msgstr "Nonaktifkan Perbaruan Spinner" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspektur" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Impor" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Berkas Sistem" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspektur" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Perluas semua" @@ -2530,7 +2605,7 @@ msgstr "Bingkai %" msgid "Physics Frame %" msgstr "Frame Fisika %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Waktu:" @@ -2554,7 +2629,7 @@ msgstr "Waktu" msgid "Calls" msgstr "Panggil" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2566,7 +2641,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2574,6 +2649,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2593,11 +2682,6 @@ msgstr "" msgid "Make Unique" msgstr "Membuat sub-Resource Unik" -#: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy -msgid "Show in File System" -msgstr "Tampilkan dalam Manajer Berkas" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2606,7 +2690,8 @@ msgstr "Tampilkan dalam Manajer Berkas" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Tempel" @@ -2900,6 +2985,11 @@ msgstr "" "disimpan!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favorit:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "'%s' tidak bisa ditelusuri karena tidak bisa ditemukan dalam berkas sistem!" @@ -2940,7 +3030,7 @@ msgstr "Galat saat menggandakan berkas:" msgid "Unable to update dependencies:" msgstr "Tidak bisa memperbarui dependensi:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nama masih kosong" @@ -2977,22 +3067,6 @@ msgid "Duplicating folder:" msgstr "Menggandakan folder:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Perluas semua" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Ciutkan semua" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Ubah Nama..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Pindahkan ke..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Buka Scene" @@ -3001,6 +3075,16 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favorit:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Hapus dari Grup" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Sunting Dependensi..." @@ -3008,11 +3092,19 @@ msgstr "Sunting Dependensi..." msgid "View Owners..." msgstr "Tampilkan Pemilik Berkas..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Ubah Nama..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Gandakan..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Pindahkan ke..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Scene Baru" @@ -3022,6 +3114,16 @@ msgstr "Scene Baru" msgid "New Resource..." msgstr "Simpan Resource Sebagai..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Perluas semua" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Ciutkan semua" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3043,28 +3145,19 @@ msgstr "Pindai Ulang Berkas Sistem" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Kondisikan status folder sebagai Favorit" +msgid "Toggle split mode" +msgstr "Beralih Mode" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Simpan sumber yang sedang diatur." +msgid "Search files" +msgstr "Cari Kelas" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instance scene terpilih sebagai anak node saat ini." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Cari Kelas" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3072,7 +3165,7 @@ msgstr "" "Memindai Berkas,\n" "Silakan Tunggu..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Pindahkan" @@ -3091,31 +3184,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d file lagi" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Cari" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Semua Kata" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Kasus Kecocokan" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Buat Folder" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filter:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3133,6 +3217,11 @@ msgstr "Batal" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Cari" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Ganti" @@ -3298,17 +3387,14 @@ msgstr "Impor ulang" msgid "Failed to load resource." msgstr "Gagal memuat resource." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Perluas semua properti" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Ciutkan semua properti" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3564,6 +3650,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -3955,10 +4046,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4303,6 +4390,11 @@ msgstr "Sunting CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Sunting CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Sunting CanvasItem" @@ -4366,6 +4458,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Beralih Mode" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4461,6 +4558,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4512,6 +4614,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4960,8 +5066,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4990,6 +5095,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Sambungkan Ke Node:" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Partikel" @@ -5059,13 +5170,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Sambungkan Ke Node:" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5407,23 +5517,23 @@ msgid "Paste Resource" msgstr "Tempel Resource" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -#, fuzzy -msgid "Open in Editor" -msgstr "Buka dalam Penyunting" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +#, fuzzy +msgid "Open in Editor" +msgstr "Buka dalam Penyunting" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5457,6 +5567,11 @@ msgstr "Error menyimpan TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Tidak dapat membuat folder." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Tidak dapat membuat folder." @@ -5561,12 +5676,8 @@ msgstr "Salin Resource" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "Tampilkan dalam Manajer Berkas" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +msgid "History Previous" +msgstr "Tab sebelumnya" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5639,7 +5750,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "Debug menggunakan penyunting eksternal" #: editor/plugins/script_editor_plugin.cpp @@ -5647,10 +5758,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5688,19 +5795,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Mencari Bantuan" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Cari Kelas" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "Skrip built-in hanya bisa disunting ketika scene induknya dimuat" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5711,6 +5808,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Tambahkan Fungsi" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5799,12 +5901,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "Sambungkan Ke Node:" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "Sambungkan Ke Node:" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5820,21 +5924,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Lanjut ke Langkah Berikutnya" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Lowercase" -msgstr "Sambungkan Ke Node:" +msgid "Go to Previous Breakpoint" +msgstr "Ke dokumen yang disunting sebelumnya." #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5842,16 +5939,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Saring berkas..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Hapus Fungsi" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "Pergi ke Baris" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5947,6 +6046,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6120,6 +6227,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6222,10 +6333,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Toggle Freelook" msgstr "Mode Layar Penuh" @@ -6636,6 +6743,11 @@ msgid "Fix Invalid Tiles" msgstr "Nama tidak sah." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Beri Skala Seleksi" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6683,25 +6795,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Hapus Pilihan" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Ubah Transformasi Animasi" + #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Add Texture(s) to TileSet" @@ -6731,7 +6848,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6747,7 +6864,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6831,6 +6948,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Mengekspor untuk %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6839,6 +6965,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Ekspor Projek" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6899,6 +7030,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Ekspor Projek" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Ekspor" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7376,10 +7517,6 @@ msgstr "" msgid "General" msgstr "Umum" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7517,10 +7654,6 @@ msgstr "Path ke Node:" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp #, fuzzy msgid "Select Property" @@ -7613,7 +7746,7 @@ msgid "Step" msgstr "Langkah:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7622,7 +7755,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7665,7 +7798,7 @@ msgstr "" msgid "Reset" msgstr "Kebalikan Semula Pandangan" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7724,6 +7857,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "Scene Baru" @@ -7761,6 +7898,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7837,6 +7980,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Buka baru-baru ini" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7845,12 +7993,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Buka Cepat Script..." #: editor/scene_tree_dock.cpp #, fuzzy @@ -8008,6 +8157,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -8105,19 +8258,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8150,18 +8291,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8607,11 +8736,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8907,6 +9032,10 @@ msgid "Base Type:" msgstr "Tipe Dasar:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Member-member:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Node-node yang Tersedia:" @@ -9013,11 +9142,11 @@ msgid "Search VisualScript" msgstr "Hapus Variabel" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9117,6 +9246,12 @@ msgstr "" "Sebuah bentuk harus disediakan untuk CollisionShape2D untuk fungsi. Mohon " "ciptakan resource bentuk untuk itu!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9165,6 +9300,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9297,6 +9438,16 @@ msgstr "" "Sebuah bentuk harus disediakan untuk CollisionShape untuk fungsi. Mohon " "ciptakan sebuah resource bentuk untuk itu!" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9320,6 +9471,30 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D hanya bekerja ketika diatur sebagai sebuah child dari sebuah " +"node Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D hanya bekerja ketika diatur sebagai sebuah child dari sebuah " +"node Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9357,7 +9532,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9433,10 +9608,6 @@ msgstr "Peringatan!" msgid "Please Confirm..." msgstr "Mohon konfirmasi..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Pilih Folder ini" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9447,6 +9618,10 @@ msgstr "" "dari fungsi-fungsi popup*(). Meskipun membuat mereka terlihat untuk mengedit " "itu baik, tetapi mereka akan sembunyi saat berjalan." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9521,6 +9696,65 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Perbesar Pandangan" + +#~ msgid "Class List:" +#~ msgstr "Daftar Class:" + +#~ msgid "Search Classes" +#~ msgstr "Cari Kelas" + +#~ msgid "Public Methods" +#~ msgstr "Metode Publik" + +#~ msgid "Public Methods:" +#~ msgstr "Metode Publik:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Item Tema GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Item-item Tema GUI:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Properti Objek" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Kondisikan status folder sebagai Favorit" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Simpan sumber yang sedang diatur." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Semua Kata" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Kasus Kecocokan" + +#, fuzzy +#~ msgid "Show In File System" +#~ msgstr "Tampilkan dalam Manajer Berkas" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Cari Kelas" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "Skrip built-in hanya bisa disunting ketika scene induknya dimuat" + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "Sambungkan Ke Node:" + #~ msgid "Disabled" #~ msgstr "Dinonaktifkan" @@ -9788,9 +10022,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Tidak dapat menyimpan sub tekstur atlas:" -#~ msgid "Exporting for %s" -#~ msgstr "Mengekspor untuk %s" - #~ msgid "Setting Up..." #~ msgstr "Mengatur..." diff --git a/editor/translations/is.po b/editor/translations/is.po index 5aedc67388..0300245fc6 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -2,22 +2,20 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# -# Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017. +# Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017, 2018. # Kaan Gül <qaantum@hotmail.com>, 2018. -# msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-05 05:39+0000\n" -"Last-Translator: Kaan Gül <qaantum@hotmail.com>\n" +"PO-Revision-Date: 2018-10-15 19:30+0000\n" +"Last-Translator: Jóhannes G. Þorsteinsson <johannesg@johannesg.com>\n" "Language-Team: Icelandic <https://hosted.weblate.org/projects/godot-engine/" "godot/is/>\n" "Language: is\n" "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 3.0\n" +"X-Generator: Weblate 3.2.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -25,7 +23,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -85,14 +83,12 @@ msgid "Delete Selected Key(s)" msgstr "" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Duplicate Keys" -msgstr "TvÃteknir lyklar" +msgstr "Anim TvÃteknir lyklar" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Delete Keys" -msgstr "Anim DELETE-lyklar" +msgstr "Anim Eyða Lyklum" #: editor/animation_track_editor.cpp #, fuzzy @@ -373,7 +369,7 @@ msgstr "" #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "" +msgstr "Breyta" #: editor/animation_track_editor.cpp msgid "Animation properties." @@ -396,8 +392,7 @@ msgstr "Val á kvarða" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Duplicate Selection" msgstr "Afrita val" @@ -413,11 +408,11 @@ msgid "Delete Selection" msgstr "Afrita val" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -520,11 +515,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -557,10 +552,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -591,6 +586,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -664,12 +660,11 @@ msgid "Connect Signal: " msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Breyta valferil" +msgstr "Breyta Tengingu: " #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -686,7 +681,7 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "" +msgstr "Breyta..." #: editor/connections_dialog.cpp msgid "Go To Method" @@ -721,17 +716,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -788,9 +780,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -820,7 +813,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -879,14 +872,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -901,7 +886,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "" +msgstr "Verkefna Stjóri " #: editor/editor_about.cpp msgid "Developers" @@ -1058,8 +1043,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1226,8 +1210,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1297,11 +1282,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1309,12 +1298,13 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "Opna Verkefna Stjóra?" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1350,7 +1340,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1408,8 +1399,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1425,24 +1415,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1459,27 +1436,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1507,7 +1484,11 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" msgstr "" #: editor/editor_help.cpp @@ -1522,11 +1503,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" +msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1536,11 +1517,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" +msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1549,11 +1530,52 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1587,6 +1609,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1641,10 +1668,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1834,7 +1871,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "" +msgstr "Opna Verkefna Stjóra?" #: editor/editor_node.cpp msgid "Save & Quit" @@ -1847,6 +1884,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Vista breytingar á neðangreindum senu(m) áður en Verkefna Stjóri er opnaður?" #: editor/editor_node.cpp msgid "" @@ -1872,6 +1910,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1912,6 +1956,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1993,7 +2042,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2022,7 +2071,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2059,6 +2108,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2166,10 +2216,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2263,21 +2309,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2362,7 +2408,7 @@ msgstr "" #: editor/editor_plugin_settings.cpp msgid "Edit Plugin" -msgstr "" +msgstr "Breyta Viðbót" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2387,7 +2433,7 @@ msgstr "" #: editor/editor_plugin_settings.cpp msgid "Edit:" -msgstr "" +msgstr "Breyta:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp @@ -2414,7 +2460,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2438,7 +2484,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2450,7 +2496,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2458,6 +2504,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2475,10 +2535,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2487,7 +2543,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2768,6 +2825,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2803,7 +2864,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2840,43 +2901,43 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." -msgstr "" +msgstr "Breyta" #: editor/filesystem_dock.cpp msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Hreyfimynd Tvöfalda Lykla" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp msgid "New Script..." msgstr "" @@ -2884,6 +2945,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2904,11 +2973,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2916,20 +2985,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2946,27 +3007,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Find: " +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Whole words" +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Match case" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2983,6 +3036,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3139,17 +3196,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3385,6 +3437,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3753,10 +3810,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4078,6 +4131,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4138,6 +4195,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4232,6 +4293,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4282,6 +4347,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4716,8 +4785,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4746,6 +4814,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4815,11 +4888,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5147,22 +5220,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5192,6 +5265,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5288,11 +5365,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5363,7 +5436,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5371,10 +5444,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5409,16 +5478,7 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +msgid "Search Results" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5430,6 +5490,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5516,11 +5580,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5537,19 +5601,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5557,15 +5613,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5657,6 +5713,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5821,6 +5885,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5920,10 +5988,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6321,6 +6385,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Afrita val" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6366,25 +6435,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Fjarlægja val" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Breyta umbreytingu" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6412,7 +6486,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6428,7 +6502,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6504,6 +6578,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6512,6 +6594,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6570,6 +6656,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -6729,6 +6823,8 @@ msgid "" "Language changed.\n" "The UI will update next time the editor or project manager starts." msgstr "" +"Tungumáli breytt.\n" +"Viðmótið mun uppfærast við næstu ræsingu á tóli eða verkefna stjóra." #: editor/project_manager.cpp msgid "" @@ -6738,7 +6834,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Manager" -msgstr "" +msgstr "Verkefna Stjóri" #: editor/project_manager.cpp msgid "Project List" @@ -7018,10 +7114,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7155,10 +7247,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7243,7 +7331,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7252,7 +7340,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7292,7 +7380,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7351,6 +7439,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7387,6 +7479,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7457,6 +7555,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7465,11 +7567,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7619,6 +7721,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7707,19 +7813,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7751,18 +7845,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8181,11 +8263,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8455,6 +8533,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8553,11 +8635,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8635,6 +8717,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8673,6 +8761,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8790,6 +8884,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8809,6 +8913,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8841,7 +8963,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8910,10 +9032,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8921,6 +9039,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" diff --git a/editor/translations/it.po b/editor/translations/it.po index 4c60b4d34f..6a293bb667 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -20,12 +20,15 @@ # Ste d f <sdfilippo84@gmail.com>, 2018. # Salvo Permiracolo <salvoperm@gmail.com>, 2018. # Giovanni Tommasi <tommasig@gmail.com>, 2018. +# xxssmaoxx <simon.dottor@gmail.com>, 2018. +# Nicola Gramola <nicola.gramola@gmail.com>, 2018. +# Davide Wayan Mores <moresdavidewayan@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-08-18 17:38+0000\n" -"Last-Translator: Giovanni Tommasi <tommasig@gmail.com>\n" +"PO-Revision-Date: 2018-11-16 16:07+0000\n" +"Last-Translator: Davide Wayan Mores <moresdavidewayan@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -33,7 +36,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 3.2-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -41,7 +44,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Argomento tipo invalido per convert(), usare le costanti TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -50,11 +53,11 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Input non valido %i (non passato) nell'espressione" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self non può essere usato perché l'istanza è nulla (non passata)" #: core/math/expression.cpp #, fuzzy @@ -68,16 +71,15 @@ msgstr "Nome proprietà indice invalido '%s' nel nodo %s." #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Indice nominale '%s' invalido per il tipo base %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argomento invalido di tipo: " +msgstr "Argomento invalido di tipo '%s" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Alla chiamata di '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -86,7 +88,7 @@ msgstr "Gratuito" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Bilanciato" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -94,19 +96,16 @@ msgid "Mirror" msgstr "Specchia X" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Inserisci Key" +msgstr "Inserisci la chiave qui" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplica Selezione" +msgstr "Duplicare la(e) chiave selezionata(e)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Elimina selezionati" +msgstr "Eliminare la(e) Chiave(i) Selezionata(e)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -126,11 +125,11 @@ msgstr "Anim Cambia Transizione" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Anim Cambia Transform" +msgstr "Anim Cambia Trasformazione" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Anim Cambia Valore Chiave" +msgstr "Anim Cambia Valore Keyframe" #: editor/animation_track_editor.cpp msgid "Anim Change Call" @@ -426,8 +425,7 @@ msgstr "Scala Selezione" msgid "Scale From Cursor" msgstr "Scala da Cursore" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplica Selezione" @@ -441,11 +439,13 @@ msgid "Delete Selection" msgstr "Elimina selezionati" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Vai a Step Successivo" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Vai a Step Precedente" #: editor/animation_track_editor.cpp @@ -548,11 +548,11 @@ msgstr "Nessuna Corrispondenza" msgid "Replaced %d occurrence(s)." msgstr "Rimpiazzate %d occorrenze." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Controlla Maiuscole" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Parole Intere" @@ -587,10 +587,10 @@ msgstr "Avvertimento" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom(%):" +msgid "Font Size:" +msgstr "Dimensione Font sorgente:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Riga:" @@ -623,6 +623,7 @@ msgstr "Aggiungi" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -704,7 +705,7 @@ msgstr "Modifica Connessioni" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "Sei sicuro di voler eseguire più di un progetto?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -759,17 +760,14 @@ msgstr "Recenti:" msgid "Search:" msgstr "Cerca:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Corrispondenze:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descrizione:" @@ -830,9 +828,10 @@ msgid "Search Replacement Resource:" msgstr "Cerca Risorsa di Rimpiazzo:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -865,7 +864,8 @@ msgid "Error loading:" msgstr "Errore in caricamento:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Caricamento scena fallito per mancanza di dipendenze:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -924,14 +924,6 @@ msgstr "Cambia Valore Dizionario" msgid "Thanks from the Godot community!" msgstr "Grazie dalla comunità di Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Contributori a Godot Engine" @@ -1107,8 +1099,7 @@ msgid "Bus options" msgstr "Opzioni bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "duplica" @@ -1281,8 +1272,9 @@ msgstr "Percorso:" msgid "Node Name:" msgstr "Nome Nodo:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nome" @@ -1352,12 +1344,17 @@ msgid "Template file not found:" msgstr "Template non trovato:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Seleziona Cartella Attuale" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "File Esistente, Sovrascrivere?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Seleziona Cartella Attuale" +#, fuzzy +msgid "Select This Folder" +msgstr "Seleziona Metodo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1365,12 +1362,13 @@ msgstr "Copia Percorso" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Mostra nel File Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Mostra nel File Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1406,7 +1404,8 @@ msgid "Open a File or Directory" msgstr "Apri un File o una Directory" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Salva" @@ -1464,8 +1463,7 @@ msgstr "Directory e File:" msgid "Preview:" msgstr "Anteprima:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "File:" @@ -1481,24 +1479,11 @@ msgstr "ScansionaSorgenti" msgid "(Re)Importing Assets" msgstr "(Re)Importando gli Assets" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Cerca Aiuto" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Lista Classi:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Cerca Classi" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Alto" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Classe:" @@ -1515,28 +1500,31 @@ msgid "Brief Description:" msgstr "Breve Descrizione:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Membri" +msgid "Properties" +msgstr "Proprietà " -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Membri:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Proprietà :" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Metodi Pubblici" +msgid "Methods" +msgstr "Metodi" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Metodi Pubblici:" +#, fuzzy +msgid "Methods:" +msgstr "Metodi" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Elementi Tema GUI" +#, fuzzy +msgid "Theme Properties" +msgstr "Proprietà " #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Elementi Tema GUI:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Proprietà :" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1563,10 +1551,16 @@ msgid "Constants:" msgstr "Costanti:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Descrizione" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Descrizione:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Tutorial online:" @@ -1581,11 +1575,13 @@ msgstr "" "$url2]richiedendone una[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Proprietà " +#, fuzzy +msgid "Property Descriptions" +msgstr "Descrizione Proprietà :" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Descrizione Proprietà :" #: editor/editor_help.cpp @@ -1597,11 +1593,13 @@ msgstr "" "$color][url=$url]aggiungendone una[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metodi" +#, fuzzy +msgid "Method Descriptions" +msgstr "Descrizione Metodo:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Descrizione Metodo:" #: editor/editor_help.cpp @@ -1612,12 +1610,61 @@ msgstr "" "Al momento una descrizione per questo metodo non esiste. Aiutaci [color=" "$color][url=$url]aggiungendone una[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Cerca Aiuto" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Mostra Normale" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Classi" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metodi" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Segnali" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Costanti" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Proprietà " + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Proprietà " + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Membri" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Class" +msgstr "Classe:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Proprietà :" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Set" @@ -1651,6 +1698,11 @@ msgstr "Esportazione progetto fallita con codice di errore %d." msgid "Error saving resource!" msgstr "Errore salvando la Risorsa!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Salva Risorsa Come..." @@ -1706,12 +1758,22 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Impossibile salvare la scena. Probabili dipendenze (instanze o eredità ) non " "sono state soddisfatte." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Impossibile caricare MeshLibrary per l'unione!" @@ -1972,6 +2034,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Impossibile caricare uno script aggiuntivo dal percorso: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Impossibile caricare uno script aggiuntivo dal percorso: Lo script '%s' non " +"è in tool mode." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2023,6 +2094,12 @@ msgstr "Elimina Layout" msgid "Default" msgstr "Default" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Mostra nel File System" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2106,7 +2183,8 @@ msgid "Save Scene" msgstr "Salva Scena" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Salva tutte le Scene" #: editor/editor_node.cpp @@ -2123,7 +2201,7 @@ msgstr "Converti In..." #: editor/editor_node.cpp msgid "MeshLibrary..." -msgstr "MeshLibrary..." +msgstr "Libreria delle Mesh..." #: editor/editor_node.cpp msgid "TileSet..." @@ -2135,7 +2213,7 @@ msgid "Undo" msgstr "Annulla" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Redo" @@ -2173,12 +2251,13 @@ msgid "Quit to Project List" msgstr "Esci alla Lista Progetti" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Debug" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Distribuisci con Debug Remoto" +msgstr "Distribuzione con il Debug Remoto" #: editor/editor_node.cpp msgid "" @@ -2190,7 +2269,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Distribuzione Piccola con Network FS" +msgstr "Piccola distribuzione con la rete FS" #: editor/editor_node.cpp msgid "" @@ -2301,10 +2380,6 @@ msgstr "Gestisci Template d'Esportazione" msgid "Help" msgstr "Aiuto" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Classi" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2399,24 +2474,24 @@ msgstr "Aggiorna Cambiamenti" msgid "Disable Update Spinner" msgstr "Disabilita lo Spinner di Update" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspector" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importa" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nodo" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "FileSystem" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspector" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Nodo" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Espandi tutto" @@ -2554,7 +2629,7 @@ msgstr "Frame %" msgid "Physics Frame %" msgstr "Frame della Fisica %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tempo:" @@ -2578,7 +2653,7 @@ msgstr "Tempo" msgid "Calls" msgstr "Chiamate" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "On" @@ -2591,7 +2666,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "Bit %d, val %d." -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp #, fuzzy msgid "[Empty]" msgstr "Aggiungi vuoto" @@ -2601,6 +2676,20 @@ msgstr "Aggiungi vuoto" msgid "Assign.." msgstr "Assegna" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "Scegli una Vista" @@ -2619,10 +2708,6 @@ msgstr "" msgid "Make Unique" msgstr "Crea Ossa" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Mostra nel File System" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2631,7 +2716,8 @@ msgstr "Mostra nel File System" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Incolla" @@ -2927,6 +3013,11 @@ msgstr "" "tipi di file!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Preferiti:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Impossibile navigare a '%s' perché non è stato trovato nel file system!" @@ -2967,7 +3058,7 @@ msgstr "Errore duplicazione:" msgid "Unable to update dependencies:" msgstr "Impossibile aggiornare le dipendenze:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nessun nome fornito" @@ -3004,22 +3095,6 @@ msgid "Duplicating folder:" msgstr "Duplicando cartella:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Espandi tutto" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Comprimi tutto" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Rinomina..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Sposta in..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Apri Scena/e" @@ -3028,6 +3103,16 @@ msgid "Instance" msgstr "Istanza" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Preferiti:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Rimuovi da Gruppo" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Modifica Dipendenze..." @@ -3035,11 +3120,19 @@ msgstr "Modifica Dipendenze..." msgid "View Owners..." msgstr "Vedi Proprietari..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Rinomina..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplica..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Sposta in..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Nuovo Script" @@ -3049,6 +3142,16 @@ msgstr "Nuovo Script" msgid "New Resource..." msgstr "Salva Risorsa Come..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Espandi tutto" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Comprimi tutto" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3070,28 +3173,19 @@ msgstr "Re-Scan Filesystem" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Abilita lo stato della cartella come Preferito" +msgid "Toggle split mode" +msgstr "Modalità Attivazione" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Salva la risorsa in modifica." +msgid "Search files" +msgstr "Cerca Classi" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Istanzia le scene selezionate come figlie del nodo selezionato." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Cerca Classi" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3099,7 +3193,7 @@ msgstr "" "Scansione File,\n" "Si prega di attendere..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Sposta" @@ -3118,32 +3212,23 @@ msgstr "Crea Script" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "Trova tile" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Trova" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Parole Intere" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Controlla Maiuscole" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Vai alla Linea" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " -msgstr "Filtro:" +msgid "Filters:" +msgstr "Filtri" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3160,6 +3245,11 @@ msgstr "Annulla" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Trova" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Rimpiazza" @@ -3325,17 +3415,14 @@ msgstr "Reimporta" msgid "Failed to load resource." msgstr "Caricamento della risorsa fallito." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Espandi tutte le proprietà " #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Comprimi tutte le proprietà " #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3589,6 +3676,11 @@ msgstr "" msgid "Snap" msgstr "Snap" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Blend:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3972,10 +4064,6 @@ msgid "Amount:" msgstr "Quantità :" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Blend:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Blend 0:" @@ -4314,6 +4402,11 @@ msgstr "Modifica CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Modifica CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Modifica CanvasItem" @@ -4379,6 +4472,11 @@ msgid "Rotate Mode" msgstr "Modalità Rotazione" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Modalità Scala (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4478,6 +4576,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Ripristina l'abilità dei figli dell'oggetto di essere selezionati." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Scheletro..." + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Mostra Ossa" @@ -4530,6 +4633,10 @@ msgid "Show Viewport" msgstr "Mostra Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centra Selezione" @@ -4980,9 +5087,9 @@ msgid "Create Navigation Polygon" msgstr "Crea Poligono di Navigazione" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Generando AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Genera Rect Visibilità " #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5012,6 +5119,12 @@ msgstr "Cancella Maschera Emissione" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Converti In Maiuscolo" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Particelle" @@ -5081,13 +5194,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Un processor material di tipo 'ParticlesMaterial' é richiesto." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Genera AABB" +msgid "Generating AABB" +msgstr "Generando AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Converti In Maiuscolo" +msgid "Generate AABB" +msgstr "Genera AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5432,22 +5544,22 @@ msgid "Paste Resource" msgstr "Incolla Risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Apri nell Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Istanza:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Apri nell Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carica Risorsa" @@ -5480,6 +5592,11 @@ msgstr "Errore spostamento file:\n" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Impossibile caricare l'immagine" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Impossibile caricare l'immagine" @@ -5583,11 +5700,7 @@ msgstr "Copia Percorso Script" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "Mostra nel File System" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "Cronologia Succ." #: editor/plugins/script_editor_plugin.cpp @@ -5658,7 +5771,8 @@ msgid "Keep Debugger Open" msgstr "Mantieni Debugger Aperto" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Debug con editor esterno" #: editor/plugins/script_editor_plugin.cpp @@ -5666,10 +5780,6 @@ msgid "Open Godot online documentation" msgstr "Apri la documentazione online di Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Cerca nella gerarchia delle classi." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Cerca Riferimenti nella documentazione." @@ -5707,21 +5817,9 @@ msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Cerca Aiuto" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Cerca Classi" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Gli script built-in possono essere modificati solamente quando la scena a " -"cui appartengono è caricata" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5733,6 +5831,11 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy +msgid "Go to Function" +msgstr "Vai a Funzione..." + +#: editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Only resources from filesystem can be dropped." msgstr "Solo le risorse del filesystem possono essere liberate." @@ -5820,11 +5923,13 @@ msgid "Trim Trailing Whitespace" msgstr "Taglia Spazi in Coda" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Converti Indentazione In Spazi" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Converti Indentazione In Tabulazioni" #: editor/plugins/script_text_editor.cpp @@ -5841,36 +5946,32 @@ msgid "Remove All Breakpoints" msgstr "Rimuovi Tutti i Breakpoints" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Vai a Breakpoint Successivo" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Vai a Breakpoint Precedente" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Converti In Maiuscolo" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Converti In Minuscolo" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Trova Precedente" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtra Files..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Vai a Funzione..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Vai a Linea..." #: editor/plugins/script_text_editor.cpp @@ -5968,6 +6069,14 @@ msgid "Animation Key Inserted." msgstr "Key d'Animazione Inserito." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Pitch" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Oggetti Disegnati" @@ -6134,6 +6243,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificatore Velocità Vista Libera" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Visualizza Informazioni" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Finestra di XForm" @@ -6236,11 +6350,6 @@ msgid "Tool Scale" msgstr "Strumento Scala" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Allinea alla griglia" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Abilita/Disabilita Vista libera" @@ -6650,6 +6759,11 @@ msgid "Fix Invalid Tiles" msgstr "Nome Invalido." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Centra Selezione" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "Disegna TileMap" @@ -6697,24 +6811,31 @@ msgstr "Preleva Tile" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Rimuovi Selezione" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Ruota a 0 gradi" +#, fuzzy +msgid "Rotate left" +msgstr "Modalità Rotazione" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "Sposta a Destra" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Ruota a 90 gradi" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Ruota a 180 gradi" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Ruota a 270 gradi" +#, fuzzy +msgid "Clear transform" +msgstr "Transform" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6745,7 +6866,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6761,7 +6882,7 @@ msgid "Merge from scene?" msgstr "Unisci da scena?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6844,6 +6965,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Le export templates per questa piattaforma sono mancanti:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "appena rilasciato" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Esportando per %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "Presets" @@ -6852,6 +6983,11 @@ msgid "Add..." msgstr "Aggiungi..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Preset Esportazione:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Risorse" @@ -6916,6 +7052,16 @@ msgid "Export PCK/Zip" msgstr "Esporta PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Modalità d'Esportazione:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Esporta" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Le export templates per questa piattaforma sono mancanti:" @@ -7408,10 +7554,6 @@ msgstr "Impostazioni Progetto (project.godot)" msgid "General" msgstr "Informazioni Generali" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Proprietà :" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Sovrascrivi Per..." @@ -7549,10 +7691,6 @@ msgstr "Scegli un Nodo" msgid "Bit %d, val %d." msgstr "Bit %d, val %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Proprietà :" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Seleziona Proprietà " @@ -7644,7 +7782,7 @@ msgid "Step" msgstr "Step:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7653,7 +7791,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7698,7 +7836,7 @@ msgstr "Maiuscolo" msgid "Reset" msgstr "Resetta Zoom" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Errore" @@ -7759,6 +7897,10 @@ msgid "Instance Scene(s)" msgstr "Istanzia Scena(e)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Istanzia Scena Figlia" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Svuota Script" @@ -7795,6 +7937,12 @@ msgid "Save New Scene As..." msgstr "Salva Nuova Scena Come..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Figlio Modificabile" @@ -7873,6 +8021,11 @@ msgid "Clear Inheritance" msgstr "Liberare ereditarietà " #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Apri la documentazione online di Godot" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Elimina Nodo(i)" @@ -7881,15 +8034,16 @@ msgid "Add Child Node" msgstr "Aggiungi Nodo Figlio" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Istanzia Scena Figlia" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Cambia Tipo" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Apri script" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "Nuova Scena di Root" @@ -8059,6 +8213,11 @@ msgid "Path is empty" msgstr "Percorso vuoto" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Il percorso di salvataggio è vuoto!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Percorso non locale" @@ -8149,20 +8308,9 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Avvertimento" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Errore:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Sorgente:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funzione:" +#, fuzzy +msgid "Stack Trace" +msgstr "Impila Frame" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8194,18 +8342,6 @@ msgid "Stack Frames" msgstr "Impila Frame" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Valiabile" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Errori:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Stack Trace (se applicabile):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profiler" @@ -8671,13 +8807,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Bake!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -#, fuzzy -msgid "Bake the navigation mesh." -msgstr "Crea Mesh di Navigazione" +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp #, fuzzy @@ -8978,6 +9109,10 @@ msgid "Base Type:" msgstr "Tipo Base:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Membri:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Nodi Disponibili:" @@ -9082,12 +9217,13 @@ msgid "Search VisualScript" msgstr "Rimuovi Nodo Grafico di Shader" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Get" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +#, fuzzy +msgid "Set %s" +msgstr "Imposta parametri" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9185,6 +9321,12 @@ msgstr "" "Perché CollisionShape2D funzioni deve essere fornita una forma. Si prega di " "creare una risorsa forma (shape)!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9238,6 +9380,12 @@ msgstr "" "Un materiale per processare le particelle non é assegnato, pertanto nessun " "comportamento é impresso." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9381,6 +9529,17 @@ msgstr "" "Perché CollisionShape funzioni deve essere fornita una forma. Si prega di " "creare una risorsa forma (shape)!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nulla é visibile perché le mesh non sono state assegnate ai draw pass." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp #, fuzzy msgid "Plotting Meshes" @@ -9405,6 +9564,30 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "Nulla é visibile perché le mesh non sono state assegnate ai draw pass." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D funziona solamente quando impostato come figlio di un nodo " +"Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D funziona solamente quando impostato come figlio di un nodo " +"Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9445,7 +9628,7 @@ msgstr "" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9528,11 +9711,6 @@ msgstr "Attenzione!" msgid "Please Confirm..." msgstr "Per Favore Conferma..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Seleziona Metodo" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9543,6 +9721,10 @@ msgstr "" "popup() o qualsiasi altra funzione popup*(). Renderli visibili per la " "modifica nell'editor è okay, ma verranno nascosti una volta in esecuzione." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9621,6 +9803,126 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom(%):" + +#~ msgid "Class List:" +#~ msgstr "Lista Classi:" + +#~ msgid "Search Classes" +#~ msgstr "Cerca Classi" + +#~ msgid "Public Methods" +#~ msgstr "Metodi Pubblici" + +#~ msgid "Public Methods:" +#~ msgstr "Metodi Pubblici:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Elementi Tema GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Elementi Tema GUI:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Proprietà :" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Abilita lo stato della cartella come Preferito" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Salva la risorsa in modifica." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Parole Intere" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Controlla Maiuscole" + +#, fuzzy +#~ msgid "Filter: " +#~ msgstr "Filtro:" + +#~ msgid "Ok" +#~ msgstr "Ok" + +#, fuzzy +#~ msgid "Show In File System" +#~ msgstr "Mostra nel File System" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Cerca nella gerarchia delle classi." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Cerca Classi" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Gli script built-in possono essere modificati solamente quando la scena a " +#~ "cui appartengono è caricata" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Converti In Maiuscolo" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Converti In Minuscolo" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Allinea alla griglia" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Ruota a 0 gradi" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Ruota a 90 gradi" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Ruota a 180 gradi" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Ruota a 270 gradi" + +#~ msgid "Warning" +#~ msgstr "Avvertimento" + +#~ msgid "Error:" +#~ msgstr "Errore:" + +#~ msgid "Source:" +#~ msgstr "Sorgente:" + +#~ msgid "Function:" +#~ msgstr "Funzione:" + +#~ msgid "Variable" +#~ msgstr "Valiabile" + +#~ msgid "Errors:" +#~ msgstr "Errori:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Stack Trace (se applicabile):" + +#~ msgid "Bake!" +#~ msgstr "Bake!" + +#, fuzzy +#~ msgid "Bake the navigation mesh." +#~ msgstr "Crea Mesh di Navigazione" + +#~ msgid "Get" +#~ msgstr "Get" + #~ msgid "Change Scalar Constant" #~ msgstr "Cambia Costante Scalare" @@ -10039,10 +10341,6 @@ msgstr "" #~ msgid "Clear Emitter" #~ msgstr "Cancella Emitter" -#, fuzzy -#~ msgid "Fold Line" -#~ msgstr "Vai alla Linea" - #~ msgid " " #~ msgstr " " @@ -10131,9 +10429,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Impossibile salvare la substruttura dell'atlas:" -#~ msgid "Exporting for %s" -#~ msgstr "Esportando per %s" - #~ msgid "Setting Up..." #~ msgstr "Impostando..." @@ -10243,9 +10538,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Font Sorgente:" -#~ msgid "Source Font Size:" -#~ msgstr "Dimensione Font sorgente:" - #~ msgid "Dest Resource:" #~ msgstr "Risorsa di destin. :" @@ -10322,9 +10614,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Inizio(i)" -#~ msgid "Filters" -#~ msgstr "Filtri" - #~ msgid "Source path is empty." #~ msgstr "Il percorso sorgente è vuoto." @@ -10598,15 +10887,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Stereo" -#~ msgid "Pitch" -#~ msgstr "Pitch" - #~ msgid "Window" #~ msgstr "Finestra" -#~ msgid "Move Right" -#~ msgstr "Sposta a Destra" - #~ msgid "Scaling to %s%%." #~ msgstr "Scalando a %s%%." @@ -10672,9 +10955,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "appena premuto" -#~ msgid "just released" -#~ msgstr "appena rilasciato" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" @@ -11017,9 +11297,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Esportazione Progetto" -#~ msgid "Export Preset:" -#~ msgstr "Preset Esportazione:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance non contiene una risorsa BakedLight." @@ -11123,9 +11400,6 @@ msgstr "" #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Ricarica Tool Script (Soft)" -#~ msgid "Set Params" -#~ msgstr "Imposta parametri" - #~ msgid "Live Editing" #~ msgstr "Editing Live" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 0f87aaeec5..72ea5d8d14 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -2,7 +2,7 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# akirakido <achts.y@gmail.com>, 2016-2017. +# akirakido <achts.y@gmail.com>, 2016-2017, 2018. # D_first <dntk.daisei@gmail.com>, 2017, 2018. # Daisuke Saito <d.saito@coriginate.com>, 2017, 2018. # h416 <shinichiro.hirama@gmail.com>, 2017. @@ -16,209 +16,186 @@ # yu tang <0011solo@gmail.com>, 2018. # zukkun <zukkun@gmail.com>, 2018. # sugusan <sugusan.development@gmail.com>, 2018. +# Nathan Lovato <nathan.lovato.art@gmail.com>, 2018. +# nyanode <akaruooyagi@yahoo.co.jp>, 2018. +# nitenook <admin@alterbaum.net>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-16 08:38+0000\n" -"Last-Translator: sugusan <sugusan.development@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: nitenook <admin@alterbaum.net>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp -#, fuzzy msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Convert()ã«å¯¾ã—ã¦ç„¡åйãªåž‹ã®å¼•æ•°ã§ã™ã€‚TYPE_* 定数を使ã£ã¦ãã ã•ã„。" +msgstr "convert() ã®å¼•æ•°ã®åž‹ãŒç„¡åйã§ã™ã€‚TYPE_* 定数を使ã£ã¦ãã ã•ã„。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp -#, fuzzy msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "デコードãƒã‚¤ãƒˆã®ãƒã‚¤ãƒˆã¯å分ã§ã¯ã‚りã¾ã›ã‚“。ã¾ãŸã¯ç„¡åйãªå½¢å¼ã§ã™ã€‚" +msgstr "デコードã™ã‚‹ã«ã¯ãƒã‚¤ãƒˆãŒè¶³ã‚Šãªã„ã‹ã€ã¾ãŸã¯ç„¡åйãªå½¢å¼ã§ã™ã€‚" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "入力ã•れãŸå¼ %i ã¯ç„¡åйã§ã™" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "インスタンス㌠null ã®ãŸã‚ã€self ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "ノード%sã®ä¸æ£ãªã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã®ãƒ—ãƒãƒ‘ティå'%s' ." +msgstr "演算å %s 〠%s 〠%s ã«å¯¾ã™ã‚‹å€¤ãŒç„¡åйã§ã™ã€‚" #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "ノード%sã®ä¸æ£ãªã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã®ãƒ—ãƒãƒ‘ティå'%s' ." +msgstr "基本型 %s ã®åž‹ %s ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒç„¡åйã§ã™" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "インデックス '%s' (%s型)ã¯ç„¡åйãªåå‰ã§ã™" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ":䏿£ãªå¼•æ•°ã§ã™.引数ã®åž‹=: " +msgstr "'%s' ã®å¼•æ•°ã¯ç„¡åйã§ã™" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "'%s' ã¸ã®å‘¼ã³å‡ºã—:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Free" msgstr "解放" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "ãƒãƒ©ãƒ³ã‚¹" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "エラー" +msgstr "ミラー" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "ã‚ーフレームを挿入" +msgstr "ã“ã“ã«ã‚ーを挿入" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "é¸æŠžç¯„å›²ã‚’è¤‡è£½" +msgstr "é¸æŠžä¸ã®ã‚ーを複製" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "é¸æŠžç¯„å›²ã‚’æ¶ˆåŽ»" +msgstr "é¸æŠžä¸ã®ã‚ーを削除" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "アニメーションã®ã‚ーフレームを複製" +msgstr "アニメーションã®ã‚ーを複製" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "アニメーションã®ã‚ーフレームを削除" +msgstr "アニメーションã®ã‚ーを削除" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim 値を変更" +msgstr "アニメーションã‚ãƒ¼ãƒ•ãƒ¬ãƒ¼ãƒ ã®æ™‚間を変更" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "アニメーション 変化ã¨ãã®ç§»ã‚Šå¤‰ã‚り(トランジション)" +msgstr "アニメーションã®ãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ã‚’変更" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "アニメーションã®ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォーム(変形)" +msgstr "アニメーションã®ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォームを変更" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim 値を変更" +msgstr "アニメーションã‚ーフレームã®å€¤ã‚’変更" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Call" -msgstr "Anim コールã®å¤‰æ›´(Call)" +msgstr "アニメーション呼出ã—ã®å¤‰æ›´" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "プãƒãƒ‘ティ:" +msgstr "プãƒãƒ‘ティトラック" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "トランスフォーム" +msgstr "3Dトランスフォームトラック" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "メソッド呼出ã—トラック" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "ベジェ曲線トラック" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "オーディオå†ç”Ÿãƒˆãƒ©ãƒƒã‚¯" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "アニメーションå†ç”Ÿã‚’䏿¢(S)" +msgstr "アニメーションå†ç”Ÿãƒˆãƒ©ãƒƒã‚¯" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Anim ãƒˆãƒ©ãƒƒã‚¯ã‚’è¿½åŠ " +msgstr "ãƒˆãƒ©ãƒƒã‚¯ã‚’è¿½åŠ " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "アニメーションã®é•·ã• (å˜ä½ã¯ç§’)。" +msgstr "アニメーションã®é•·ã• (ç§’)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "アニメーション 拡大。" +msgstr "アニメーションループ" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Functions:" -msgstr "関数を作æˆ" +msgstr "関数:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "オーディオリスナー" +msgstr "オーディオクリップ:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "クリップ" +msgstr "アニメーションクリップ:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "最低é™ãƒ¢ãƒ¼ãƒ‰" +msgstr "ã“ã®ãƒˆãƒ©ãƒƒã‚¯ã® オン/オフ 切替ãˆã€‚" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Update モード(ã“ã®ãƒ—ãƒãƒ‘ティã®è¨å®šæ–¹æ³•)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "アニメーションã®ãƒŽãƒ¼ãƒ‰" +msgstr "補間モード" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "ループラップモード(ループã®å…ˆé ã§è£œé–“を終了ã™ã‚‹ï¼‰" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "é¸æŠžã—ãŸãƒˆãƒ©ãƒƒã‚¯ã‚’削除ã—ã¾ã™ã€‚" +msgstr "ã“ã®ãƒˆãƒ©ãƒƒã‚¯ã‚’除去ã™ã‚‹ã€‚" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "クãƒã‚¹ãƒ•ェード時間(秒)" +msgstr "時間 (ç§’): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -233,58 +210,54 @@ msgid "Trigger" msgstr "トリガー" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "テクスãƒãƒ£" +msgstr "ã‚ャプãƒãƒ£" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "è¿‘å‚" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "ç‰é€Ÿ" +msgstr "リニア" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "ã‚ュービック" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "ループインタプリタを抑ãˆè¾¼ã¿ï¼ˆclamp)" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "ループインタプリタをラップ(wrap)" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Key" -msgstr "ã‚ーフレームを挿入" +msgstr "ã‚ーを挿入" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "ノードを複製" +msgstr "ã‚ーを複製" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "ノードを消去" +msgstr "ã‚ーを削除" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "Anim トラックを削除" +msgstr "アニメーショントラックを除去" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "%s ã®æ–°ã—ã„トラックを作æˆã—ã€ã‚ーを挿入ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "%s ã®æ–°è¦ãƒˆãƒ©ãƒƒã‚¯ã‚’作æˆã—ã€ã‚ーを挿入ã—ã¾ã™ã‹ï¼Ÿ" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "æ–°ã—ã„ %d トラックを作æˆã—ã€ã‚ーを挿入ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "%d æ–°è¦ãƒˆãƒ©ãƒƒã‚¯ã‚’作æˆã—ã€ã‚ーを挿入ã—ã¾ã™ã‹ï¼Ÿ" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_plugin_settings.cpp @@ -298,27 +271,29 @@ msgstr "作æˆ" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "Anim 挿入" +msgstr "アニメーション挿入" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" +"アニメーションプレイヤーã¯ä»–ã®ãƒ—レイヤーã ã‘をアニメーション化ã™ã‚‹ã“ã¨ã¯ã§ã" +"ã¾ã›ã‚“。" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "Anim ã®ä½œæˆãƒ»æŒ¿å…¥" +msgstr "アニメーションã®ä½œæˆã¨æŒ¿å…¥" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Anim トラック ・ ã‚ーを挿入" +msgstr "アニメーショントラック ã¨ã‚ーを挿入" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "Anim ã‚ーを挿入" +msgstr "アニメーションã‚ーを挿入" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "トランスフォームトラックã¯ç©ºé–“ベースã®ãƒŽãƒ¼ãƒ‰ã«ã®ã¿é©ç”¨ã•れã¾ã™ã€‚" #: editor/animation_track_editor.cpp msgid "" @@ -327,72 +302,75 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒˆãƒ©ãƒƒã‚¯ã¯æ¬¡ã®ã‚¿ã‚¤ãƒ—ã®ãƒŽãƒ¼ãƒ‰ã®ã¿æŒ‡å®šã§ãã¾ã™:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." msgstr "" +"アニメーショントラックã¯ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ—レイヤーノードã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"アニメーションプレーヤーã¯ä»–ã®ãƒ—レーヤーã ã‘ã«ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é©ç”¨ã™ã‚‹ã“ã¨ã¯" +"ã§ãã¾ã›ã‚“。" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "root ãŒç„¡ã‘ã‚Œã°æ–°è¦ãƒˆãƒ©ãƒƒã‚¯ã¯è¿½åŠ ã§ãã¾ã›ã‚“" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "トラックã®ãƒ‘スãŒç„¡åйãªãŸã‚ã€ã‚ãƒ¼ã‚’è¿½åŠ ã§ãã¾ã›ã‚“。" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "トラック㌠spatial åž‹ã§ã¯ãªã„ãŸã‚ã€ã‚ーを挿入ã§ãã¾ã›ã‚“" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "トラックã®ãƒ‘スãŒç„¡åйãªãŸã‚ã€ãƒ¡ã‚½ãƒƒãƒ‰ã‚ãƒ¼ã‚’è¿½åŠ ã§ãã¾ã›ã‚“。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "変数ã®get(VariableGet)ãŒã‚¹ã‚¯ãƒªãƒ—トã«ç„¡ã„: " +msgstr "オブジェクトã«ãƒ¡ã‚½ãƒƒãƒ‰ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "Anim ã‚ーã®ç§»å‹•" +msgstr "アニメーションã‚ーã®ç§»å‹•" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "リソースã®ã‚¯ãƒªãƒƒãƒ—ボードã¯ç©ºã§ã™!" +msgstr "クリップボードãŒç©ºã§ã™" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Scale Keys" -msgstr "Anim 拡大縮å°ã‚ー" +msgstr "アニメーションã‚ãƒ¼ã®æ‹¡ç¸®" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "" +msgstr "ã“ã®ã‚ªãƒ—ションã¯å˜ä¸€ãƒˆãƒ©ãƒƒã‚¯ã§ã®ãƒ™ã‚¸ã‚§ç·¨é›†ã§ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "ツリーã§é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã®ãƒˆãƒ©ãƒƒã‚¯ã®ã¿ã‚’表示ã—ã¾ã™ã€‚" #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." msgstr "" +"ノードã”ã¨ã«ãƒˆãƒ©ãƒƒã‚¯ã‚’グループ化ã™ã‚‹ã‹ã€ãƒ—レーンãªãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¤ºã—ã¾ã™ã€‚" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "スナップ機能(ピクセルå˜ä½ï¼‰:" +msgstr "スナップ: " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "アニメーションツリーã¯å•題ã‚りã¾ã›ã‚“." +msgstr "アニメーションステップã®å€¤ã€‚" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -404,32 +382,26 @@ msgid "Edit" msgstr "編集" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "アニメーション" +msgstr "アニメーションプãƒãƒ‘ティ。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "パラメーターをコピーã™ã‚‹" +msgstr "トラックをコピー" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "パラメーターを張り付ã‘ã‚‹" +msgstr "トラックを張り付ã‘" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Scale Selection" -msgstr "縮尺(Scale)ã®é¸æŠž" +msgstr "スケールã®é¸æŠž" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Scale From Cursor" -msgstr "カーソル起点ã§ç¸®å°º(Scale)変更" +msgstr "カーソル基準ã§ã‚¹ã‚±ãƒ¼ãƒ«" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "é¸æŠžç¯„å›²ã‚’è¤‡è£½" @@ -438,16 +410,17 @@ msgid "Duplicate Transposed" msgstr "複製を転置" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "é¸æŠžç¯„å›²ã‚’æ¶ˆåŽ»" +msgstr "é¸æŠžç¯„å›²ã‚’å‰Šé™¤" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "次ã®ã‚¹ãƒ†ãƒƒãƒ—ã¸" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "å‰ã®ã‚¹ãƒ†ãƒƒãƒ—ã¸" #: editor/animation_track_editor.cpp @@ -460,11 +433,11 @@ msgstr "アニメーションをクリーンアップ" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "アニメーション化ã•れるノードをé¸ã¶:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "ベジェ曲線を使用" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -488,11 +461,11 @@ msgstr "最é©åŒ–" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "無効ãªã‚ーを削除" +msgstr "無効ãªã‚ーを除去" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "未解決や空ã®ãƒˆãƒ©ãƒƒã‚¯ã‚’削除" +msgstr "未解決・空ã®ãƒˆãƒ©ãƒƒã‚¯ã‚’除去" #: editor/animation_track_editor.cpp msgid "Clean-up all animations" @@ -500,7 +473,7 @@ msgstr "ã™ã¹ã¦ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’クリーンアップ" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "クリーン アップ アニメーション(å…ƒã«æˆ»ã›ã¾ã›ã‚“!)" +msgstr "アニメーションをクリーンアップ(アンドゥä¸å¯ï¼ï¼‰" #: editor/animation_track_editor.cpp msgid "Clean-Up" @@ -508,11 +481,11 @@ msgstr "クリーンアップ" #: editor/animation_track_editor.cpp msgid "Scale Ratio:" -msgstr "æ‹¡å¤§ç¸®å°æ¯”:" +msgstr "スケール比:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "コピーã™ã‚‹ãƒˆãƒ©ãƒƒã‚¯ã‚’é¸æŠž:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -528,7 +501,7 @@ msgstr "é…列ã®ã‚µã‚¤ã‚ºã‚’変更" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "é…列ã®å€¤ã®ç¨®é¡žã®å¤‰æ›´" +msgstr "é…列値ã®åž‹ã‚’変更" #: editor/array_property_edit.cpp msgid "Change Array Value" @@ -550,11 +523,11 @@ msgstr "一致ãªã—" msgid "Replaced %d occurrence(s)." msgstr "%d 箇所を置æ›ã—ã¾ã—ãŸã€‚" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "大文å—å°æ–‡å—を区別ã™ã‚‹" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "å˜èªžå…¨ä½“" @@ -571,100 +544,88 @@ msgid "Selection Only" msgstr "é¸æŠžç¯„å›²ã®ã¿" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Zoom In" msgstr "ズームイン" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Zoom Out" msgstr "ズームアウト" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Reset Zoom" msgstr "ズームをリセット" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "è¦å‘Š" +msgstr "è¦å‘Š:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "ズーム(%):" +msgid "Font Size:" +msgstr "ソース フォントサイズ:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" -msgstr "ライン:" +msgstr "行:" #: editor/code_editor.cpp -#, fuzzy msgid "Col:" -msgstr "縦:" +msgstr "列:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "対象ã¨ãªã‚‹ãƒŽãƒ¼ãƒ‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™!" +msgstr "対象ノードã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼" #: editor/connections_dialog.cpp -#, fuzzy msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" -"対象メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ メソッドを指定ã™ã‚‹ã‹å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚¹ã‚¯ãƒªãƒ—トを付" -"åŠ ã—ã¦ãã ã•ã„" +"対象メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ï¼æœ‰åйãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã™ã‚‹ã‹ã€å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚¹ã‚¯ãƒª" +"プトを添付ã—ã¦ãã ã•ã„。" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect To Node:" -msgstr "ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã¾ã™:" +msgstr "ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶š:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#, fuzzy msgid "Add" msgstr "è¿½åŠ " #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "削除" +msgstr "除去" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "呼ã³å‡ºã—å¼•æ•°ã‚’è¿½åŠ ã—ã¾ã™ã€‚" +msgstr "呼出ã—å¼•æ•°ã‚’è¿½åŠ :" #: editor/connections_dialog.cpp -#, fuzzy msgid "Extra Call Arguments:" -msgstr "è¿½åŠ å‘¼ã³å‡ºã—引数:" +msgstr "è¿½åŠ ã®å‘¼å‡ºã—引数:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Path to Node:" msgstr "ノードã¸ã®ãƒ‘ス:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Make Function" msgstr "関数を作æˆ" #: editor/connections_dialog.cpp -#, fuzzy msgid "Deferred" msgstr "é…å»¶" #: editor/connections_dialog.cpp -#, fuzzy msgid "Oneshot" -msgstr "一括" +msgstr "å˜ç™º" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -681,100 +642,84 @@ msgid "Close" msgstr "é–‰ã˜ã‚‹" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect" msgstr "接続" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect '%s' to '%s'" msgstr "'%s' ã‚’ '%s' ã«æŽ¥ç¶š" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "'%s' ã‚’ '%s' ã«æŽ¥ç¶š" +msgstr "'%s' ã‚’ '%s' ã‹ã‚‰åˆ‡æ–" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "'%s' ã‚’ '%s' ã«æŽ¥ç¶š" +msgstr "ä¿¡å· '%s' ã‹ã‚‰å…¨ã¦ã‚’切æ–" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect..." msgstr "接続..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Disconnect" msgstr "切æ–" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "シグナルを接続:" +msgstr "接続信å·: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’編集" +msgstr "接続を編集 " #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "複数ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’本当ã«å®Ÿè¡Œã—ã¾ã™ã‹ï¼Ÿ" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "ã“ã®ä¿¡å·ã‹ã‚‰å…¨ã¦ã®æŽ¥ç¶šã‚’除去ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp -#, fuzzy msgid "Signals" -msgstr "シグナル" +msgstr "ä¿¡å·" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "ã“ã®ä¿¡å·ã‹ã‚‰å…¨ã¦ã®æŽ¥ç¶šã‚’除去ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "切æ–" +msgstr "å…¨ã¦åˆ‡æ–" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "編集" +msgstr "編集..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "メソッド一覧:" +msgstr "メソッドã¸è¡Œã" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "åž‹(type)を変更" +msgstr "%s 型を変更" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change" msgstr "変更" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" msgstr "%s ã‚’æ–°è¦ä½œæˆ" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites:" msgstr "ãŠæ°—ã«å…¥ã‚Š:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "最近ã®:" +msgstr "最近:" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp @@ -783,50 +728,41 @@ msgstr "最近ã®:" msgid "Search:" msgstr "検索:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Matches:" msgstr "一致:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Description:" -msgstr "記述:" +msgstr "説明:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Search Replacement For:" msgstr "検索ã—ã¦ç½®æ›:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Dependencies For:" -msgstr "~ã¨ä¾å˜é–¢ä¿‚ã«ã‚ã‚‹:" +msgstr "~ã¨ã®ä¾å˜é–¢ä¿‚:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" "シーン '%s' ã¯ç¾åœ¨ç·¨é›†ä¸ã§ã™ã€‚\n" -"å†èªã¿è¾¼ã¿ã—ãªã„é™ã‚Šã€å¤‰æ›´ã¯åæ˜ ã•れã¾ã›ã‚“。" +"å†èªè¾¼ã¿ã—ãªã„é™ã‚Šã€å¤‰æ›´ã¯åæ˜ ã•れã¾ã›ã‚“。" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" -"リソース '%s' ã¯ä½¿ç”¨ä¸ã§ã™\n" -"変更ã¯å†èªè¾¼æ™‚ã«é©ç”¨ã•れã¾ã™" +"リソース '%s' ã¯ä½¿ç”¨ä¸ã§ã™ã€‚\n" +"変更ã¯å†èªè¾¼ã¿æ™‚ã«é©ç”¨ã•れã¾ã™ã€‚" #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -834,7 +770,6 @@ msgid "Dependencies" msgstr "ä¾å˜é–¢ä¿‚" #: editor/dependency_editor.cpp -#, fuzzy msgid "Resource" msgstr "リソース" @@ -849,7 +784,6 @@ msgid "Dependencies:" msgstr "ä¾å˜é–¢ä¿‚:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Fix Broken" msgstr "修復" @@ -858,58 +792,52 @@ msgid "Dependency Editor" msgstr "ä¾å˜é–¢ä¿‚エディタ" #: editor/dependency_editor.cpp -#, fuzzy msgid "Search Replacement Resource:" -msgstr "ç½®æ›ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’探ã™:" +msgstr "ç½®æ›ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’検索:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" msgstr "é–‹ã" #: editor/dependency_editor.cpp -#, fuzzy msgid "Owners Of:" -msgstr "~ã®ã‚ªãƒ¼ãƒŠãƒ¼:" +msgstr "~ã®ã‚ªãƒ¼ãƒŠãƒ¼:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Remove selected files from the project? (no undo)" -msgstr "é¸æŠžã—ãŸãƒ•ァイルをプãƒã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰å–り除ã(å–り消ã—ã§ãã¾ã›ã‚“)" +msgstr "é¸æŠžã—ãŸãƒ•ァイルをプãƒã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰é™¤åŽ»ã—ã¾ã™ã‹ï¼Ÿï¼ˆã‚¢ãƒ³ãƒ‰ã‚¥ä¸å¯ï¼‰" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" "Remove them anyway? (no undo)" msgstr "" -"å–り除ã“ã†ã¨ã—ã¦ã„るファイルã¯ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã®å‹•作ã«å¿…è¦ã§ã™. 本当ã«å–り除ãã¾" -"ã™ã‹ï¼Ÿï¼ˆundoã§ãã¾ã›ã‚“)" +"除去ã—よã†ã¨ã—ã¦ã„るファイルã¯ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã®å‹•作ã«å¿…è¦ã§ã™ã€‚\n" +"無視ã—ã¦é™¤åŽ»ã—ã¾ã™ã‹ï¼Ÿï¼ˆã‚¢ãƒ³ãƒ‰ã‚¥ä¸å¯ï¼‰" #: editor/dependency_editor.cpp editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "解決ã§ãã¾ã›ã‚“." +msgstr "除去ä¸å¯:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Error loading:" -msgstr "èªã¿è¾¼ã¿å¤±æ•—:" +msgstr "èªè¾¼ã¿ã‚¨ãƒ©ãƒ¼:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Scene failed to load due to missing dependencies:" -msgstr "ä¾å˜é–¢ä¿‚ãŒç¢ºèªã§ããšã€ã‚·ãƒ¼ãƒ³ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" +msgid "Load failed due to missing dependencies:" +msgstr "ä¾å˜é–¢ä¿‚ãŒç¢ºèªã§ããšã€ã‚·ãƒ¼ãƒ³ã‚’èªè¾¼ã‚ã¾ã›ã‚“:" #: editor/dependency_editor.cpp editor/editor_node.cpp -#, fuzzy msgid "Open Anyway" -msgstr "ã¨ã‚‚ã‹ãé–‹ã" +msgstr "ã¨ã«ã‹ãé–‹ã" #: editor/dependency_editor.cpp msgid "Which action should be taken?" @@ -920,107 +848,82 @@ msgid "Fix Dependencies" msgstr "ä¾å˜é–¢ä¿‚ã®ä¿®å¾©" #: editor/dependency_editor.cpp -#, fuzzy msgid "Errors loading!" -msgstr "èªã¿è¾¼ã¿å¤±æ•—!" +msgstr "èªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ï¼" #: editor/dependency_editor.cpp -#, fuzzy msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "永久ã«%d を削除(undoä¸å¯ï¼‰" +msgstr "%d 個ã®ã‚¢ã‚¤ãƒ†ãƒ を完全ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿï¼ˆã‚¢ãƒ³ãƒ‰ã‚¥ä¸å¯ï¼‰" #: editor/dependency_editor.cpp -#, fuzzy msgid "Owns" -msgstr "ä¿æŒã™ã‚‹" +msgstr "所有" #: editor/dependency_editor.cpp -#, fuzzy msgid "Resources Without Explicit Ownership:" -msgstr "ã‚ªãƒ¼ãƒŠãƒ¼ãŒæ˜Žç¤ºã•れã¦ã„ãªã„リソース" +msgstr "æ‰€æœ‰æ¨©ãŒæ˜Žç¤ºã•れã¦ã„ãªã„リソース:" #: editor/dependency_editor.cpp editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer" -msgstr "無オーナーリソース用エクスプãƒãƒ¼ãƒ©ãƒ¼" +msgstr "å¤ç«‹ãƒªã‚½ãƒ¼ã‚¹ç”¨ã‚¨ã‚¯ã‚¹ãƒ—ãƒãƒ¼ãƒ©ãƒ¼" #: editor/dependency_editor.cpp -#, fuzzy msgid "Delete selected files?" -msgstr "é¸æŠžã—ãŸãƒ•ァイルを消去ã—ã¾ã™ã‹?" +msgstr "é¸æŠžã—ãŸãƒ•ァイルを削除ã—ã¾ã™ã‹ï¼Ÿ" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/project_export.cpp editor/project_settings_editor.cpp #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete" -msgstr "消去" +msgstr "削除" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Key" -msgstr "ディクショナリ ã‚ーã®å¤‰æ›´" +msgstr "Dictionary ã‚ーã®å¤‰æ›´" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Value" -msgstr "ディクショナリ 値ã®å¤‰æ›´" +msgstr "Dictionary 値ã®å¤‰æ›´" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "Godotコミュニティより感è¬ã‚’!" - -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" +msgstr "Godot コミュニティより感è¬ã‚’ï¼" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "Godotエンジンã«è²¢çŒ®ã—ãŸäººã€…" +msgstr "Godot エンジンã«è²¢çŒ®ã—ãŸäººã€…" #: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆå‰µæ¥è€…" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆå‰µå§‹è€…" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "開発者" +msgstr "開発主任" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ " #: editor/editor_about.cpp -#, fuzzy msgid "Developers" msgstr "開発者" #: editor/editor_about.cpp -#, fuzzy msgid "Authors" -msgstr "作者:" +msgstr "作者" #: editor/editor_about.cpp -#, fuzzy msgid "Platinum Sponsors" msgstr "プラãƒãƒŠã‚¹ãƒãƒ³ã‚µãƒ¼" #: editor/editor_about.cpp -#, fuzzy msgid "Gold Sponsors" msgstr "ゴールドスãƒãƒ³ã‚µãƒ¼" #: editor/editor_about.cpp -#, fuzzy msgid "Mini Sponsors" msgstr "ミニスãƒãƒ³ã‚µãƒ¼" @@ -1038,16 +941,15 @@ msgstr "ブãƒãƒ³ã‚ºãƒ‰ãƒŠãƒ¼" #: editor/editor_about.cpp msgid "Donors" -msgstr "寄付・å”賛者" +msgstr "ドナー" #: editor/editor_about.cpp msgid "License" msgstr "ライセンス" #: editor/editor_about.cpp -#, fuzzy msgid "Thirdparty License" -msgstr "サードパーティライセンス" +msgstr "サードパーティ ライセンス" #: editor/editor_about.cpp msgid "" @@ -1057,19 +959,18 @@ msgid "" "respective copyright statements and license terms." msgstr "" "Godot Engineã¯ã€MITライセンスã¨äº’æ›æ€§ã®ã‚ã‚‹ã€å¤šæ•°ã®ã‚µãƒ¼ãƒ‰ãƒ‘ーティ製ã®ãƒ•リーãŠ" -"よã³ã‚ªãƒ¼ãƒ—ンソースã®ãƒ©ã‚¤ãƒ–ラリã«ä¾å˜ã—ã¦ã„ã¾ã™ã€‚ 以下ã¯ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティ製コン" -"ãƒãƒ¼ãƒãƒ³ãƒˆã®è‘—作権ãŠã‚ˆã³ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã§ã™ã€‚" +"よã³ã‚ªãƒ¼ãƒ—ンソースライブラリã«ä¾å˜ã—ã¦ã„ã¾ã™ã€‚ 以下ã¯ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティ製コン" +"ãƒãƒ¼ãƒãƒ³ãƒˆã®å„著作権ãŠã‚ˆã³ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®ç·è¦§ã§ã™ã€‚" #: editor/editor_about.cpp msgid "All Components" -msgstr "ã™ã¹ã¦ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ(æ§‹æˆéƒ¨åˆ†)" +msgstr "全コンãƒãƒ¼ãƒãƒ³ãƒˆ" #: editor/editor_about.cpp msgid "Components" -msgstr "コンãƒãƒ¼ãƒãƒ³ãƒˆ(æ§‹æˆéƒ¨åˆ†)" +msgstr "コンãƒãƒ¼ãƒãƒ³ãƒˆ" #: editor/editor_about.cpp -#, fuzzy msgid "Licenses" msgstr "ライセンス" @@ -1078,23 +979,20 @@ msgid "Error opening package file, not in zip format." msgstr "パッケージファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ zip å½¢å¼ã§ã¯ã‚りã¾ã›ã‚“。" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" -msgstr "éžåœ§ç¸®" +msgstr "アセットを展開" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "パッケージインストールæˆåŠŸ!" +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«æˆåŠŸã—ã¾ã—ãŸï¼" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Success!" msgstr "æˆåŠŸï¼" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Install" msgstr "インストール" @@ -1120,19 +1018,19 @@ msgstr "オーディオãƒã‚¹ã®ãƒœãƒªãƒ¥ãƒ¼ãƒ を変更" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "オーディオãƒã‚¹ã‚’ソãƒã«åˆ‡ã‚Šæ›¿ãˆ" +msgstr "オーディオãƒã‚¹ã‚’ソãƒã«åˆ‡æ›¿ãˆ" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "オーディオãƒã‚¹ã‚’ミュート(無音)ã«åˆ‡ã‚Šæ›¿ãˆ" +msgstr "オーディオãƒã‚¹ã‚’ミュートã«åˆ‡æ›¿ãˆ" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "オーディオãƒã‚¹ã®ãƒã‚¤ãƒ‘スエフェクトã®åˆ‡ã‚Šæ›¿ãˆ" +msgstr "オーディオãƒã‚¹ã®ãƒã‚¤ãƒ‘スエフェクトã®åˆ‡æ›¿ãˆ" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "オーディオãƒã‚¹ã®å‡ºåŠ›å…ˆã®é¸æŠž" +msgstr "オーディオãƒã‚¹ã®å‡ºåŠ›å…ˆã‚’é¸æŠž" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -1144,19 +1042,19 @@ msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトを移動" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトを消去" +msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトを削除" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "オーディオãƒã‚¹ã‚’ドラッグ・アンド・ドãƒãƒƒãƒ—ã§(å†)整列." +msgstr "オーディオãƒã‚¹ã¯ãƒ‰ãƒ©ãƒƒã‚°ãƒ»ã‚¢ãƒ³ãƒ‰ãƒ»ãƒ‰ãƒãƒƒãƒ—ã§ä¸¦ã¹æ›¿ãˆã‚‰ã‚Œã¾ã™ã€‚" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "ソãƒ(独立)" +msgstr "ソãƒ" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "ミュート(無音)" +msgstr "ミュート" #: editor/editor_audio_buses.cpp msgid "Bypass" @@ -1164,11 +1062,10 @@ msgstr "ãƒã‚¤ãƒ‘ス" #: editor/editor_audio_buses.cpp msgid "Bus options" -msgstr "ãƒã‚¹ã‚ªãƒ—ション" +msgstr "ãƒã‚¹ オプション" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "複製" @@ -1177,9 +1074,8 @@ msgid "Reset Volume" msgstr "音é‡ã‚’リセット" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Effect" -msgstr "エフェクトを消去" +msgstr "エフェクトを削除" #: editor/editor_audio_buses.cpp msgid "Audio" @@ -1191,11 +1087,11 @@ msgstr "オーディオãƒã‚¹ã‚’è¿½åŠ " #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "マスターãƒã‚¹ã¯å‰Šé™¤ã§ãã¾ã›ã‚“!" +msgstr "マスターãƒã‚¹ã¯å‰Šé™¤ã§ãã¾ã›ã‚“ï¼" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "オーディオãƒã‚¹ã®æ¶ˆåŽ»" +msgstr "オーディオãƒã‚¹ã®å‰Šé™¤" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" @@ -1210,144 +1106,122 @@ msgid "Move Audio Bus" msgstr "オーディオãƒã‚¹ã‚’移動" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save Audio Bus Layout As..." -msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’別åã§ä¿å˜" +msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’別åã§ä¿å˜..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." -msgstr "æ–°ã—ã„レイアウトã®å ´æ‰€..." +msgstr "æ–°è¦ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®å ´æ‰€..." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Open Audio Bus Layout" msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é–‹ã" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" -"リソースディレクトリã«ã€Œres://default_bus_layout.tresã€ãƒ•ァイルãŒã‚りã¾ã›ã‚“!" +msgstr "'res://default_bus_layout.tres' ファイルãŒã‚りã¾ã›ã‚“。" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "䏿£ãªãƒ•ァイルã§ã™.オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã§ã¯ã‚りã¾ã›ã‚“." +msgstr "無効ãªãƒ•ァイルã§ã™ã€‚オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã§ã¯ã‚りã¾ã›ã‚“。" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Bus" -msgstr "ãƒã‚¹ã‚’è¿½åŠ ã™ã‚‹" +msgstr "ãƒã‚¹ã‚’è¿½åŠ " #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "æ–°ã—ã„ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’生æˆ." +msgstr "æ–°è¦ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’作æˆã€‚" #: editor/editor_audio_buses.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load" -msgstr "èªã¿è¾¼ã‚€" +msgstr "èªè¾¼ã¿" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "æ—¢å˜ã®ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’èªã¿è¾¼ã‚€." +msgstr "æ—¢å˜ã®ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’èªè¾¼ã‚€ã€‚" #: editor/editor_audio_buses.cpp msgid "Save As" -msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜ã™ã‚‹" +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." -msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’別åã§ä¿å˜" +msgstr "ã“ã®ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’ファイルã«ä¿å˜ã€‚" #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" -msgstr "標準(既定)" +msgstr "デフォルトをèªè¾¼ã‚€" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "デフォルトã®ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚" +msgstr "デフォルトã®ãƒã‚¹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’èªè¾¼ã¿ã¾ã™ã€‚" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid name." -msgstr "無効ãªåå‰ã§ã™." +msgstr "無効ãªåå‰ã§ã™ã€‚" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Valid characters:" -msgstr "使用å¯èƒ½ãªæ–‡å—:" +msgstr "æœ‰åŠ¹ãªæ–‡å—:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "無効ãªåå‰ã§ã™. æ—¢å˜ã®ã‚¨ãƒ³ã‚¸ãƒ³ã‚¯ãƒ©ã‚¹ã®åå‰ã¨è¡çªã—ã¦ã¯ã„ã‘ã¾ã›ã‚“." +msgstr "無効ãªåå‰ã§ã™ã€‚æ—¢å˜ã®ã‚¨ãƒ³ã‚¸ãƒ³ã‚¯ãƒ©ã‚¹åã¨é‡è¤‡ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid name. Must not collide with an existing buit-in type name." -msgstr "無効ãªåå‰ã§ã™. æ—¢å˜ã®çµ„ã¿è¾¼ã¿åž‹ã®åå‰ã¨è¡çªã—ã¦ã¯ã„ã‘ã¾ã›ã‚“." +msgstr "無効ãªåå‰ã§ã™ã€‚æ—¢å˜ã®çµ„è¾¼ã¿åž‹åã¨é‡è¤‡ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid name. Must not collide with an existing global constant name." -msgstr "無効ãªåå‰ã§ã™. æ—¢å˜ã®ã‚°ãƒãƒ¼ãƒãƒ«å®šæ•°ã®åå‰ã¨è¡çªã—ã¦ã¯ã„ã‘ã¾ã›ã‚“." +msgstr "無効ãªåå‰ã§ã™ã€‚æ—¢å˜ã®ã‚°ãƒãƒ¼ãƒãƒ«å®šæ•°åã¨é‡è¤‡ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Autoload '%s' already exists!" -msgstr "æ—¢å˜ã®'%s' を自動èªã¿è¾¼ã¿ã—ã¾ã™!" +msgstr "自動èªè¾¼ã¿ '%s' ã¯æ—¢ã«å˜åœ¨ã—ã¾ã™ï¼" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rename Autoload" -msgstr "自動èªã¿è¾¼ã¿ã‚’åå‰å¤‰æ›´" +msgstr "自動èªè¾¼ã¿ã®åå‰å¤‰æ›´" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Toggle AutoLoad Globals" -msgstr "自動èªã¿è¾¼ã¿ã™ã‚‹ã‚°ãƒãƒ¼ãƒãƒ«ã‚’切替" +msgstr "ã‚°ãƒãƒ¼ãƒãƒ«ã®è‡ªå‹•èªè¾¼ã¿ã‚’切替ãˆ" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Move Autoload" -msgstr "自動èªã¿è¾¼ã¿ã‚’移動ã™ã‚‹" +msgstr "自動èªè¾¼ã¿ã‚’移動" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Remove Autoload" -msgstr "自動èªã¿è¾¼ã¿ã‚’å–り除ã" +msgstr "自動èªè¾¼ã¿ã‚’除去" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Enable" -msgstr "有効ã«ã™ã‚‹" +msgstr "有効" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" -msgstr "自動èªã¿è¾¼ã¿ã‚’çµ„ã¿æ›¿ãˆã‚‹" +msgstr "自動èªè¾¼ã¿ã®ä¸¦ã¹æ›¿ãˆ" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid Path." -msgstr "無効ãªãƒ‘スã§ã™." +msgstr "無効ãªãƒ‘スã§ã™ã€‚" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "File does not exist." -msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“." +msgstr "ファイルãŒå˜åœ¨ã—ã¾ã›ã‚“。" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "リソースã®ãƒ‘スã§ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" +msgstr "リソースパスã«ã‚りã¾ã›ã‚“。" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "自動èªã¿è¾¼ã¿ã‚’ä»˜åŠ " +msgstr "自動èªè¾¼ã¿ã‚’è¿½åŠ " #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp @@ -1355,17 +1229,16 @@ msgid "Path:" msgstr "パス:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Node Name:" -msgstr "ノードã®åå‰:" +msgstr "ノードå:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "åå‰" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Singleton" msgstr "シングルトン" @@ -1374,32 +1247,28 @@ msgid "Updating Scene" msgstr "シーンを更新" #: editor/editor_data.cpp -#, fuzzy msgid "Storing local changes..." -msgstr "ãƒãƒ¼ã‚«ãƒ«ç’°å¢ƒã®å¤‰æ›´ã‚’ä¿å˜ã™ã‚‹..." +msgstr "ãƒãƒ¼ã‚«ãƒ«ã®å¤‰æ›´ã‚’ä¿å˜..." #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "シーンを更新ã—ã¦ã„ã¾ã™..." +msgstr "シーンを更新..." #: editor/editor_data.cpp editor/editor_properties.cpp -#, fuzzy msgid "[empty]" -msgstr "(空)" +msgstr "[空]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "(未ä¿å˜)" +msgstr "[未ä¿å˜]" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first" -msgstr "ã¯ã˜ã‚ã«ã€ãƒ™ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„。" +msgstr "ã¯ã˜ã‚ã«ãƒ™ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Choose a Directory" -msgstr "ディレクトリをé¸ã¶" +msgstr "ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é¸æŠž" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp @@ -1419,64 +1288,63 @@ msgid "Could not create folder." msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Choose" msgstr "é¸ã¶" #: editor/editor_export.cpp -#, fuzzy msgid "Storing File:" -msgstr "ファイルをä¿å˜ã™ã‚‹:" +msgstr "ファイルã®ä¿å˜:" #: editor/editor_export.cpp -#, fuzzy msgid "Packing" -msgstr "パッã‚ングã™ã‚‹" +msgstr "パックã™ã‚‹" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "テンプレートファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:\n" +msgstr "テンプレートファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "ç¾åœ¨ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ—¢ã«å˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "ç¾åœ¨ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž" +msgid "Select This Folder" +msgstr "ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "パスをコピーã™ã‚‹" +msgstr "パスをコピー" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" -msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§è¡¨ç¤º" +msgid "Open in File Manager" +msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§é–‹ã" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§è¡¨ç¤º" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." -msgstr "フォルダを作æˆã™ã‚‹..." +msgstr "æ–°è¦ãƒ•ォルダ..." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Refresh" msgstr "å†èªè¾¼" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "All Recognized" -msgstr "知られã¦ã„ã‚‹ã™ã¹ã¦ã®" +msgstr "æ‰¿èªæ¸ˆã¿" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "ã™ã¹ã¦ã®ãƒ•ァイル(*)" +msgstr "ã™ã¹ã¦ã®ãƒ•ァイル (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" @@ -1495,7 +1363,8 @@ msgid "Open a File or Directory" msgstr "ファイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é–‹ã" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "ä¿å˜" @@ -1505,67 +1374,55 @@ msgid "Save a File" msgstr "ファイルをä¿å˜" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go Back" msgstr "戻る" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go Forward" msgstr "進む" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go Up" -msgstr "上ã«å‘ã‹ã†" +msgstr "上ã¸" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Hidden Files" -msgstr "éš ã—ファイルを切り替ãˆã‚‹" +msgstr "éš ã—ファイルã®åˆ‡æ›¿ãˆ" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Favorite" -msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’切り替ãˆã‚‹" +msgstr "ãŠæ°—ã«å…¥ã‚Šã®åˆ‡æ›¿ãˆ" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Mode" -msgstr "モードを切り替ãˆã‚‹" +msgstr "モード切替ãˆ" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Focus Path" -msgstr "フォーカスã¸ã®ãƒ‘ス" +msgstr "フォーカスパス" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’上ã’ã‚‹" +msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’上ã¸" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’下ã’ã‚‹" +msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’下ã¸" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder" -msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" +msgstr "親フォルダã¸" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "ディレクトリã¾ãŸã¯ãƒ•ァイル:" +msgstr "ディレクトリã¨ãƒ•ァイル:" #: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp #: editor/plugins/style_box_editor_plugin.cpp -#, fuzzy msgid "Preview:" msgstr "プレビュー:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "ファイル:" @@ -1574,84 +1431,62 @@ msgid "Must use a valid extension." msgstr "æœ‰åŠ¹ãªæ‹¡å¼µåを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: editor/editor_file_system.cpp -#, fuzzy msgid "ScanSources" -msgstr "ソース走査" +msgstr "スã‚ャンソース" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" msgstr "アセットを(å†ï¼‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "ヘルプを検索" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Class List:" -msgstr "クラスã®ãƒªã‚¹ãƒˆ:" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Search Classes" -msgstr "ã‚¯ãƒ©ã‚¹ã®æ¤œç´¢" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "上é¢" -#: editor/editor_help.cpp editor/property_editor.cpp -#, fuzzy +#: editor/editor_help.cpp msgid "Class:" msgstr "クラス:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp -#, fuzzy msgid "Inherits:" msgstr "継承:" #: editor/editor_help.cpp -#, fuzzy msgid "Inherited by:" msgstr "~ã«ç¶™æ‰¿ã•れる:" #: editor/editor_help.cpp -#, fuzzy msgid "Brief Description:" msgstr "è¦ç´„:" #: editor/editor_help.cpp -#, fuzzy -msgid "Members" -msgstr "メンãƒãƒ¼:" +msgid "Properties" +msgstr "プãƒãƒ‘ティ" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +#: editor/editor_help.cpp #, fuzzy -msgid "Members:" -msgstr "メンãƒãƒ¼:" +msgid "Properties:" +msgstr "プãƒãƒ‘ティ:" #: editor/editor_help.cpp -#, fuzzy -msgid "Public Methods" -msgstr "公開メソッド:" +msgid "Methods" +msgstr "メソッド" #: editor/editor_help.cpp #, fuzzy -msgid "Public Methods:" -msgstr "公開メソッド:" +msgid "Methods:" +msgstr "メソッド" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUIテーマã®éƒ¨å“" +#, fuzzy +msgid "Theme Properties" +msgstr "プãƒãƒ‘ティ" #: editor/editor_help.cpp #, fuzzy -msgid "GUI Theme Items:" -msgstr "GUIテーマã®éƒ¨å“:" +msgid "Theme Properties:" +msgstr "プãƒãƒ‘ティ:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Signals:" msgstr "シグナル:" @@ -1668,88 +1503,136 @@ msgid "enum " msgstr "列挙型 " #: editor/editor_help.cpp -#, fuzzy msgid "Constants" -msgstr "定数:" +msgstr "定数" #: editor/editor_help.cpp -#, fuzzy msgid "Constants:" msgstr "定数:" #: editor/editor_help.cpp -#, fuzzy -msgid "Description" -msgstr "記述:" +msgid "Class Description" +msgstr "クラスã®èª¬æ˜Ž" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "クラスã®èª¬æ˜Žï¼š" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "オンライン文書" +msgstr "オンラインãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"ç¾åœ¨ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®èª¬æ˜Žã¯ã‚りã¾ã›ã‚“。[color=$color][url=$url]貢献[/url][/" -"color]ã—ã¦ç§ãŸã¡ã‚’助ã‘ã¦ãã ã•ã„!" +"ç¾åœ¨ã€ã“ã®ã‚¯ãƒ©ã‚¹ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã‚りã¾ã›ã‚“ãŒã€[color=$color][url=$url]寄付" +"[/url][/color]ã€ã¾ãŸã¯[color=$color][url=$url2]リクエスト[/url][/color]ã¯å¯èƒ½" +"ã§ã™ã€‚" #: editor/editor_help.cpp #, fuzzy -msgid "Properties" -msgstr "プãƒãƒ‘ティ:" +msgid "Property Descriptions" +msgstr "プãƒãƒ‘ティã®èª¬æ˜Ž:" #: editor/editor_help.cpp #, fuzzy -msgid "Property Description:" -msgstr "プãƒãƒ‘ティã«ã¤ã„ã¦ã®è¨˜è¼‰:" +msgid "Property Descriptions:" +msgstr "プãƒãƒ‘ティã®èª¬æ˜Ž:" #: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"ç¾åœ¨ã€ã“ã®ãƒ—ãƒãƒ‘ティã®èª¬æ˜Žã¯ã‚りã¾ã›ã‚“。[color=$color][url=$url]貢献[/url][/" -"color]ã—ã¦ç§ãŸã¡ã‚’助ã‘ã¦ãã ã•ã„!" +"ç¾åœ¨ã€ã“ã®ãƒ—ãƒãƒ‘ティã®èª¬æ˜Žã¯ã‚りã¾ã›ã‚“。[color=$color][url=$url]寄付[/url][/" +"color]ã—ã¦ç§ãŸã¡ã‚’助ã‘ã¦ãã ã•ã„ï¼" #: editor/editor_help.cpp #, fuzzy -msgid "Methods" -msgstr "メソッド一覧:" +msgid "Method Descriptions" +msgstr "メソッドã®èª¬æ˜Ž:" #: editor/editor_help.cpp #, fuzzy -msgid "Method Description:" -msgstr "メソッドã«ã¤ã„ã¦ã®è¨˜è¼‰:" +msgid "Method Descriptions:" +msgstr "メソッドã®èª¬æ˜Ž:" #: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"ç¾åœ¨ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®èª¬æ˜Žã¯ã‚りã¾ã›ã‚“。[color=$color][url=$url]貢献[/url][/" -"color]ã—ã¦ç§ãŸã¡ã‚’助ã‘ã¦ãã ã•ã„!" +"ç¾åœ¨ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®èª¬æ˜Žã¯ã‚りã¾ã›ã‚“。[color=$color][url=$url]寄付[/url][/" +"color]ã—ã¦ç§ãŸã¡ã‚’助ã‘ã¦ãã ã•ã„ï¼" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "ヘルプを検索" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "通常表示" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "クラス" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Methods Only" +msgstr "メソッド" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "ä¿¡å·" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "定数" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "プãƒãƒ‘ティ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "プãƒãƒ‘ティ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "メンãƒãƒ¼" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "クラス:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "プãƒãƒ‘ティ:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "è¨å®š" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "複数è¨å®š:" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " 出力:" +msgstr "出力:" #: editor/editor_log.cpp editor/editor_profiler.cpp #: editor/editor_properties.cpp @@ -1759,36 +1642,36 @@ msgstr " 出力:" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "削除" +msgstr "クリア" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "出力" +msgstr "出力をクリア" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "エラーコード %d ã«ã‚ˆã‚Šã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãŒã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ %d ã§å¤±æ•—ã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Error saving resource!" -msgstr "リソースä¿å˜ã‚¨ãƒ©ãƒ¼!" +msgstr "リソースä¿å˜ä¸ã®ã‚¨ãƒ©ãƒ¼ï¼" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Save Resource As..." -msgstr "~ã¨ã„ã†åå‰ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¿å˜ã™ã‚‹" +msgstr "リソースを別åã§ä¿å˜..." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open file for writing:" -msgstr "ファイルを開ã„ã¦æ›¸ãè¾¼ã‚ã¾ã›ã‚“:" +msgstr "書込むファイルを開ã‘ã¾ã›ã‚“:" #: editor/editor_node.cpp -#, fuzzy msgid "Requested file format unknown:" -msgstr "ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœªçŸ¥ã®ãƒ•ォーマットã§ã™:" +msgstr "ファイル形å¼ãŒä¸æ˜Ž:" #: editor/editor_node.cpp msgid "Error while saving." @@ -1797,91 +1680,89 @@ msgstr "ä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" +"'%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。ファイルãŒç§»å‹•ã¾ãŸã¯å‰Šé™¤ã•れãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "「%sã€ã®è§£æžä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" +msgstr "'%s' ã®è§£æžä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "予期ã—ãªã„ファイル終了 '%s'." +msgstr "ファイル '%s' ãŒäºˆæœŸã›ãšçµ‚了ã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Missing '%s' or its dependencies." -msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" +msgstr "'%s' ã€ã¾ãŸã¯ä¾å˜é–¢ä¿‚ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "「%sã€ã®èªè¾¼ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" +msgstr "'%s' ã®èªè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp msgid "Saving Scene" msgstr "シーンをä¿å˜" #: editor/editor_node.cpp -#, fuzzy msgid "Analyzing" msgstr "分æžä¸" #: editor/editor_node.cpp -#, fuzzy msgid "Creating Thumbnail" -msgstr "サムãƒã‚¤ãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™" +msgstr "サムãƒã‚¤ãƒ«ã‚’作æˆ" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "ã“ã®å‡¦ç†ã«ã¯ã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™." +msgstr "ã“ã®æ“作ã¯ã€ãƒ„リー㮠root ãªã—ã§ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。" + +#: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"シーンをä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãŠãらãä¾å˜é–¢ä¿‚ (インスタンス) を完備ã•れã¦ã„" -"ãªã„ã¨æ€ã‚れã¾ã™." +"シーンをä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ ãŠãらãã€ä¾å˜é–¢ä¿‚(インスタンスã¾ãŸã¯ç¶™æ‰¿ï¼‰ã‚’" +"満ãŸã›ã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "é–‹ã„ã¦ã„るシーンを上書ãã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“!" #: editor/editor_node.cpp -#, fuzzy msgid "Can't load MeshLibrary for merging!" -msgstr "マージã™ã‚‹ãƒ¡ãƒƒã‚·ãƒ¥ãƒ©ã‚¤ãƒ–ラリーã®èªã¿è¾¼ã¿å¤±æ•—" +msgstr "マージã™ã‚‹ãƒ¡ãƒƒã‚·ãƒ¥ãƒ©ã‚¤ãƒ–ラリーãŒèªè¾¼ã‚ã¾ã›ã‚“ï¼" #: editor/editor_node.cpp -#, fuzzy msgid "Error saving MeshLibrary!" msgstr "メッシュライブラリーã®ä¿å˜ã‚¨ãƒ©ãƒ¼!" #: editor/editor_node.cpp -#, fuzzy msgid "Can't load TileSet for merging!" -msgstr "マージã™ã‚‹ã‚¿ã‚¤ãƒ«ã‚»ãƒƒãƒˆã®èªã¿è¾¼ã¿å¤±æ•—" +msgstr "マージã™ã‚‹ã‚¿ã‚¤ãƒ«ã‚»ãƒƒãƒˆãŒèªè¾¼ã‚ã¾ã›ã‚“ï¼" #: editor/editor_node.cpp -#, fuzzy msgid "Error saving TileSet!" -msgstr "タイルセットã®ä¿å˜ã‚¨ãƒ©ãƒ¼!" +msgstr "タイルセットã®ä¿å˜ã‚¨ãƒ©ãƒ¼ï¼" #: editor/editor_node.cpp -#, fuzzy msgid "Error trying to save layout!" -msgstr "レイアウトã®ä¿å˜ã‚¨ãƒ©ãƒ¼" +msgstr "レイアウトã®ä¿å˜ã‚¨ãƒ©ãƒ¼ï¼" #: editor/editor_node.cpp -#, fuzzy msgid "Default editor layout overridden." -msgstr "ã‚¨ãƒ‡ã‚£ã‚¿ã®æ¨™æº–レイアウトを上書ãã—ã¾ã—ãŸ." +msgstr "デフォルトã®ã‚¨ãƒ‡ã‚£ã‚¿ レイアウトを上書ãã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Layout name not found!" -msgstr "レイアウトåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" +msgstr "レイアウトåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ï¼" #: editor/editor_node.cpp -#, fuzzy msgid "Restored default layout to base settings." -msgstr "標準レイアウトを基本è¨å®šã«æˆ»ã—ã¾ã—ãŸ" +msgstr "デフォルトã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’基本è¨å®šã«æˆ»ã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp msgid "" @@ -1889,26 +1770,26 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚·ãƒ¼ãƒ³ã«æ‰€å±žã—ã¦ã„ã‚‹ãŸã‚ã€ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾" -"ã›ã‚“。\n" -"ã“ã®æ‰‹ç¶šãã«ã¤ã„ã¦ã‚ˆã‚Šè‰¯ã„ç†è§£ãŒå¿…è¦ãªã‚‰ã‚·ãƒ¼ãƒ³ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«é–¢ã™ã‚‹ãƒ‰ã‚ュメン" -"トを確èªã—ã¦ä¸‹ã•ã„。" +"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚·ãƒ¼ãƒ³ã«å±žã—ã¦ã„ã‚‹ãŸã‚ã€ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›" +"ん。\n" +"ã“ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒãƒ¼ã‚’よりよãç†è§£ã™ã‚‹ãŸã‚ã«ã€ã‚·ãƒ¼ãƒ³ã®èªã¿è¾¼ã¿ã«é–¢é€£ã™ã‚‹ãƒ‰ã‚ュメ" +"ントをãŠèªã¿ãã ã•ã„。" #: editor/editor_node.cpp msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it will not be kept when saving the current scene." msgstr "" -"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã•れãŸã‹ç¶™æ‰¿ã•れãŸã‚·ãƒ¼ãƒ³ã«æ‰€å±žã—ã¦ã„ã¾ã™ã€‚\n" -"ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜ã™ã‚‹ã¨ã€å¤‰æ›´ãŒç ´æ£„ã•れã¾ã™ã€‚" +"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã¾ãŸã¯ç¶™æ‰¿ã•れãŸã‚·ãƒ¼ãƒ³ã«å±žã—ã¦ã„ã¾ã™ã€‚\n" +"ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜ã—ã¦ã‚‚ã€å¤‰æ›´å†…容ã¯ä¿æŒã•れã¾ã›ã‚“。" #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" -"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚‚ã®ã§ã€ç·¨é›†ã§ãã¾ã›ã‚“。インãƒãƒ¼ãƒˆãƒ‘ãƒãƒ«ã®è¨å®š" -"を変更ã—ã€ã‚‚ã†ä¸€åº¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。" +"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚‚ã®ã§ã€ç·¨é›†ã§ãã¾ã›ã‚“。インãƒãƒ¼ãƒˆãƒ‘ãƒãƒ«ã§è¨å®š" +"を変更ã—ã€å†åº¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。" #: editor/editor_node.cpp msgid "" @@ -1917,9 +1798,10 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"ã“ã®ã‚·ãƒ¼ãƒ³ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚‚ã®ã§ã€å¤‰æ›´ãŒä¿å˜ã•れã¾ã›ã‚“。\n" -"インスタンス化ã™ã‚‹ã‹ç¶™æ‰¿ã—ã¦ãã ã•ã„。ドã‚ュメントã®ã‚·ãƒ¼ãƒ³ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«é–¢ã™" -"る部分をå‚ç…§ã—ã¦ãã ã•ã„。" +"ã“ã®ã‚·ãƒ¼ãƒ³ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚‚ã®ã§ã€å¤‰æ›´ã¯ä¿æŒã•れã¾ã›ã‚“。\n" +"インスタンス化ã‹ç¶™æ‰¿ã™ã‚‹ã¨ã€å¤‰æ›´ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚\n" +"ã“ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒãƒ¼ã‚’よりよãç†è§£ã™ã‚‹ãŸã‚ã«ã€ã‚·ãƒ¼ãƒ³ã®èªã¿è¾¼ã¿ã«é–¢é€£ã™ã‚‹ãƒ‰ã‚ュメ" +"ントをãŠèªã¿ãã ã•ã„。" #: editor/editor_node.cpp msgid "" @@ -1927,63 +1809,55 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"リモートオブジェクトã®ãŸã‚ã€å¤‰æ›´ãŒä¿å˜ã•れã¾ã›ã‚“。\n" -"ドã‚ュメントã®ãƒ‡ãƒãƒƒã‚°ã«é–¢ã™ã‚‹éƒ¨åˆ†ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" +"リモートオブジェクトã®ãŸã‚ã€å¤‰æ›´ã¯ä¿æŒã•れã¾ã›ã‚“。\n" +"ã“ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒãƒ¼ã‚’よりよãç†è§£ã™ã‚‹ã«ã¯ã€ãƒ‡ãƒãƒƒã‚°ã«é–¢é€£ã™ã‚‹ãƒ‰ã‚ュメントをãŠèª" +"ã¿ãã ã•ã„。" #: editor/editor_node.cpp -#, fuzzy msgid "There is no defined scene to run." -msgstr "実行ã™ã‚‹å®šç¾©æ¸ˆã¿ã®ã‚·ãƒ¼ãƒ³ã¯ã‚りã¾ã›ã‚“。" +msgstr "実行ã™ã‚‹ã‚·ãƒ¼ãƒ³ãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。" #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³ '%s' ã¯ã€ã‚·ãƒ¼ãƒ³ ファイルã§ã¯ã‚りã¾ã›ã‚“ã€æœ‰åйãªã‚‚ã®ã‚’é¸æŠžã—ã¦ã„" -"ã¾ã™ã‹ï¼Ÿ\n" -"'アプリケーション' カテゴリã®ä¸‹ã®'プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¨å®š'ã§å¤‰æ›´ã§ãã¾ã™ã€‚" +"メインシーンãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“ãŒã€é¸æŠžã—ã¦ã„ã¾ã™ã‹ï¼Ÿ\n" +"'アプリケーション' カテゴリã®ä¸‹ã® \"プãƒã‚¸ã‚§ã‚¯ãƒˆè¨å®š\" ã§å¤‰æ›´ã§ãã¾ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' does not exist, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³'%s' ã¯å˜åœ¨ã—ã¾ã›ã‚“ 有効ãªã‚·ãƒ¼ãƒ³ã‚’指定ã—ã¦ãã ã•ã„\n" -"指定ã•れãŸã‚·ãƒ¼ãƒ³ã¯å¾Œã§\"アプリケーション\"ã®\"プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¨å®š\"ã‹ã‚‰å¤‰æ›´å¯" -"能ã§ã™" +"é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³'%s' ã¯å˜åœ¨ã—ã¾ã›ã‚“ãŒã€æœ‰åйãªã‚·ãƒ¼ãƒ³ã‚’é¸æŠžã—ã¦ã„ã¾ã™ã‹ï¼Ÿ\n" +"'アプリケーション' カテゴリã®ä¸‹ã® \"プãƒã‚¸ã‚§ã‚¯ãƒˆè¨å®š\" ã§å¤‰æ›´ã§ãã¾ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' is not a scene file, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³ '%s' ã¯ã€ã‚·ãƒ¼ãƒ³ ファイルã§ã¯ã‚りã¾ã›ã‚“ã€æœ‰åйãªã‚‚ã®ã‚’é¸æŠžã—ã¦ã„" +"é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³'%s' ã¯ã‚·ãƒ¼ãƒ³ãƒ•ァイルã§ã¯ã‚りã¾ã›ã‚“ãŒã€æœ‰åйãªã‚·ãƒ¼ãƒ³ã‚’é¸æŠžã—ã¦ã„" "ã¾ã™ã‹ï¼Ÿ\n" -"'アプリケーション' カテゴリã®ä¸‹ã®'プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¨å®š'ã§å¤‰æ›´ã§ãã¾ã™ã€‚" +"'アプリケーション' カテゴリã®ä¸‹ã® \"プãƒã‚¸ã‚§ã‚¯ãƒˆè¨å®š\" ã§å¤‰æ›´ã§ãã¾ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Current scene was never saved, please save it prior to running." -msgstr "" -"ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ãŒä¿å˜ã•れã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€ãれ以å‰ã®å®Ÿè¡Œä¸ã«ä¿å˜ã—ã¦ãã ã•ã„。" +msgstr "ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ã¯ä¿å˜ã•れã¾ã›ã‚“ã§ã—ãŸã€‚実行ã™ã‚‹å‰ã«ä¿å˜ã—ã¦ãã ã•ã„。" #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "サブプãƒã‚»ã‚¹ã‚’é–‹å§‹ã§ãã¾ã›ã‚“!" +msgstr "サブプãƒã‚»ã‚¹ã‚’é–‹å§‹ã§ãã¾ã›ã‚“ã§ã—ãŸ!" #: editor/editor_node.cpp msgid "Open Scene" msgstr "シーンを開ã" #: editor/editor_node.cpp -#, fuzzy msgid "Open Base Scene" msgstr "基本シーンを開ã" @@ -1992,85 +1866,72 @@ msgid "Quick Open Scene..." msgstr "シーンã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン..." #: editor/editor_node.cpp -#, fuzzy msgid "Quick Open Script..." msgstr "スクリプトã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン..." #: editor/editor_node.cpp -#, fuzzy msgid "Save & Close" -msgstr "ファイルをä¿å˜" +msgstr "ä¿å˜ã—ã¦é–‰ã˜ã‚‹" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "終了ã™ã‚‹å‰ã«ã€'%s' ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "é–‰ã˜ã‚‹å‰ã«ã€'%s' ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp msgid "Save Scene As..." -msgstr "åå‰ã‚’付ã‘ã¦ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜" +msgstr "åå‰ã‚’付ã‘ã¦ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜..." #: editor/editor_node.cpp -#, fuzzy msgid "No" msgstr "ã„ã„ãˆ" #: editor/editor_node.cpp -#, fuzzy msgid "Yes" msgstr "ã¯ã„" #: editor/editor_node.cpp -#, fuzzy msgid "This scene has never been saved. Save before running?" -msgstr "ã“ã®ã‚·ãƒ¼ãƒ³ã¯ä¿å˜ã•れã¦ã„ã¾ã›ã‚“. runã™ã‚‹å‰ã«ä¿å˜ã—ã¾ã™ã‹?" +msgstr "ã“ã®ã‚·ãƒ¼ãƒ³ã¯ä¸€åº¦ã‚‚ä¿å˜ã•れã¦ã„ã¾ã›ã‚“。実行ã™ã‚‹å‰ã«ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "This operation can't be done without a scene." -msgstr "ã“ã®å‡¦ç†ã«ã¯ã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™." +msgstr "ã“ã®æ“作ã«ã¯ã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™ã€‚" #: editor/editor_node.cpp msgid "Export Mesh Library" msgstr "メッシュライブラリã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a root node." -msgstr "ã“ã®å‡¦ç†ã«ã¯ã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™." +msgstr "ã“ã®æ“作ã«ã¯ãƒ«ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ãŒå¿…è¦ã§ã™ã€‚" #: editor/editor_node.cpp msgid "Export Tile Set" msgstr "タイルセットã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." -msgstr "ã“ã®å‡¦ç†ã«ã¯ã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™." +msgstr "ã“ã®æ“作ã«ã¯é¸æŠžã•れãŸãƒŽãƒ¼ãƒ‰ãŒå¿…è¦ã§ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Current scene not saved. Open anyway?" -msgstr "ã“ã®ã‚·ãƒ¼ãƒ³ã¯ä¿å˜ã•れã¦ã„ã¾ã›ã‚“. ãれã§ã‚‚é–‹ãã¾ã™ã‹?" +msgstr "ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ã¯ä¿å˜ã•れã¦ã„ã¾ã›ã‚“。ãれã§ã‚‚é–‹ãã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp -#, fuzzy msgid "Can't reload a scene that was never saved." -msgstr "ä¿å˜ã•れã¦ã„ãªã„シーンã¯å†èªã¿è¾¼ã¿ã§ãã¾ã›ã‚“" +msgstr "ä¿å˜ã•れã¦ã„ãªã„シーンをèªã¿è¾¼ã‚€ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: editor/editor_node.cpp -#, fuzzy msgid "Revert" msgstr "å…ƒã«æˆ»ã™" #: editor/editor_node.cpp -#, fuzzy msgid "This action cannot be undone. Revert anyway?" -msgstr "ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯undoã§ãã¾ã›ã‚“. å…ƒã«æˆ»ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "ã“ã®æ“作ã¯ã‚¢ãƒ³ãƒ‰ã‚¥ã§ãã¾ã›ã‚“。ãれã§ã‚‚å…ƒã«æˆ»ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp -#, fuzzy msgid "Quick Run Scene..." -msgstr "シーンをクイックランã™ã‚‹" +msgstr "シーンをクイック実行ã™ã‚‹..." #: editor/editor_node.cpp msgid "Quit" @@ -2086,15 +1947,16 @@ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’é–‹ãã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "ファイルをä¿å˜ã—ã¦çµ‚了" +msgstr "ä¿å˜ã—ã¦çµ‚了" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "終了ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ã‚·ãƒ¼ãƒ³ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "終了ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ã‚·ãƒ¼ãƒ³ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’é–‹ãå‰ã«ã€ä»¥ä¸‹ã®ã‚·ãƒ¼ãƒ³ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "" +"プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’é–‹ãå‰ã«ã€ä»¥ä¸‹ã®ã‚·ãƒ¼ãƒ³ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp msgid "" @@ -2105,9 +1967,8 @@ msgstr "" "ã¿ãªã•れã¾ã™ã€‚å ±å‘Šã—ã¦ãã ã•ã„。" #: editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" -msgstr "メインシーンを指定" +msgstr "メインシーンをé¸ã¶" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2118,97 +1979,102 @@ msgstr "" #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "" -"アドオンプラグインã®ã‚¹ã‚¯ãƒªãƒ—トフィールドを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“: 'res://" -"addons/%s'." +"アドオンプラグインã®ã‚¹ã‚¯ãƒªãƒ—トフィールドを 'res://addons/%s' ã‹ã‚‰è¦‹ã¤ã‘ã‚‹ã“ã¨" +"ãŒã§ãã¾ã›ã‚“。" #: editor/editor_node.cpp -#, fuzzy msgid "Unable to load addon script from path: '%s'." -msgstr "フォントèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚" +msgstr "パス '%s' ã‹ã‚‰ã‚¢ãƒ‰ã‚ªãƒ³ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“。" + +#: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"パス '%s' ã‹ã‚‰ã‚¢ãƒ‰ã‚ªãƒ³ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“。スクリプトãŒãƒ„ールモードã§ã¯" +"ã‚りã¾ã›ã‚“。" #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" -"アドオンスクリプトをèªã¿è¾¼ã‚ã¾ã›ã‚“: '%s' エディタプラグインã§ã¯ã‚りã¾ã›ã‚“。" +"パス '%s' ã‹ã‚‰ã‚¢ãƒ‰ã‚ªãƒ³ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“。基本型ãŒã‚¨ãƒ‡ã‚£ã‚¿ãƒ—ラグインã§" +"ã¯ã‚りã¾ã›ã‚“。" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"アドオンスクリプトをèªã¿è¾¼ã‚ã¾ã›ã‚“: '%s' スクリプトãŒãƒ„ールモードã§ã¯ã‚りã¾" -"ã›ã‚“。" +"パス '%s' ã‹ã‚‰ã‚¢ãƒ‰ã‚ªãƒ³ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“。スクリプトãŒãƒ„ールモードã§ã¯" +"ã‚りã¾ã›ã‚“。" #: editor/editor_node.cpp msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"シーン'%s'ã¯è‡ªå‹•çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã€ä¿®æ£å¯èƒ½ã§ã™\n" -"変更ã™ã‚‹ãŸã‚ã«ã¯ã€ã‚·ãƒ¼ãƒ³ã‚’継承ã—ã¦æ–°ã—ã生æˆã—ã¾ã™." +"シーン '%s' ã¯è‡ªå‹•çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã®ã§ã€å¤‰æ›´ã§ãã¾ã›ã‚“。\n" +"変更ã™ã‚‹ãŸã‚ã«ã¯ã€æ–°ãŸã«ç¶™æ‰¿ã•れãŸã‚·ãƒ¼ãƒ³ã‚’作æˆã—ã¦ãã ã•ã„。" #: editor/editor_node.cpp -#, fuzzy msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"シーンèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€€ã‚·ãƒ¼ãƒ³ã¯ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス内ã«ä½ç½®ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“" -"ã®ã‚·ãƒ¼ãƒ³ã‚’é–‹ãã«ã¯'インãƒãƒ¼ãƒˆ'を使用ã—ã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス内ã«ä¿å˜ã—ã¦ãã ã•ã„" +"シーンèªè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス内ã«ã‚ã‚‹å¿…è¦ãŒã‚りã¾" +"ã™ã€‚ã“ã®ã‚·ãƒ¼ãƒ³ã‚’é–‹ãã«ã¯ 'インãƒãƒ¼ãƒˆ' を使用ã—ã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス内ã«ä¿å˜ã—ã¦" +"ãã ã•ã„。" #: editor/editor_node.cpp -#, fuzzy msgid "Scene '%s' has broken dependencies:" -msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" +msgstr "シーン '%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" #: editor/editor_node.cpp -#, fuzzy msgid "Clear Recent Scenes" -msgstr "最近開ã„ãŸãƒ•ァイルã®è¨˜éŒ²ã‚’クリア" +msgstr "最近開ã„ãŸã‚·ãƒ¼ãƒ³ã®å±¥æ´ã‚’クリア" #: editor/editor_node.cpp msgid "Save Layout" msgstr "レイアウトをä¿å˜" #: editor/editor_node.cpp -#, fuzzy msgid "Delete Layout" -msgstr "ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®æ¶ˆåŽ»" +msgstr "レイアウトã®å‰Šé™¤" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp -#, fuzzy msgid "Default" -msgstr "標準(既定)" +msgstr "デフォルト" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "ファイルシステム上ã§è¡¨ç¤º" + +#: editor/editor_node.cpp msgid "Play This Scene" -msgstr "シーンを実行" +msgstr "シーンをプレイ" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "ã»ã‹ã®ã‚¿ãƒ–ã‚’é–‰ã˜ã‚‹" +msgstr "タブを閉ã˜ã‚‹" #: editor/editor_node.cpp -#, fuzzy msgid "Switch Scene Tab" -msgstr "シーンタブを切り替ãˆã‚‹" +msgstr "シーンタブを切替ãˆ" #: editor/editor_node.cpp -#, fuzzy msgid "%d more files or folders" -msgstr "%d 多ã„ファイルã‹ãƒ•ォルダ" +msgstr "%d 以上ã®ãƒ•ァイルã¨ãƒ•ォルダ" #: editor/editor_node.cpp -#, fuzzy msgid "%d more folders" -msgstr "%d 多ã„ファイル" +msgstr "%d 以上ã®ãƒ•ォルダ" #: editor/editor_node.cpp -#, fuzzy msgid "%d more files" -msgstr "%d 多ã„ファイル" +msgstr "%d 以上ã®ãƒ•ァイル" #: editor/editor_node.cpp msgid "Dock Position" @@ -2216,74 +2082,62 @@ msgstr "ドックã®ä½ç½®" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "最低é™ãƒ¢ãƒ¼ãƒ‰" +msgstr "集ä¸ãƒ¢ãƒ¼ãƒ‰" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." -msgstr "最低é™ãƒ¢ãƒ¼ãƒ‰" +msgstr "集ä¸ãƒ¢ãƒ¼ãƒ‰ã‚’切替ãˆã‚‹ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Add a new scene." -msgstr "æ–°ã—ã„ãƒˆãƒ©ãƒƒã‚¯ã‚’è¿½åŠ ã€‚" +msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³ã‚’è¿½åŠ ã™ã‚‹ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Scene" msgstr "シーン" #: editor/editor_node.cpp -#, fuzzy msgid "Go to previously opened scene." -msgstr "éŽåŽ»ã«é–‹ã„ãŸã‚·ãƒ¼ãƒ³ã«ç§»å‹•" +msgstr "以å‰ã«é–‹ã„ãŸã‚·ãƒ¼ãƒ³ã«ç§»å‹•ã™ã‚‹ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Next tab" msgstr "次ã®ã‚¿ãƒ–" #: editor/editor_node.cpp -#, fuzzy msgid "Previous tab" -msgstr "以å‰ã®ã‚¿ãƒ–" +msgstr "å‰ã®ã‚¿ãƒ–" #: editor/editor_node.cpp -#, fuzzy msgid "Filter Files..." msgstr "ファイルを絞り込む..." #: editor/editor_node.cpp -#, fuzzy msgid "Operations with scene files." -msgstr "シーンファイルã¸ã®æ“作" +msgstr "ã‚·ãƒ¼ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã®æ“作。" #: editor/editor_node.cpp -#, fuzzy msgid "New Scene" -msgstr "æ–°ã—ã„シーン" +msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited Scene..." msgstr "æ–°ã—ã„継承ã—ãŸã‚·ãƒ¼ãƒ³..." #: editor/editor_node.cpp -#, fuzzy msgid "Open Scene..." msgstr "シーンを開ã..." #: editor/editor_node.cpp -#, fuzzy msgid "Save Scene" -msgstr "シーンをä¿å˜ã™ã‚‹" +msgstr "シーンをä¿å˜" #: editor/editor_node.cpp -msgid "Save all Scenes" -msgstr "シーンをã™ã¹ã¦ä¿å˜" +#, fuzzy +msgid "Save All Scenes" +msgstr "å…¨ã¦ã®ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜" #: editor/editor_node.cpp -#, fuzzy msgid "Close Scene" msgstr "シーンを閉ã˜ã‚‹" @@ -2292,17 +2146,14 @@ msgid "Open Recent" msgstr "最近使ã£ãŸãƒ•ァイルを開ã" #: editor/editor_node.cpp -#, fuzzy msgid "Convert To..." -msgstr "~ã«å¤‰æ›ã™ã‚‹..." +msgstr "変æ›..." #: editor/editor_node.cpp -#, fuzzy msgid "MeshLibrary..." msgstr "メッシュライブラリ..." #: editor/editor_node.cpp -#, fuzzy msgid "TileSet..." msgstr "タイルセット..." @@ -2312,28 +2163,23 @@ msgid "Undo" msgstr "å…ƒã«æˆ»ã™" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp -#, fuzzy +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" -msgstr "å†å®Ÿè¡Œ" +msgstr "やり直ã™" #: editor/editor_node.cpp -#, fuzzy msgid "Revert Scene" msgstr "シーンを戻ã™" #: editor/editor_node.cpp -#, fuzzy msgid "Miscellaneous project or scene-wide tools." -msgstr "数多ãã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚„シーンã®ãƒ„ール" +msgstr "ãã®ä»–ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã¾ãŸã¯ã‚·ãƒ¼ãƒ³å…¨ä½“ã®ãƒ„ール。" #: editor/editor_node.cpp -#, fuzzy msgid "Project" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆ" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¨å®š" @@ -2342,41 +2188,37 @@ msgid "Export" msgstr "エクスãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp -#, fuzzy msgid "Tools" msgstr "ツール" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’é–‹ãã¾ã™ã‹ï¼Ÿ" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ‡ãƒ¼ã‚¿ãƒ•ォルダを開ã" #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "終了ã—ã¦ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆä¸€è¦§ã‚’é–‹ã" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆä¸€è¦§ã‚’終了" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy +#: editor/project_export.cpp msgid "Debug" msgstr "デãƒãƒƒã‚°" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "リモートデãƒãƒƒã‚°ä»˜ãã§ãƒ‡ãƒ—ãƒã‚¤ï¼ˆæä¾›ï¼‰ã™ã‚‹" +msgstr "リモートデãƒãƒƒã‚°ã§ãƒ‡ãƒ—ãƒã‚¤" #: editor/editor_node.cpp -#, fuzzy msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"エクスãƒãƒ¼ãƒˆã™ã‚‹ã«ã›ã‚ˆã€ãƒ‡ãƒ—ãƒã‚¤ï¼ˆæä¾›ï¼‰ã™ã‚‹ã«ã›ã‚ˆã€ç”Ÿæˆã•れãŸå®Ÿè¡Œãƒ•ァイル" -"ã¯ã€ã“ã®ã‚³ãƒ³ãƒ”ューターã®ï¼©ï¼°ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãƒ‡ãƒãƒƒã‚°ã®ãŸã‚接続ã—よã†ã¨ã™ã‚‹." +"エクスãƒãƒ¼ãƒˆã¾ãŸã¯ãƒ‡ãƒ—ãƒã‚¤ã‚’行ã†å ´åˆã€ç”Ÿæˆã•れãŸå®Ÿè¡Œãƒ•ァイルã¯ãƒ‡ãƒãƒƒã‚°ã®ãŸã‚" +"ã«ã€ã“ã®ã‚³ãƒ³ãƒ”ューターã®ï¼©ï¼°ã«æŽ¥ç¶šã‚’試ã¿ã¾ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network FS" -msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァイルシステムã§ãƒ‡ãƒ—ãƒã‚¤ï¼ˆæä¾›ï¼‰ã™ã‚‹" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァイルシステムã§ã‚¹ãƒ¢ãƒ¼ãƒ«ãƒ‡ãƒ—ãƒã‚¤" #: editor/editor_node.cpp msgid "" @@ -2387,122 +2229,103 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åйã«ã™ã‚‹ã¨ã€æ›¸ã出ã—ã‚‚ã—ãã¯ãƒ‡ãƒ—ãƒã‚¤ï¼ˆæä¾›ï¼‰ã•ã‚Œã‚‹æ™‚ã€æœ€å°" -"ã®å®Ÿè¡Œãƒ•ァイルを生æˆã—ã¾ã™. \n" -"ファイルシステムã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¶Šã—ã«ã‚¨ãƒ‡ã‚£ã‚¿ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’利用ã—ã¾ã™\n" +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã¾ãŸã¯ãƒ‡ãƒ—ãƒã‚¤æ™‚ã«æœ€å°é™ã®å®Ÿè¡Œå¯èƒ½" +"ファイルãŒç”Ÿæˆã•れã¾ã™ã€‚\n" +"ファイルシステムã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ã‚¨ãƒ‡ã‚£ã‚¿ã«ã‚ˆã£ã¦ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰æä¾›ã•れ" +"ã¾ã™ã€‚\n" "Androidã§ã¯USBケーブルã®åˆ©ç”¨ã§ã‚ˆã‚Šé«˜é€Ÿã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯å¤§ããªã‚²ãƒ¼" -"ムã®ãƒ†ã‚¹ãƒˆã‚’スピードアップã§ãã¾ã™ã€‚" +"ムã®ãƒ†ã‚¹ãƒˆã‚’高速化ã§ãã¾ã™ã€‚" #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "コリジョンã®ã‚·ã‚§ã‚¤ãƒ—を見ãˆã‚‹ã‚ˆã†ã«ãªã‚‹" +msgstr "コリジョン形状ã®è¡¨ç¤º" #: editor/editor_node.cpp -#, fuzzy msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" -"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚³ãƒªã‚¸ãƒ§ãƒ³ã®ã‚·ã‚§ã‚£ãƒ—ã¨ãƒ¬ã‚¤ã‚ャストã®ãƒŽãƒ¼ãƒ‰ãŒã€" -"ゲーム実行時ã«è¦‹ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™." +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚³ãƒªã‚¸ãƒ§ãƒ³å½¢çжã¨ãƒ¬ã‚¤ã‚ャストノードãŒã€ã‚²ãƒ¼ãƒ 実" +"行ä¸ã«ã‚‚表示ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Visible Navigation" -msgstr "ナビゲーションãŒè¦‹ãˆã‚‹ã‚ˆã†ã«ãªã‚‹" +msgstr "ナビゲーションã®è¡¨ç¤º" #: editor/editor_node.cpp -#, fuzzy msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ãƒŠãƒ“ゲーションメッシュã¨ãƒãƒªã‚´ãƒ³ãŒã‚²ãƒ¼ãƒ 実行時" -"ã«è¦‹ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™" +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ãƒŠãƒ“ゲーションメッシュãŒã€ã‚²ãƒ¼ãƒ 実行ä¸ã«ã‚‚表示" +"ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Sync Scene Changes" msgstr "シーンã®å¤‰æ›´ã‚’åŒæœŸ" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is turned on, any changes made to the scene in the editor " "will be replicated in the running game.\n" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚¨ãƒ‡ã‚£ã‚¿ã«ã‚ˆã‚‹ã‚·ãƒ¼ãƒ³ã®å¤‰æ›´ã¯å®Ÿè¡Œä¸ã®ã‚²ãƒ¼ãƒ ã«é©" -"用ã•れã¾ã™.リモート実行ã®å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァイルシステムを" -"使ã†ã¨ã‚ˆã‚ŠåŠ¹æžœçš„ã§ã™" +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚¨ãƒ‡ã‚£ã‚¿ã‹ã‚‰ã‚·ãƒ¼ãƒ³ã«åŠ ãˆã‚‰ã‚ŒãŸå¤‰æ›´ãŒã€å®Ÿè¡Œä¸ã®" +"ゲームã«åæ˜ ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚\n" +"リモート実行ã®å ´åˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァイルシステムを使ã†ã¨ã‚ˆã‚ŠåŠ¹æžœçš„ã§ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Sync Script Changes" -msgstr "スクリプトã®å¤‰æ›´ã‚’åŒæœŸã™ã‚‹" +msgstr "スクリプトã®å¤‰æ›´ã‚’åŒæœŸ" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is turned on, any script that is saved will be reloaded on " "the running game.\n" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ä¿å˜ã—ãŸã‚¹ã‚¯ãƒªãƒ—トãŒå®Ÿè¡Œä¸ã®ã‚²ãƒ¼ãƒ ã«é©ç”¨ã•れã¾" -"ã™.リモート実行ã®å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァイルシステムを使ã†ã¨ã‚ˆ" -"り効果的ã§ã™" +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ä¿å˜ã—ãŸã‚¹ã‚¯ãƒªãƒ—トãŒã€å®Ÿè¡Œä¸ã®ã‚²ãƒ¼ãƒ ã«åæ˜ ã•れ" +"るよã†ã«ãªã‚Šã¾ã™ã€‚\n" +"リモート実行ã®å ´åˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァイルシステムを使ã†ã¨ã‚ˆã‚ŠåŠ¹æžœçš„ã§ã™ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "Editor" msgstr "エディタ" #: editor/editor_node.cpp editor/settings_config_dialog.cpp -#, fuzzy msgid "Editor Settings" -msgstr "エディタã®è¨å®š" +msgstr "エディタè¨å®š" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Layout" -msgstr "エディタã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ" +msgstr "エディタレイアウト" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle Fullscreen" -msgstr "フルスクリーンã®åˆ‡ã‚Šæ›¿ãˆ" +msgstr "フルスクリーン切替ãˆ" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "エディタã®è¨å®š" +msgstr "エディタã®ãƒ‡ãƒ¼ã‚¿ãƒ»è¨å®šãƒ•ォルダを開ã" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "エディタã®ãƒ‡ãƒ¼ã‚¿ãƒ•ォルダを開ã" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "エディタã®è¨å®š" +msgstr "エディタè¨å®šã®ãƒ•ォルダを開ã" #: editor/editor_node.cpp editor/project_export.cpp -#, fuzzy msgid "Manage Export Templates" -msgstr "テンプレート エクスãƒãƒ¼ãƒˆã‚’管ç†" +msgstr "エクスãƒãƒ¼ãƒˆãƒ†ãƒ³ãƒ—レートã®ç®¡ç†" #: editor/editor_node.cpp -#, fuzzy msgid "Help" msgstr "ヘルプ" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Classes" -msgstr "クラス" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2512,16 +2335,14 @@ msgid "Search" msgstr "検索" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Online Docs" -msgstr "オンライン文書" +msgstr "オンラインドã‚ュメント" #: editor/editor_node.cpp msgid "Q&A" msgstr "Q&A" #: editor/editor_node.cpp -#, fuzzy msgid "Issue Tracker" msgstr "課題(ãƒã‚°ï¼‰ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ " @@ -2530,92 +2351,73 @@ msgid "Community" msgstr "コミュニティ" #: editor/editor_node.cpp -#, fuzzy msgid "About" -msgstr "ã«ã¤ã„ã¦" +msgstr "概è¦" #: editor/editor_node.cpp -#, fuzzy msgid "Play the project." -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®å®Ÿè¡Œ" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’実行。" #: editor/editor_node.cpp -#, fuzzy msgid "Play" msgstr "実行" #: editor/editor_node.cpp -#, fuzzy msgid "Pause the scene" msgstr "ã‚·ãƒ¼ãƒ³ã‚’ä¸€æ™‚åœæ¢" #: editor/editor_node.cpp -#, fuzzy msgid "Pause Scene" msgstr "ã‚·ãƒ¼ãƒ³ã‚’ä¸€æ™‚åœæ¢" #: editor/editor_node.cpp -#, fuzzy msgid "Stop the scene." -msgstr "ã‚·ãƒ¼ãƒ³ã‚’åœæ¢" +msgstr "ã‚·ãƒ¼ãƒ³ã‚’åœæ¢ã€‚" #: editor/editor_node.cpp editor/editor_profiler.cpp msgid "Stop" msgstr "åœæ¢" #: editor/editor_node.cpp -#, fuzzy msgid "Play the edited scene." -msgstr "編集ã—ãŸã‚·ãƒ¼ãƒ³ã‚’実行" +msgstr "編集ã—ãŸã‚·ãƒ¼ãƒ³ã‚’実行。" #: editor/editor_node.cpp -#, fuzzy msgid "Play Scene" msgstr "シーンを実行" #: editor/editor_node.cpp -#, fuzzy msgid "Play custom scene" msgstr "カスタムシーンを実行" #: editor/editor_node.cpp -#, fuzzy msgid "Play Custom Scene" msgstr "カスタムシーンを実行" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "ビデオドライãƒã‚’変更ã™ã‚‹ã«ã¯ã€ã‚¨ãƒ‡ã‚£ã‚¿ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "ä¿å˜ã—ã¦å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "ä¿å˜ã—ã¦å†èµ·å‹•" #: editor/editor_node.cpp -#, fuzzy msgid "Spins when the editor window repaints!" -msgstr "ã‚¨ãƒ‡ã‚£ã‚¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’å†æç”»ã™ã‚‹ã¨ãã«å¤‰æ›´ã™ã‚‹!" +msgstr "エディタウィンドウã®å†æç”»æ™‚ã«åæ˜ ï¼" #: editor/editor_node.cpp -#, fuzzy msgid "Update Always" -msgstr "常ã«ã‚¢ãƒƒãƒ—デート" +msgstr "å¸¸ã«æ›´æ–°" #: editor/editor_node.cpp -#, fuzzy msgid "Update Changes" -msgstr "å¤‰æ›´ã‚’åæ˜ ã™ã‚‹" +msgstr "変更をé©ç”¨" #: editor/editor_node.cpp -#, fuzzy msgid "Disable Update Spinner" -msgstr "ã‚¢ãƒƒãƒ—ãƒ‡ãƒ¼ãƒˆåæ˜ ã‚’åœæ¢" - -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "インスペクター" +msgstr "æ›´æ–°ã®åæ˜ ã‚’ç„¡åŠ¹åŒ–" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp @@ -2623,18 +2425,20 @@ msgid "Import" msgstr "インãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp -#, fuzzy -msgid "Node" -msgstr "ノード" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "ファイルシステム" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "インスペクタ" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "ノード" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "ã™ã¹ã¦å±•é–‹ã™ã‚‹" +msgstr "下パãƒãƒ«ã‚’展開" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2645,40 +2449,36 @@ msgid "Don't Save" msgstr "ä¿å˜ã—ãªã„" #: editor/editor_node.cpp -#, fuzzy msgid "Import Templates From ZIP File" msgstr "ZIPファイルã‹ã‚‰ãƒ†ãƒ³ãƒ—レートをインãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’エクスãƒãƒ¼ãƒˆ" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp msgid "Export Library" -msgstr "ライブラリをエクスãƒãƒ¼ãƒˆ" +msgstr "ライブラリã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: editor/editor_node.cpp -#, fuzzy msgid "Merge With Existing" -msgstr "(ライブラリを)マージã™ã‚‹" +msgstr "æ—¢å˜ã®ï¼ˆãƒ©ã‚¤ãƒ–ラリを)マージ" #: editor/editor_node.cpp msgid "Password:" msgstr "パスワード:" #: editor/editor_node.cpp -#, fuzzy msgid "Open & Run a Script" -msgstr "é–‹ã„ã¦ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹" +msgstr "スクリプトを開ã„ã¦å®Ÿè¡Œ" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "æ–°ã—ã„継承ã—ãŸã‚·ãƒ¼ãƒ³..." +msgstr "æ–°è¦ã®ç¶™æ‰¿" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "èªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼" +msgstr "èªè¾¼ã¿ã‚¨ãƒ©ãƒ¼" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" @@ -2710,20 +2510,19 @@ msgstr "å‰ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "メッシュライブラリを生æˆ" +msgstr "メッシュプレビューを作æˆ" #: editor/editor_plugin.cpp msgid "Thumbnail..." msgstr "サムãƒã‚¤ãƒ«..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集" +msgstr "プラグインã®ç·¨é›†" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "インストール済ã¿ã®ãƒ—ラグイン:" +msgstr "インストール済プラグイン:" #: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp msgid "Update" @@ -2743,15 +2542,13 @@ msgid "Status:" msgstr "ステータス:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "編集" +msgstr "編集:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "å†ç”Ÿé–‹å§‹!" +msgstr "é–‹å§‹" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2771,62 +2568,67 @@ msgstr "フレーム%" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "固定フレーム%" +msgstr "物ç†ãƒ•レーム%" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "時間:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Inclusive" -msgstr "ã‚’å«ã‚€" +msgstr "å«" #: editor/editor_profiler.cpp -#, fuzzy msgid "Self" msgstr "セルフ" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame #:" msgstr "フレーム#:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Time" -msgstr "時間:" +msgstr "時間" #: editor/editor_profiler.cpp -#, fuzzy msgid "Calls" -msgstr "呼ã³å‡ºã—" +msgstr "呼出ã—" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "オン" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "レイヤ" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "ビット %d, 値 %d." +msgstr "ビット %d, 値 %d" -#: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy +#: editor/editor_properties.cpp msgid "[Empty]" -msgstr "ç©ºã‚’è¿½åŠ " +msgstr "[空]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "アサインã™ã‚‹" +msgstr "アサイン.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy msgid "Pick a Viewport" msgstr "ビューãƒãƒ¼ãƒˆã‚’é¸ã¶" @@ -2837,16 +2639,11 @@ msgstr "æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" -msgstr "" +msgstr "æ–°è¦ %s" #: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy msgid "Make Unique" -msgstr "ボーンを生æˆ" - -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "ファイルシステム上ã§è¡¨ç¤º" +msgstr "ユニーク化" #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -2856,51 +2653,46 @@ msgstr "ファイルシステム上ã§è¡¨ç¤º" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" -msgstr "貼り付ã‘" +msgstr "貼付ã‘" #: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert To %s" -msgstr "~ã«å¤‰æ›ã™ã‚‹..." +msgstr "%s ã«å¤‰æ›" #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" msgstr "エディタã§é–‹ã" #: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹" +msgstr "é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã¯ãƒ“ューãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“ï¼" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "セルサイズ:" +msgstr "サイズ: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "ページ: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "æ–°ã—ã„åå‰:" +msgstr "æ–°è¦ã‚ー:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "æ–°ã—ã„åå‰:" +msgstr "æ–°è¦ã®å€¤:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "ã‚ー・値ã®ãƒšã‚¢ã‚’è¿½åŠ " #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2909,7 +2701,7 @@ msgstr "アイテムを除去" #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "リストã‹ã‚‰ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠžã—ã¦ãã ã•ã„" +msgstr "一覧ã‹ã‚‰ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž" #: editor/editor_run_native.cpp msgid "" @@ -2921,12 +2713,11 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "ã‚ãªãŸã®ãƒã‚¸ãƒƒã‚¯ã‚’_run() メソッドã«è¨˜è¿°ã—ã¦ãã ã•ã„." +msgstr "ãƒã‚¸ãƒƒã‚¯ã‚’ _run() メソッドã«è¨˜è¿°ã™ã‚‹ã€‚" #: editor/editor_run_script.cpp -#, fuzzy msgid "There is an edited scene already." -msgstr "æ—¢ã«ç·¨é›†ã—ãŸã‚·ãƒ¼ãƒ³ãŒã‚りã¾ã™" +msgstr "æ—¢ã«ç·¨é›†ã•れãŸã‚·ãƒ¼ãƒ³ãŒã‚りã¾ã™ã€‚" #: editor/editor_run_script.cpp msgid "Couldn't instance script:" @@ -2934,7 +2725,7 @@ msgstr "スクリプトをインスタンス化ã§ãã¾ã›ã‚“ã§ã—ãŸ:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "ã‚ーワード'tool'を忘れã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ" +msgstr "ã‚ーワード 'tool' を忘れã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ" #: editor/editor_run_script.cpp msgid "Couldn't run script:" @@ -2942,11 +2733,11 @@ msgstr "スクリプトを実行ã§ãã¾ã›ã‚“ã§ã—ãŸ:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "'_run'メソッドを忘れã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ" +msgstr "'_run' メソッドを忘れã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹" +msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠž" #: editor/editor_sub_scene.cpp msgid "Scene Path:" @@ -2983,39 +2774,35 @@ msgstr "(ç¾åœ¨ã®ï¼‰" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." -msgstr "ミラーサイトをå–å¾—ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." +msgstr "ミラーをå–å¾—ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "テンプレート ãƒãƒ¼ã‚¸ãƒ§ãƒ³'%s'を除去ã—ã¾ã™ã‹ï¼Ÿ" +msgstr "テンプレート ãƒãƒ¼ã‚¸ãƒ§ãƒ³ '%s' を除去ã—ã¾ã™ã‹ï¼Ÿ" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レート(ZIP)ファイルを確èªã§ãã¾ã›ã‚“." +msgstr "エクスãƒãƒ¼ãƒˆ テンプレート ZIP ファイルを開ã‘ã¾ã›ã‚“。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "テンプレート内ã®version.txt フォーマットãŒä¸æ£ã§ã™." +msgstr "テンプレート( %s )内㮠version.txt ã®ãƒ•ォーマットãŒä¸æ£ã§ã™ã€‚" #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "テンプレート内ã«version.txtãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“." +msgstr "テンプレート内㫠version.txt ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "テンプレートã®ãƒ‘ス生æˆã‚¨ãƒ©ãƒ¼\n" +msgstr "テンプレートã®ãƒ‘ス生æˆã‚¨ãƒ©ãƒ¼:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Extracting Export Templates" -msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æŠ½å‡º" +msgstr "エクスãƒãƒ¼ãƒˆ ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æŠ½å‡º" #: editor/export_template_manager.cpp -#, fuzzy msgid "Importing:" -msgstr "インãƒãƒ¼ãƒˆ:" +msgstr "インãƒãƒ¼ãƒˆä¸:" #: editor/export_template_manager.cpp msgid "" @@ -3027,31 +2814,28 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't resolve." -msgstr "解決ã§ãã¾ã›ã‚“." +msgstr "解決ã§ãã¾ã›ã‚“。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect." -msgstr "接続失敗." +msgstr "接続ã§ãã¾ã›ã‚“。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "応ç”ãŒã‚りã¾ã›ã‚“." +msgstr "応ç”ãŒã‚りã¾ã›ã‚“。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request Failed." -msgstr "リクエスト失敗." +msgstr "リクエストã¯å¤±æ•—ã—ã¾ã—ãŸã€‚" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—." +msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3060,24 +2844,25 @@ msgstr "失敗:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "ダウンãƒãƒ¼ãƒ‰å®Œäº†." +msgstr "ダウンãƒãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã—ãŸã€‚" #: editor/export_template_manager.cpp msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"テンプレートã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ å•題ã®ãƒ†ãƒ³ãƒ—レートã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–㯠" +"'%s' ã«ã‚りã¾ã™ã€‚" #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "urlã®è¦æ±‚ã«å¤±æ•—ã—ã¾ã—ãŸ: " +msgstr "URL リクエストã®ã‚¨ãƒ©ãƒ¼: " #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." -msgstr "ãƒŸãƒ©ãƒ¼ã‚µã‚¤ãƒˆã«æŽ¥ç¶šä¸..." +msgstr "ãƒŸãƒ©ãƒ¼ã«æŽ¥ç¶šä¸..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Disconnected" msgstr "切æ–ã•れã¾ã—ãŸ" @@ -3095,9 +2880,8 @@ msgid "Connecting..." msgstr "接続ä¸..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" -msgstr "接続失敗" +msgstr "接続ã§ãã¾ã›ã‚“" #: editor/export_template_manager.cpp msgid "Connected" @@ -3118,7 +2902,7 @@ msgstr "接続エラー" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "SSLãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚¨ãƒ©ãƒ¼" +msgstr "SSL ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚¨ãƒ©ãƒ¼" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3134,95 +2918,90 @@ msgstr "ファイルã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "テンプレートを削除" +msgstr "テンプレートを除去" #: editor/export_template_manager.cpp msgid "Select template file" msgstr "ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" -msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レート マãƒãƒ¼ã‚¸ãƒ£ãƒ¼" +msgstr "テンプレートã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ マãƒãƒ¼ã‚¸ãƒ£ãƒ¼" #: editor/export_template_manager.cpp msgid "Download Templates" msgstr "テンプレートをダウンãƒãƒ¼ãƒ‰" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "リストã‹ã‚‰ãƒŸãƒ©ãƒ¼ã‚’é¸æŠž: " +msgstr "リストã‹ã‚‰ãƒŸãƒ©ãƒ¼ã‚’é¸æŠž: (Shift+クリック: ブラウザã§é–‹ã)" #: editor/file_type_cache.cpp -#, fuzzy msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" "書ãå‡ºã—æ™‚ã«file_type_cache.cchを確èªã§ãã¾ã›ã‚“。ファイルタイプã®ã‚ャッシュを" -"ä¿å˜ã§ãã¾ã›ã‚“!" +"ä¿å˜ã§ãã¾ã›ã‚“!\n" +"ファイルタイプã‚ャッシュをä¿å˜ã›ãšã« file_type_cache.cch を書込ã¿ç”¨ã«é–‹ãã“ã¨" +"ã¯ã§ãã¾ã›ã‚“ï¼" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "ãŠæ°—ã«å…¥ã‚Š:" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" -msgstr "ファイルシステムã«è¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€'%s' ã«ç§»å‹•ã§ãã¾ã›ã‚“!" +msgstr "ファイルシステム上㧠'%s' を見ã¤ã‘られãªã„ãŸã‚移動ã§ãã¾ã›ã‚“ï¼" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "サムãƒã‚¤ãƒ«è¡¨ç¤º" +msgstr "アイテムをサムãƒã‚¤ãƒ«ã§ã‚°ãƒªãƒƒãƒ‰è¡¨ç¤ºã™ã‚‹ã€‚" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "リストã§ã‚¢ã‚¤ãƒ†ãƒ を見る" +msgstr "アイテムを一覧ã§è¦‹ã‚‹ã€‚" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"\n" -"状æ³: ファイルã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ファイルを修æ£ã—ã¦æ‰‹å‹•ã§å†ã‚¤ãƒ³ãƒãƒ¼" -"トã—ã¦ä¸‹ã•ã„。" +"ステータス: ファイルã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ファイルを修æ£ã—ã¦æ‰‹å‹•ã§å†ã‚¤" +"ンãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Cannot move/rename resources root." -msgstr "ソースã®ãƒ•ォントをèªã¿è¾¼ã¿/処ç†ã§ãã¾ã›ã‚“." +msgstr "ルートã®ãƒªã‚½ãƒ¼ã‚¹ã¯ç§»å‹•・リãƒãƒ¼ãƒ ã§ãã¾ã›ã‚“。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Cannot move a folder into itself." -msgstr "åŒã˜ãƒ•ァイルã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“:" +msgstr "フォルダをフォルダ自身ã®ä¸ã«ç§»å‹•ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "エラーをインãƒãƒ¼ãƒˆä¸:" +msgstr "移動ä¸ã®ã‚¨ãƒ©ãƒ¼:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "èªã¿è¾¼ã¿å¤±æ•—:" +msgstr "複製エラー:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "シーン'%s' ã¯ä¾å˜é–¢ä¿‚ãŒå£Šã‚Œã¦ã„ã¾ã™:" +msgstr "ä¾å˜é–¢ä¿‚ã‚’æ›´æ–°ã§ãã¾ã›ã‚“:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" -msgstr "åå‰ãŒã‚りã¾ã›ã‚“" +msgstr "åå‰ãŒä»˜ã„ã¦ã„ã¾ã›ã‚“" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "åå‰ãŒä½¿ç”¨ä¸å¯èƒ½ãªæ–‡å—ã‚’å«ã‚“ã§ã„ã¾ã™" +msgstr "åå‰ã«ä½¿ç”¨ã§ããªã„æ–‡å—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "åå‰ãŒã‚りã¾ã›ã‚“." +msgstr "åå‰ãŒä»˜ã„ã¦ã„ã¾ã›ã‚“。" #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "åå‰ãŒä½¿ç”¨ä¸å¯èƒ½ãªæ–‡å—ã‚’å«ã‚“ã§ã„ã¾ã™." +msgstr "åå‰ã«ä½¿ç”¨ã§ããªã„æ–‡å—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." @@ -3237,63 +3016,67 @@ msgid "Renaming folder:" msgstr "フォルダåを変更:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "複製" +msgstr "ファイルを複製:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "フォルダåを変更:" +msgstr "フォルダを複製:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "ã™ã¹ã¦å±•é–‹ã™ã‚‹" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "ã™ã¹ã¦æŠ˜ã‚ŠãŸãŸã‚€" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "åå‰ã‚’変更ã™ã‚‹..." +msgid "Open Scene(s)" +msgstr "シーンを開ã" #: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "~ã¸ç§»å‹•ã™ã‚‹..." +msgid "Instance" +msgstr "インスタンス" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "シーンを開ã" +msgid "Add to favorites" +msgstr "ãŠæ°—ã«å…¥ã‚Š:" #: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "インスタンス" +msgid "Remove from favorites" +msgstr "ãŠæ°—ã«å…¥ã‚Šã‹ã‚‰å‰Šé™¤" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." -msgstr "ä¾å˜é–¢ä¿‚を編集..." +msgstr "ä¾å˜é–¢ä¿‚ã®ç·¨é›†..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View Owners..." -msgstr "オーナーを見る..." +msgstr "所有者を見る..." + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "åå‰ã‚’変更..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate..." -msgstr "複製" +msgstr "複製..." + +#: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "移動..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Script..." -msgstr "æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" +msgstr "æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "~ã¨ã„ã†åå‰ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¿å˜ã™ã‚‹" +msgstr "æ–°è¦ãƒªã‚½ãƒ¼ã‚¹..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "ã™ã¹ã¦å±•é–‹" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "ã™ã¹ã¦æŠ˜ã‚ŠãŸãŸã‚€" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3312,301 +3095,248 @@ msgstr "次ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "ファイルシステムをå†èµ°æŸ»" +msgstr "ファイルシステムをå†ã‚¹ã‚ャン" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "フォルダã®çŠ¶æ…‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«å¤‰æ›´" +msgid "Toggle split mode" +msgstr "モード切替ãˆ" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "ç¾åœ¨ç·¨é›†ä¸ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¿å˜ã™ã‚‹" +msgid "Search files" +msgstr "ファイル検索" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Instance the selected scene(s) as child of the selected node." -msgstr "é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã®åã¨ã—ã¦ã€é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³ã‚’インスタンス化ã™ã‚‹" - -#: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "ã‚¯ãƒ©ã‚¹ã®æ¤œç´¢" +msgstr "é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³ã‚’é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã®åã¨ã—ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã—ã¾ã™ã€‚" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -"ファイルをスã‚ャンã—ã¦ã„ã¾ã™\n" +"ファイルã®ã‚¹ã‚ャンä¸\n" "ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy +#: editor/filesystem_dock.cpp msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "ã“ã®ãƒ‘スã«ã¯ã€æŒ‡å®šã•れãŸåå‰ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ãŒæ—¢ã«å˜åœ¨ã—ã¾ã™ã€‚" +msgstr "ã“ã®ãƒ‘スã«ã¯ã€æ—¢ã«åŒåã®ãƒ•ァイルã‹ãƒ•ォルダãŒã‚りã¾ã™ã€‚" #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "上書ã" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "スクリプトを作æˆ" +msgstr "スクリプト作æˆ" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" -msgstr "タイルを探ã™" +msgid "Find in Files" +msgstr "ファイル内検索" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "検索" +msgid "Find:" +msgstr "検索: " #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "å˜èªžå…¨ä½“" +msgid "Folder:" +msgstr "フォルダ: " #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "大文å—å°æ–‡å—を区別ã™ã‚‹" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "フィルター:" +msgid "Filters:" +msgstr "フィルター" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find..." msgstr "検索..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp msgid "Replace..." -msgstr "ç½®ãæ›ãˆ..." +msgstr "ç½®æ›..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" msgstr "ã‚ャンセル" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "検索: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "ç½®æ›" +msgstr "ç½®æ›: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "ã™ã¹ã¦ç½®æ›" +msgstr "ã™ã¹ã¦ç½®æ›ï¼ˆã‚¢ãƒ³ãƒ‰ã‚¥ä¸å¯ï¼‰" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "ä¿å˜ä¸..." +msgstr "検索ä¸..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "テã‚ストを探ã™" +msgstr "検索完了" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "エラー:アニメーションã®åå‰ãŒã™ã§ã«ã‚ã‚‹åå‰ã§ã™!" +msgstr "グループåãŒæ—¢ã«ã‚りã¾ã™ã€‚" #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "無効ãªåå‰ã§ã™." +msgstr "無効ãªã‚°ãƒ«ãƒ¼ãƒ—åã§ã™ã€‚" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "グループ" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "グループã«åŠ ãˆã‚‹" +msgstr "グループã«ãªã„ノード" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "フィルター" +msgstr "フィルタノード" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "グループを編集" +msgstr "グループ内ノード" #: editor/groups_editor.cpp -#, fuzzy msgid "Add to Group" -msgstr "グループã«åŠ ãˆã‚‹" +msgstr "グループã«è¿½åŠ " #: editor/groups_editor.cpp -#, fuzzy msgid "Remove from Group" -msgstr "グループã‹ã‚‰å–り除ã" +msgstr "グループã‹ã‚‰é™¤åŽ»" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "グループ" +msgstr "グループã®ç®¡ç†" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "シーンをインãƒãƒ¼ãƒˆä¸..." +msgstr "å˜ä¸€ã®ã‚·ãƒ¼ãƒ³ã¨ã—ã¦èªè¾¼ã‚€" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Animations" -msgstr "アニメーションをインãƒãƒ¼ãƒˆ..." +msgstr "アニメーションを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "別ã®ãƒžãƒ†ãƒªã‚¢ãƒ«ã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "マテリアルを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "別ã®ã‚ªãƒ–ジェクトã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "オブジェクトを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "別ã®ã‚ªãƒ–ジェクトã€ãƒžãƒ†ãƒªã‚¢ãƒ«ã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "オブジェクト+マテリアルを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "別ã®ã‚ªãƒ–ジェクトã€ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "オブジェクト+アニメーションを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "別ã®ãƒžãƒ†ãƒªã‚¢ãƒ«ã€ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "マテリアル+アニメーションを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "別ã®ã‚ªãƒ–ジェクトã€ãƒžãƒ†ãƒªã‚¢ãƒ«ã€ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "オブジェクト+マテリアル+アニメーションを別々ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Multiple Scenes" -msgstr "3Dシーンをインãƒãƒ¼ãƒˆ" +msgstr "複数ã®ã‚·ãƒ¼ãƒ³ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "複数ã®ã‚·ãƒ¼ãƒ³ã€ãƒžãƒ†ãƒªã‚¢ãƒ«ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" +msgstr "複数ã®ã‚·ãƒ¼ãƒ³ï¼‹ãƒžãƒ†ãƒªã‚¢ãƒ«ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Import Scene" msgstr "シーンをインãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Importing Scene..." msgstr "シーンをインãƒãƒ¼ãƒˆä¸..." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating Lightmaps" -msgstr "ライトマップã¸ã®è»¢å†™:" +msgstr "ライトマップã®ç”Ÿæˆ" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh: " -msgstr "軸平行境界ボックス(AABB)を生æˆ" +msgstr "メッシュã®ç”Ÿæˆ: " #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Running Custom Script..." -msgstr "カスタムスクリプトを実行ä¸" +msgstr "カスタムスクリプトã®å®Ÿè¡Œä¸..." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Couldn't load post-import script:" -msgstr "æ—¢ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸã‚¹ã‚¯ãƒªãƒ—トをèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" +msgstr "インãƒãƒ¼ãƒˆæ¸ˆã®ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸï¼š" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Invalid/broken script for post-import (check console):" -msgstr "" -"無効ãª/壊れãŸã‚¤ãƒ³ãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—ト(コンソールをãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„)" +msgstr "無効・壊れãŸã‚¤ãƒ³ãƒãƒ¼ãƒˆæ¸ˆã‚¹ã‚¯ãƒªãƒ—ト(コンソールを確èªã—ã¦ãã ã•ã„):" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Error running post-import script:" -msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—ト実行エラー" +msgstr "インãƒãƒ¼ãƒˆæ¸ˆã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œä¸ã«ã‚¨ãƒ©ãƒ¼:" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Saving..." msgstr "ä¿å˜ä¸..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "'%s'ã®ãƒ‡ãƒ•ォルトã¨ã—ã¦è¨å®š" +msgstr "'%s' ã®ãƒ‡ãƒ•ォルトã¨ã—ã¦è¨å®š" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "'%s'ã®ãƒ‡ãƒ•ォルトを消去" +msgstr "'%s' ã®ãƒ‡ãƒ•ォルトをクリア" #: editor/import_dock.cpp -#, fuzzy msgid " Files" -msgstr "ファイル:" +msgstr " ファイル" #: editor/import_dock.cpp -#, fuzzy msgid "Import As:" -msgstr "~ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ:" +msgstr "åå‰ã‚’付ã‘ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ:" #: editor/import_dock.cpp editor/property_editor.cpp msgid "Preset..." -msgstr "åˆæœŸè¨å®šå€¤..." +msgstr "プリセット..." #: editor/import_dock.cpp -#, fuzzy msgid "Reimport" msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/inspector_dock.cpp -#, fuzzy msgid "Failed to load resource." -msgstr "リソースèªã¿è¾¼ã¿å¤±æ•—" - -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "オッケー" +msgstr "リソースã®èªè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: editor/inspector_dock.cpp #, fuzzy -msgid "Expand all properties" -msgstr "ã™ã¹ã¦å±•é–‹ã™ã‚‹" +msgid "Expand All Properties" +msgstr "ã™ã¹ã¦ã®ãƒ—ãƒãƒ‘ティを展開" #: editor/inspector_dock.cpp #, fuzzy -msgid "Collapse all properties" -msgstr "ã™ã¹ã¦æŠ˜ã‚ŠãŸãŸã‚€" +msgid "Collapse All Properties" +msgstr "ã™ã¹ã¦ã®ãƒ—ãƒãƒ‘ティを折りãŸãŸã‚€" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3614,125 +3344,105 @@ msgid "Save As..." msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Params" -msgstr "パラメーターをコピーã™ã‚‹" +msgstr "パラメーターをコピー" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Params" -msgstr "パラメーターを張り付ã‘ã‚‹" +msgstr "パラメーターを張付ã‘" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "リソースã®ã‚¯ãƒªãƒƒãƒ—ボードã¯ç©ºã§ã™!" +msgstr "リソースã®ã‚¯ãƒªãƒƒãƒ—ボードを編集" #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Resource" -msgstr "リソースをコピーã™ã‚‹" +msgstr "リソースをコピー" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Built-In" -msgstr "ビルトインを作る" +msgstr "ビルトインを作æˆ" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Sub-Resources Unique" -msgstr "一æ„ã®ï¼ˆï¼ä»–ã¨é‡è¤‡ã—ãªã„)サブリソースを生æˆ" +msgstr "ユニークãªã‚µãƒ–リソースを生æˆ" #: editor/inspector_dock.cpp -#, fuzzy msgid "Open in Help" -msgstr "ヘルプを開ã" +msgstr "ヘルプã§é–‹ã" #: editor/inspector_dock.cpp -#, fuzzy msgid "Create a new resource in memory and edit it." -msgstr "ãƒ¡ãƒ¢ãƒªãƒ¼ã«æ–°ã—ã„リソースを確ä¿ã—編集ã™ã‚‹" +msgstr "æ–°è¦ãƒªã‚½ãƒ¼ã‚¹ã‚’メモリ上ã«ä½œæˆã—ã¦ç·¨é›†ã™ã‚‹ã€‚" #: editor/inspector_dock.cpp -#, fuzzy msgid "Load an existing resource from disk and edit it." -msgstr "æ—¢å˜ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’ディスクã‹ã‚‰èªã¿è¾¼ã¿ç·¨é›†ã™ã‚‹" +msgstr "æ—¢å˜ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’ディスクã‹ã‚‰èªè¾¼ã¿ç·¨é›†ã™ã‚‹ã€‚" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "以å‰ã«ç·¨é›†ã—ãŸã‚ªãƒ–ジェクト履æ´ã§ã€Œã²ã¨ã¤å‰ã€ã«ç§»å‹•." +msgstr "å±¥æ´å†…ã®ç·¨é›†æ¸ˆã‚ªãƒ–ジェクトをå‰ã¸ã€‚" #: editor/inspector_dock.cpp -#, fuzzy msgid "Go to the next edited object in history." -msgstr "以å‰ã«ç·¨é›†ã—ãŸã‚ªãƒ–ジェクト履æ´ã§ã€Œæ¬¡ã€ã«ç§»å‹•." +msgstr "å±¥æ´å†…ã®ç·¨é›†æ¸ˆã‚ªãƒ–ジェクトを次ã¸ã€‚" #: editor/inspector_dock.cpp -#, fuzzy msgid "History of recently edited objects." -msgstr "最近編集ã—ãŸã‚ªãƒ–ジェクトã®å±¥æ´" +msgstr "最近編集ã—ãŸã‚ªãƒ–ジェクトã®å±¥æ´ã€‚" #: editor/inspector_dock.cpp -#, fuzzy msgid "Object properties." -msgstr "オブジェクトã®ãƒ—ãƒãƒ‘ティ" +msgstr "オブジェクトã®ãƒ—ãƒãƒ‘ティ。" #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "フィルター" +msgstr "フィルタã®ãƒ—ãƒãƒ‘ティ" #: editor/inspector_dock.cpp -#, fuzzy msgid "Changes may be lost!" -msgstr "ベクトル定数を変更" +msgstr "変更ãŒå¤±ã‚れるã‹ã‚‚ã—れã¾ã›ã‚“ï¼" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "複数ノード セット" +msgstr "マルãƒãƒŽãƒ¼ãƒ‰ セット" #: editor/node_dock.cpp -#, fuzzy msgid "Select a Node to edit Signals and Groups." -msgstr "シグナルã¨ã‚°ãƒ«ãƒ¼ãƒ—を編集ã™ã‚‹ãŸã‚ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠž" +msgstr "シグナルã¨ã‚°ãƒ«ãƒ¼ãƒ—を編集ã™ã‚‹ãŸã‚ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹ã€‚" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集" +msgstr "プラグインã®ç·¨é›†" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "アウトラインを生æˆ" +msgstr "プラグインã®ä½œæˆ" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "プラグイン" +msgstr "プラグインå:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "サブフォルダ:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "言語" +msgstr "言語:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "スクリプトã¯å•題ã‚りã¾ã›ã‚“" +msgstr "スクリプトå:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "ã„ã¾ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化ã—ã¾ã™ã‹ï¼Ÿ" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’生æˆ" +msgstr "ãƒãƒªã‚´ãƒ³ã‚’作æˆ" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp @@ -3741,25 +3451,22 @@ msgid "Edit Poly" msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Insert Point" -msgstr "挿入" +msgstr "ãƒã‚¤ãƒ³ãƒˆæŒ¿å…¥" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp -#, fuzzy msgid "Edit Poly (Remove Point)" -msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集(ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去)" +msgstr "ãƒãƒªã‚´ãƒ³ã‚’編集(点を除去)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" msgstr "ãƒãƒªã‚´ãƒ³ã¨ãƒã‚¤ãƒ³ãƒˆã‚’除去" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Create a new polygon from scratch" -msgstr "æ–°è¦ã«ãƒãƒªã‚´ãƒ³ã‚’生æˆã™ã‚‹" +msgstr "æ–°è¦ã«ãƒãƒªã‚´ãƒ³ã‚’作æˆ" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -3768,38 +3475,35 @@ msgid "" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" -"ãƒãƒªã‚´ãƒ³ã‚’編集:\n" -"LMB: ãƒã‚¤ãƒ³ãƒˆã‚’移動.\n" -"Ctrl+LMB: セグメント分割.\n" -"RMB: ãƒã‚¤ãƒ³ãƒˆé™¤åŽ»." +"æ—¢å˜ã®ãƒãƒªã‚´ãƒ³ã‚’編集:\n" +"左クリック: 点を移動。\n" +"Ctrl+左クリック: セグメントを分割。\n" +"å³ã‚¯ãƒªãƒƒã‚¯: 点を消ã™ã€‚" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去" +msgstr "点を削除" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add Animation" -msgstr "ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åŠ ãˆã‚‹" +msgstr "ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’è¿½åŠ " #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "èªã¿è¾¼ã‚€" +msgstr "èªè¾¼ã‚€.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "ã“ã®ã‚¿ã‚¤ãƒ—ã®ãƒŽãƒ¼ãƒ‰ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ルートノードã®ã¿ãŒè¨±å¯ã•れã¾ã™ã€‚" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3809,67 +3513,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"アニメーションツリーãŒéžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã™ã€‚\n" +"å†ç”Ÿã‚’有効ã«ã™ã‚‹ãŸã‚ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã—ã¾ã™ã€‚アクティベートã«å¤±æ•—ã—ãŸå ´åˆã¯" +"ノードã®è¦å‘Šã‚’確èªã—ã¦ãã ã•ã„。" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "スペース内ã®ãƒ–レンドä½ç½®ã‚’è¨å®š" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "ç‚¹ã‚’é¸æŠžã—ã¦ç§»å‹•ã—ã€å³ã‚¯ãƒªãƒƒã‚¯ã§ç‚¹ã‚’作æˆã—ã¾ã™ã€‚" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去" +msgstr "点を作æˆã™ã‚‹ã€‚" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "マウスå³ãƒœã‚¿ãƒ³:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去." +msgstr "点を消ã™ã€‚" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "ãƒã‚¤ãƒ³ãƒˆã‚’移動" +msgstr "点" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "アニメーションã®ãƒŽãƒ¼ãƒ‰" +msgstr "アニメーションノードを開ã" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "アクション'%s'ã¯æ—¢ã«ã‚りã¾ã™!" +msgstr "ä¸‰è§’å½¢ãŒæ—¢ã«å˜åœ¨ã—ã¾ã™" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "ブレンドシェイプ2Dã¯ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ„リー ノードã«å±žã—ã¾ã›ã‚“。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "三角形ãŒå˜åœ¨ã—ãªã„ãŸã‚ã€ãƒ–レンドã§ãã¾ã›ã‚“。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "点を繋ã„ã§ä¸‰è§’形を作æˆã™ã‚‹ã€‚" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "%d 三角形をパースä¸ã§ã™:" +msgstr "点ã¨ä¸‰è§’形を消ã™ã€‚" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "自動的ã«ãƒ–レンド三角形を生æˆ" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3877,28 +3578,33 @@ msgstr "" msgid "Snap" msgstr "スナップ" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "ブレンド:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "ノードフィルターã®ç·¨é›†" +msgstr "フィルタã®ç·¨é›†" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "出力ノードをブレンドツリーã«è¿½åŠ ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." -msgstr "" +msgstr "接続ã§ãã¾ã›ã‚“。ãƒãƒ¼ãƒˆãŒä½¿ç”¨ä¸ã‹ã€æŽ¥ç¶šãŒç„¡åйã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"アニメーションプレーヤーã®ã‚»ãƒƒãƒˆãŒãªã„ãŸã‚ã€ãƒˆãƒ©ãƒƒã‚¯åã‚’å–å¾—ã§ãã¾ã›ã‚“。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "" +msgstr "プレーヤーã®ãƒ‘スè¨å®šãŒç„¡åйãªãŸã‚ã€ãƒˆãƒ©ãƒƒã‚¯åã‚’å–å¾—ã§ãã¾ã›ã‚“。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3906,43 +3612,38 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒ¤ãƒ¼ã«æœ‰åйãªãƒ«ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã®ãƒ‘スãŒãªã„ãŸã‚ã€ãƒˆãƒ©ãƒƒã‚¯åã‚’å–" +"å¾—ã§ãã¾ã›ã‚“。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "ãƒŽãƒ¼ãƒ‰ã‚’åŠ ãˆã‚‹" +msgstr "ãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ .." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "ノードフィルターã®ç·¨é›†" +msgstr "フィルタリング済トラックã®ç·¨é›†:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "編集å¯èƒ½ãªå" +msgstr "フィルタリングを有効化" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Toggle Autoplay" -msgstr "オートプレイを切替" +msgstr "自動å†ç”Ÿã®åˆ‡æ›¿" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "New Animation Name:" -msgstr "æ–°ã—ã„アニメーションã®åå‰:" +msgstr "æ–°è¦ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å:" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "New Anim" -msgstr "æ–°ã—ã„アニメーション" +msgstr "æ–°è¦ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Change Animation Name:" -msgstr "アニメーションã®åå‰ã‚’変更:" +msgstr "アニメーションåを変更:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -3950,19 +3651,16 @@ msgstr "アニメーションを削除ã—ã¾ã™ã‹ï¼Ÿ" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Remove Animation" -msgstr "アニメーションを削除" +msgstr "アニメーションを除去" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "エラー:アニメーションã®åå‰ãŒä¸æ£ã§ã™!" +msgstr "アニメーションåãŒç„¡åйã§ã™ï¼" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "エラー:アニメーションã®åå‰ãŒã™ã§ã«ã‚ã‚‹åå‰ã§ã™!" +msgstr "アニメーションåã¯æ—¢ã«å˜åœ¨ã—ã¾ã™ï¼" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3970,85 +3668,70 @@ msgid "Rename Animation" msgstr "アニメーションã®åå‰ã‚’変更" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Blend Next Changed" -msgstr "ブレンドã™ã‚‹å¯¾è±¡ã‚’変更" +msgstr "次ã®å¤‰æ›´ã‚’ブレンド" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Change Blend Time" -msgstr "ブレンドã™ã‚‹æ™‚間を変更" +msgstr "ブレンド時間ã®å¤‰æ›´" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Load Animation" -msgstr "アニメーションをèªã¿è¾¼ã¿" +msgstr "アニメーションèªè¾¼ã¿" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Duplicate Animation" msgstr "アニメーションを複製" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "エラー:アニメーションã®è¤‡è£½å…ƒãŒã‚りã¾ã›ã‚“" +msgstr "コピーã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚りã¾ã›ã‚“ï¼" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "エラー:クリップボードã«ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒªã‚½ãƒ¼ã‚¹ãŒã‚りã¾ã›ã‚“" +msgstr "クリップボードã«ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒªã‚½ãƒ¼ã‚¹ãŒã‚りã¾ã›ã‚“ï¼" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" -msgstr "貼り付ã‘ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³" +msgstr "貼付ã‘ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Paste Animation" -msgstr "アニメーションを貼り付ã‘ã‚‹" +msgstr "アニメーションを貼付ã‘" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "エラー:編集ã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚りã¾ã›ã‚“!" +msgstr "編集ã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚りã¾ã›ã‚“ï¼" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç¾æ™‚点ã‹ã‚‰å·»ã戻ã—å†ç”Ÿ(A)" +msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç¾åœ¨ã®ä½ç½®ã‹ã‚‰é€†å†ç”Ÿã™ã‚‹ã€‚(A)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’最後ã‹ã‚‰å·»ã戻ã—å†ç”Ÿ (Shift+A)" +msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’最後ã‹ã‚‰é€†å†ç”Ÿã™ã‚‹ã€‚(Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Stop animation playback. (S)" -msgstr "アニメーションå†ç”Ÿã‚’䏿¢(S)" +msgstr "アニメーションã®å†ç”Ÿã‚’åœæ¢ã™ã‚‹ã€‚(S)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Play selected animation from start. (Shift+D)" -msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’最åˆã‹ã‚‰å†ç”Ÿ(Shift+D)" +msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’最åˆã‹ã‚‰å†ç”Ÿã™ã‚‹ã€‚(Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Play selected animation from current pos. (D)" -msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç¾æ™‚点ã‹ã‚‰å†ç”Ÿ(D)" +msgstr "é¸æŠžã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç¾åœ¨ã®ä½ç½®ã‹ã‚‰å†ç”Ÿã™ã‚‹ã€‚(D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation position (in seconds)." -msgstr "アニメーションã®çµŒéŽæ™‚é–“(秒)" +msgstr "アニメーションã®ä½ç½®ï¼ˆç§’)。" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Scale animation playback globally for the node." -msgstr "ノードã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å†ç”Ÿã®ç¸®å°ºå¤‰æ›´." +msgstr "ノードã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å†ç”Ÿã‚’ã‚°ãƒãƒ¼ãƒãƒ«ã«ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã€‚" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation Tools" msgstr "アニメーションツール" @@ -4059,27 +3742,23 @@ msgstr "アニメーション" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New" -msgstr "æ–°è¦ä½œæˆ" +msgstr "æ–°è¦" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "é·ç§»ï¼ˆãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ï¼‰" +msgstr "トランジションã®ç·¨é›†..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "エディタã§é–‹ã" +msgstr "インスペクタã§é–‹ã" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Display list of animations in player." -msgstr "プレイヤーã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒªã‚¹ãƒˆã‚’表示ã™ã‚‹" +msgstr "プレーヤーã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒªã‚¹ãƒˆã‚’表示ã™ã‚‹ã€‚" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Autoplay on Load" -msgstr "èªã¿è¾¼ã¿å¾Œã€è‡ªå‹•å†ç”Ÿ" +msgstr "èªè¾¼ã¿å¾Œã€è‡ªå‹•å†ç”Ÿ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning" @@ -4090,35 +3769,32 @@ msgid "Enable Onion Skinning" msgstr "オニオンスã‚ンを有効ã«ã™ã‚‹" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "セクション:" +msgstr "æ–¹å‘" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Past" -msgstr "貼り付ã‘" +msgstr "éŽåŽ»" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Future" -msgstr "テクスãƒãƒ£" +msgstr "未æ¥" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "奥行ã" +msgstr "深度" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "1ステップ" +msgstr "1ステップ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "2ステップ" +msgstr "2ステップ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "3ステップ" +msgstr "3ステップ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" @@ -4133,18 +3809,16 @@ msgid "Include Gizmos (3D)" msgstr "ギズモ(3D)ã‚’å«ã‚€" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "アニメーションを貼り付ã‘ã‚‹" +msgstr "アニメーションプレーヤーを固定" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Create New Animation" -msgstr "アニメーションを新ã—ã作る" +msgstr "アニメーションを新è¦ä½œæˆ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "アニメーションã®åå‰:" +msgstr "アニメーションå:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp @@ -4152,39 +3826,35 @@ msgstr "アニメーションã®åå‰:" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" -msgstr "エラー!" +msgstr "エラーï¼" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Blend Times:" -msgstr "ブレンドã®å›žæ•°:" +msgstr "ブレンド時間:" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Next (Auto Queue):" -msgstr "次(オートã‚ュー)" +msgstr "次(自動ã‚ュー):" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Cross-Animation Blend Times" -msgstr "アニメーション間ã®ãƒ–レンド回数" +msgstr "アニメーション間ã®ãƒ–レンド時間" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "終了" +msgstr "終り" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "å³åº§" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "åŒæœŸ" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "終りã«" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" @@ -4192,12 +3862,11 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "サブトランジションã«ã¯ã€é–‹å§‹ãƒŽãƒ¼ãƒ‰ã¨çµ‚了ノードãŒå¿…è¦ã§ã™ã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "リソースã®ãƒ‘スã§ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" +msgstr "パス( %s )ã«å†ç”Ÿãƒªã‚½ãƒ¼ã‚¹ãŒè¨å®šã•れã¦ã„ã¾ã›ã‚“。" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4205,40 +3874,40 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ç§»å‹•。\n" +"å³ã‚¯ãƒªãƒƒã‚¯ã§æ–°è¦ãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ ã€‚\n" +"Shift+å·¦ã‚¯ãƒªãƒƒã‚¯ã§æŽ¥ç¶šã‚’ä½œæˆã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "%s ã‚’æ–°è¦ä½œæˆ" +msgstr "æ–°è¦ãƒŽãƒ¼ãƒ‰ã‚’作æˆã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã¾ã™:" +msgstr "ノードを接続。" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "é¸æŠžã—ãŸãƒˆãƒ©ãƒƒã‚¯ã‚’削除ã—ã¾ã™ã€‚" +msgstr "é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã¾ãŸã¯ãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ã‚’除去" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"開始時ã«ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’自動å†ç”Ÿã«åˆ‡æ›¿ãˆã€ãƒªã‚¹ã‚¿ãƒ¼ãƒˆã¾ãŸã¯ã‚¼ãƒã«ã‚·ãƒ¼ã‚¯ã™" +"る。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "終了アニメーションをè¨å®šã™ã‚‹ã€‚ã“れã¯ã‚µãƒ–トランジションã«ä¾¿åˆ©ã§ã™ã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "é·ç§»" +msgstr "トランジション: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "アニメーション" +msgstr "アニメーションツリー" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" @@ -4246,9 +3915,8 @@ msgstr "æ–°ã—ã„åå‰:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Scale:" -msgstr "縮尺:" +msgstr "スケール:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade In (s):" @@ -4260,164 +3928,136 @@ msgstr "フェードアウト:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "ブレンド(æ··åˆï¼‰" +msgstr "ブレンド" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Mix" -msgstr "ミクシング" +msgstr "ミックス" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Auto Restart:" -msgstr "自動ã§ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’最åˆã‹ã‚‰å†ç”Ÿã™ã‚‹ :" +msgstr "自動リスタート:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" -msgstr "アニメーションを最åˆã‹ã‚‰å†ç”Ÿã™ã‚‹ :" +msgstr "リスタート:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Random Restart (s):" -msgstr "ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ãƒ©ãƒ³ãƒ€ãƒ ã«æœ€åˆã‹ã‚‰å†ç”Ÿã™ã‚‹:" +msgstr "ランダムリスタート:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Start!" -msgstr "å†ç”Ÿé–‹å§‹!" +msgstr "スタートï¼" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Amount:" msgstr "ç·è¨ˆ:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy -msgid "Blend:" -msgstr "ブレンド:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Blend 0:" msgstr "ブレンド 0:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Blend 1:" msgstr "ブレンド 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "X-Fade Time (s):" -msgstr "クãƒã‚¹ãƒ•ェード時間(秒)" +msgstr "クãƒã‚¹ãƒ•ェード時間(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Current:" -msgstr "ç¾åœ¨ã®:" +msgstr "ç¾åœ¨:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Add Input" msgstr "å…¥åŠ›ã‚’è¿½åŠ " #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Clear Auto-Advance" -msgstr "自動表示ã®è§£é™¤" +msgstr "自動アドãƒãƒ³ã‚¹ã®è§£é™¤" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Set Auto-Advance" -msgstr "自動表示をè¨å®š" +msgstr "自動アドãƒãƒ³ã‚¹ã‚’è¨å®š" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Delete Input" -msgstr "入力を消去" +msgstr "入力を削除" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Animation tree is valid." -msgstr "アニメーションツリーã¯å•題ã‚りã¾ã›ã‚“." +msgstr "ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ„ãƒªãƒ¼ã¯æœ‰åйã§ã™ã€‚" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Animation tree is invalid." -msgstr "アニメーションツリーã«å•題ãŒã‚りã¾ã™." +msgstr "アニメーションツリーãŒç„¡åйã§ã™ã€‚" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Animation Node" -msgstr "アニメーションã®ãƒŽãƒ¼ãƒ‰" +msgstr "アニメーション ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "OneShot Node" msgstr "ワンショット ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Mix Node" -msgstr "ミã‚シング ノード" +msgstr "ミックス ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "ブレンド2ノード" +msgstr "ブレンド2 ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "ブレンド3ノード" +msgstr "ブレンド3 ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "ブレンド4ノード" +msgstr "ブレンド4 ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "進行速度ノード" +msgstr "タイムスケール ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "TimeSeek Node" -msgstr "時刻移動ノード" +msgstr "タイムシーク ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" -msgstr "トランジション(é·ç§»ï¼‰ãƒŽãƒ¼ãƒ‰" +msgstr "トランジション ノード" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Import Animations..." msgstr "アニメーションをインãƒãƒ¼ãƒˆ..." #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Edit Node Filters" -msgstr "ノードフィルターã®ç·¨é›†" +msgstr "ノードフィルタã®ç·¨é›†" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." -msgstr "フィルター..." +msgstr "フィルタ..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Contents:" msgstr "コンテンツ:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "ビューファイル:" +msgstr "ファイルを表示" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" msgstr "ホストåを解決ã§ãã¾ã›ã‚“:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Connection error, please try again." -msgstr "接続失敗 å†è©¦è¡Œã‚’" +msgstr "接続エラー。å†è©¦è¡Œã—ã¦ãã ã•ã„。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" @@ -4428,64 +4068,53 @@ msgid "No response from host:" msgstr "ホストã‹ã‚‰å¿œç”ãŒã‚りã¾ã›ã‚“:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, return code:" -msgstr "リクエスト失敗 リターン コード:" +msgstr "リクエスト失敗。リターンコード:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, too many redirects" -msgstr "リクエスト失敗 リダイレクトã®å›žæ•°ãŒå¤šã™ãŽã¾ã™" +msgstr "リクエスト失敗。リダイレクトéŽå¤š" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Bad download hash, assuming file has been tampered with." -msgstr "ダウンãƒãƒ¼ãƒ‰å†…容ã®ãƒãƒƒã‚·ãƒ¥ãŒä¸æ•´åˆã€€æ”¹ã–ã‚“ã®å¯èƒ½æ€§ãŒã‚りã¾ã™." +msgstr "" +"ダウンãƒãƒ¼ãƒ‰ãƒãƒƒã‚·ãƒ¥ãŒä¸æ£ã§ã™ã€‚ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ”¹ã–ã‚“ ã•れã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Expected:" msgstr "予測:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Got:" msgstr "å–å¾—:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Failed sha256 hash check" -msgstr "sha256ã®ãƒãƒƒã‚·ãƒ¥ãƒã‚§ãƒƒã‚¯å¤±æ•—" +msgstr "sha256 ãƒãƒƒã‚·ãƒ¥ãƒã‚§ãƒƒã‚¯å¤±æ•—" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Asset Download Error:" -msgstr "アセットã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰å¤±æ•—:" +msgstr "アセットã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã‚¨ãƒ©ãƒ¼:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "ダウンãƒãƒ¼ãƒ‰ä¸" +msgstr "ダウンãƒãƒ¼ãƒ‰ä¸ (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "ダウンãƒãƒ¼ãƒ‰ä¸" +msgstr "ダウンãƒãƒ¼ãƒ‰ä¸..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Resolving..." msgstr "解決ä¸..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" msgstr "リクエスト発行エラー" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Idle" -msgstr "待機ä¸" +msgstr "待機" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" @@ -4657,6 +4286,11 @@ msgstr "ã‚ャンãƒã‚¹ã‚¢ã‚¤ãƒ†ãƒ ã®ç·¨é›†" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "ã‚ャンãƒã‚¹ã‚¢ã‚¤ãƒ†ãƒ ã®ç·¨é›†" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "ã‚ャンãƒã‚¹ã‚¢ã‚¤ãƒ†ãƒ ã®ç·¨é›†" @@ -4710,7 +4344,7 @@ msgstr "Alt+ドラッグ:移動" #, fuzzy msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" -"ï½–ã‚ーを押ã™ã¨ãƒ”ボットã®å¤‰æ›´ã€'Shift+v' ã§ãƒ”ボットをドラッグ(移動ä¸ã§ã‚‚)" +"vã‚ーを押ã™ã¨ãƒ”ボットã®å¤‰æ›´ã€'Shift+v' ã§ãƒ”ボットをドラッグ(移動ä¸ã§ã‚‚)" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4728,6 +4362,11 @@ msgid "Rotate Mode" msgstr "回転モード" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "スケール(拡大縮å°ï¼‰ãƒ¢ãƒ¼ãƒ‰(R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "" @@ -4842,6 +4481,11 @@ msgstr "ã“ã®ã‚ªãƒ–ジェクトã®åï¼ˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆï¼‰ã‚’é¸æŠžå¯èƒ½ã¨ #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Skeleton Options" +msgstr "スケルトン..." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Show Bones" msgstr "ボーンを表示ã™ã‚‹" @@ -4901,6 +4545,10 @@ msgid "Show Viewport" msgstr "1 ビューãƒãƒ¼ãƒˆ" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy msgid "Center Selection" msgstr "é¸æŠžå¯¾è±¡ã‚’ä¸å¤®ã«" @@ -5045,11 +4693,11 @@ msgstr "åˆæœŸè¨å®šå€¤ã‚’èªã¿è¾¼ã‚€" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’è¿½åŠ " +msgstr "ç‚¹ã‚’è¿½åŠ " #: editor/plugins/curve_editor_plugin.cpp msgid "Remove point" -msgstr "é¸æŠžã—ã¦ã„ã‚‹ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’削除" +msgstr "ãƒã‚¤ãƒ³ãƒˆã‚’除去" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -5118,7 +4766,7 @@ msgstr "æ—¢å˜ã®ãƒãƒªã‚´ãƒ³ã‚’編集:" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "LMB: Move Point." -msgstr "マウス左ボタン:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’移動." +msgstr "LMB: 点を移動ã™ã‚‹ã€‚" #: editor/plugins/light_occluder_2d_editor_plugin.cpp #, fuzzy @@ -5127,7 +4775,7 @@ msgstr "Ctrl+マウス左ボタン: セグメントを分割" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." -msgstr "マウスå³ãƒœã‚¿ãƒ³:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去." +msgstr "å³ã‚¯ãƒªãƒƒã‚¯: 点を消ã™ã€‚" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -5403,10 +5051,9 @@ msgid "Create Navigation Polygon" msgstr "ナビゲーションãƒãƒªã‚´ãƒ³ã‚’生æˆ" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp #, fuzzy -msgid "Generating AABB" -msgstr "軸平行境界ボックス(AABB)を生æˆ" +msgid "Generating Visibility Rect" +msgstr "å¯è¦–性ã®çŸ©å½¢ã‚’生æˆ" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5440,6 +5087,12 @@ msgstr "発光(Emission)マスクをクリア" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp #, fuzzy +msgid "Convert to CPUParticles" +msgstr "大文å—ã«å¤‰æ›" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "Particles" msgstr "é ‚ç‚¹" @@ -5498,9 +5151,8 @@ msgid "Emission Points:" msgstr "発光点:" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Surface Points" -msgstr "サーフェース(表é¢ï¼‰ãƒã‚¤ãƒ³ãƒˆ" +msgstr "表é¢ã®ç‚¹" #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5522,13 +5174,13 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "パーティクルマテリアルãŒå¿…è¦ã§ã™." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +#, fuzzy +msgid "Generating AABB" msgstr "軸平行境界ボックス(AABB)を生æˆ" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "大文å—ã«å¤‰æ›" +msgid "Generate AABB" +msgstr "軸平行境界ボックス(AABB)を生æˆ" #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5573,7 +5225,7 @@ msgstr "曲線ã®Out-ãƒãƒ³ãƒ‰ãƒ«ã‚’移動ã™ã‚‹" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’é¸æŠž" +msgstr "ç‚¹ã‚’é¸æŠž" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5583,15 +5235,13 @@ msgstr "Shift+ドラッグ:コントãƒãƒ¼ãƒ«ãƒã‚¤ãƒ³ãƒˆã‚’é¸æŠž" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Click: Add Point" -msgstr "クリック:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’è¿½åŠ " +msgstr "クリック: ç‚¹ã‚’è¿½åŠ " #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Right Click: Delete Point" -msgstr "å³ã‚¯ãƒªãƒƒã‚¯:ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去" +msgstr "å³ã‚¯ãƒªãƒƒã‚¯: 点を削除" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -5599,9 +5249,8 @@ msgstr "コントãƒãƒ¼ãƒ«ãƒã‚¤ãƒ³ãƒˆã‚’é¸ã¶ (Shift+Drag)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Add Point (in empty space)" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’è¿½åŠ ï¼ˆç©ºç™½ã«ï¼‰" +msgstr "点を空ãスペースã«è¿½åŠ " #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5612,7 +5261,7 @@ msgstr "分割ã™ã‚‹(曲線を)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去" +msgstr "点を削除" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5710,9 +5359,8 @@ msgid "Split already exists." msgstr "アクション'%s'ã¯æ—¢ã«ã‚りã¾ã™!" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’è¿½åŠ " +msgstr "åˆ†å‰²ã‚’è¿½åŠ " #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5739,7 +5387,7 @@ msgstr "ãƒãƒªã‚´ãƒ³ï¼’Dã®UVエディタ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5815,7 +5463,7 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "åŠå¾„:" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5907,23 +5555,23 @@ msgid "Paste Resource" msgstr "リソースを張り付ã‘ã‚‹" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "エディタã§é–‹ã" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "インスタンス:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp #, fuzzy msgid "Type:" msgstr "åž‹(Type):" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "エディタã§é–‹ã" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "リソースをèªã¿è¾¼ã‚€" @@ -5961,6 +5609,11 @@ msgstr "イメージèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" @@ -6068,12 +5721,7 @@ msgstr "パスをコピーã™ã‚‹" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "ファイルシステム上ã§è¡¨ç¤º" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "History Prev" +msgid "History Previous" msgstr "ç›´å‰ã®å±¥æ´" #: editor/plugins/script_editor_plugin.cpp @@ -6151,7 +5799,7 @@ msgstr "デãƒãƒƒã‚¬ã‚’é–‹ã„ãŸã¾ã¾ã«" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "次ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" #: editor/plugins/script_editor_plugin.cpp @@ -6159,11 +5807,6 @@ msgid "Open Godot online documentation" msgstr "Godotã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³æ–‡æ›¸ã‚’é–‹ã" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search the class hierarchy." -msgstr "クラス階層を検索." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "リファレンス文書を探ã™." @@ -6173,7 +5816,7 @@ msgstr "ç›´å‰ã®ã€Œç·¨é›†ã—ãŸæ–‡æ›¸ã€ã¸ç§»å‹•." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "次ã®ã®ã€Œç·¨é›†ã—ãŸæ–‡æ›¸ã€ã¸ç§»å‹•." +msgstr "次ã®ã€Œç·¨é›†ã—ãŸæ–‡æ›¸ã€ã¸ç§»å‹•." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -6203,21 +5846,9 @@ msgstr "デãƒãƒƒã‚¬" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "ヘルプを検索" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "ã‚¯ãƒ©ã‚¹ã®æ¤œç´¢" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"組ã¿è¾¼ã¾ã‚ŒãŸã‚¹ã‚¯ãƒªãƒ—ãƒˆã¯æ‰€å±žã™ã‚‹ã‚·ãƒ¼ãƒ³ãŒèªã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ã¨ç·¨é›†ã§ãã¾ã›ã‚“" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -6228,6 +5859,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "関数~ã«ç§»å‹•..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "ファイルシステムã®ãƒªã‚½ãƒ¼ã‚¹ã®ã¿ãƒ‰ãƒãƒƒãƒ—ã§ãã¾ã™." @@ -6275,9 +5911,8 @@ msgid "Select All" msgstr "ã™ã¹ã¦é¸æŠž" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’除去" +msgstr "行を削除" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -6321,11 +5956,13 @@ msgid "Trim Trailing Whitespace" msgstr "連続スペースを刈り込む" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "インデントをスペースã«å¤‰æ›" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "インデントをタブã«å¤‰æ›" #: editor/plugins/script_text_editor.cpp @@ -6342,38 +5979,32 @@ msgid "Remove All Breakpoints" msgstr "ã™ã¹ã¦ã®ãƒ–レークãƒã‚¤ãƒ³ãƒˆã‚’消去" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "次ã®ãƒ–レークãƒã‚¤ãƒ³ãƒˆã«ç§»å‹•" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "最後ã®ãƒ–レークãƒã‚¤ãƒ³ãƒˆã«æˆ»ã‚‹" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "大文å—ã«å¤‰æ›" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "å°æ–‡å—ã«å¤‰æ›" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "å‰ã‚’検索" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "ファイルを絞り込む..." #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Goto Function..." +msgid "Go to Function..." msgstr "関数~ã«ç§»å‹•..." #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Goto Line..." +msgid "Go to Line..." msgstr "~行ã«ç§»å‹•..." #: editor/plugins/script_text_editor.cpp @@ -6475,12 +6106,20 @@ msgid "Animation Key Inserted." msgstr "アニメーションã®ã‚ãƒ¼ãŒæŒ¿å…¥ã•れã¦ã„ã¾ã™." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "ピッãƒ" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "æç”»ã•れãŸã‚ªãƒ–ジェクト" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" -msgstr "ç´ æã®å¤‰æ›´" +msgstr "マテリアルã®å¤‰æ›´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" @@ -6492,7 +6131,7 @@ msgstr "サーフェースã®å¤‰æ›´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "ドãƒãƒ¼ã‚³ãƒ¼ãƒ«ï¼ˆDaw call)" +msgstr "ドãƒãƒ¼ã‚³ãƒ¼ãƒ«" #: editor/plugins/spatial_editor_plugin.cpp msgid "Vertices" @@ -6652,6 +6291,11 @@ msgid "Freelook Speed Modifier" msgstr "フリールックã®é€Ÿåº¦ã‚’調整" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "æƒ…å ±ã‚’è¡¨ç¤º" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Xformダイアãƒã‚°" @@ -6761,11 +6405,6 @@ msgstr "拡大縮å°ãƒ„ール" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Snap To Floor" -msgstr "Snapモード:" - -#: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" msgstr "フルスクリーンã®åˆ‡ã‚Šæ›¿ãˆ" @@ -7198,6 +6837,11 @@ msgid "Fix Invalid Tiles" msgstr "無効ãªåå‰ã§ã™." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "é¸æŠžå¯¾è±¡ã‚’ä¸å¤®ã«" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "タイルマップを塗る" @@ -7246,24 +6890,31 @@ msgstr "ã‚¿ã‚¤ãƒ«ã‚’é¸æŠž" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "é¸æŠžã—ã¦ã„ã‚‹ã‚‚ã®ã‚’削除" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "0度回転" +#, fuzzy +msgid "Rotate left" +msgstr "回転モード" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "90度回転" +#, fuzzy +msgid "Rotate right" +msgstr "å³ã«ç§»å‹•" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "180度回転" +msgid "Flip horizontally" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "270度回転" +#, fuzzy +msgid "Clear transform" +msgstr "トランスフォーム" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -7294,7 +6945,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -7312,7 +6963,7 @@ msgid "Merge from scene?" msgstr "シーンã‹ã‚‰ãƒžãƒ¼ã‚¸ã—ã¾ã™ã‹ï¼Ÿ" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -7399,6 +7050,16 @@ msgstr "" "ã“ã®ãƒ—ラットフォームã«å‘ã‘ã¦ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã®ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "離ã—ãŸ" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "%sã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸" + +#: editor/project_export.cpp msgid "Presets" msgstr "åˆæœŸè¨å®šå€¤" @@ -7407,6 +7068,10 @@ msgid "Add..." msgstr "è¿½åŠ ..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "エクスãƒãƒ¼ãƒˆãƒ‘ス:" + +#: editor/project_export.cpp msgid "Resources" msgstr "リソース" @@ -7478,6 +7143,16 @@ msgstr "エクスãƒãƒ¼ãƒˆ" #: editor/project_export.cpp #, fuzzy +msgid "Export mode?" +msgstr "エクスãƒãƒ¼ãƒˆã®ãƒ¢ãƒ¼ãƒ‰:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "エクスãƒãƒ¼ãƒˆ" + +#: editor/project_export.cpp +#, fuzzy msgid "Export templates for this platform are missing:" msgstr "" "ã“ã®ãƒ—ラットフォームã«å‘ã‘ã¦ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã®ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" @@ -7611,7 +7286,7 @@ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス:" #: editor/project_manager.cpp msgid "Browse" -msgstr "å‚照…" +msgstr "å‚ç…§" #: editor/project_manager.cpp msgid "Unnamed Project" @@ -7905,6 +7580,8 @@ msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" +"無効ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³åã§ã™ã€‚空もã—ãã¯'/', ':', '=', '\\' ã‚„ '\"'ã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§" +"ãã¾ã›ã‚“。" #: editor/project_settings_editor.cpp #, fuzzy @@ -7979,10 +7656,6 @@ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆè¨å®š (project.godot)" msgid "General" msgstr "一般" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "プãƒãƒ‘ティ:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -8125,11 +7798,6 @@ msgstr "ノードã¸ã®ãƒ‘ス:" msgid "Bit %d, val %d." msgstr "ビット %d, 値 %d." -#: editor/property_editor.cpp -#, fuzzy -msgid "Properties:" -msgstr "プãƒãƒ‘ティ:" - #: editor/property_selector.cpp #, fuzzy msgid "Select Property" @@ -8223,7 +7891,7 @@ msgid "Step" msgstr "ステップ:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -8232,7 +7900,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -8277,7 +7945,7 @@ msgstr "大文å—" msgid "Reset" msgstr "ズームをリセット" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "エラー" @@ -8345,6 +8013,11 @@ msgstr "シーンã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Instance Child Scene" +msgstr "åシーンをインスタンス化" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Clear Script" msgstr "スクリプトをクリア" @@ -8388,6 +8061,12 @@ msgid "Save New Scene As..." msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³ã«åå‰ã‚’付ã‘ã¦ä¿å˜..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Editable Children" msgstr "編集å¯èƒ½ãªå" @@ -8472,6 +8151,11 @@ msgid "Clear Inheritance" msgstr "継承をクリアã™ã‚‹" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Godotã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³æ–‡æ›¸ã‚’é–‹ã" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "ノードを消去" @@ -8481,13 +8165,13 @@ msgstr "åãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ " #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Instance Child Scene" -msgstr "åシーンをインスタンス化" +msgid "Change Type" +msgstr "åž‹(type)を変更" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Change Type" -msgstr "åž‹(type)を変更" +msgid "Extend Script" +msgstr "フォルダを作æˆ" #: editor/scene_tree_dock.cpp #, fuzzy @@ -8673,6 +8357,11 @@ msgstr "パスãŒã‚りã¾ã›ã‚“" #: editor/script_create_dialog.cpp #, fuzzy +msgid "Filename is empty" +msgstr "ä¿å˜ã™ã‚‹ãƒ‘スãŒã‚りã¾ã›ã‚“!" + +#: editor/script_create_dialog.cpp +#, fuzzy msgid "Path is not local" msgstr "パスã¯ãƒãƒ¼ã‚«ãƒ«ã§ã¯ã‚りã¾ã›ã‚“" @@ -8699,9 +8388,8 @@ msgid "Wrong extension chosen" msgstr "æ‹¡å¼µåãŒèª¤ã£ã¦ã„ã¾ã™" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚" +msgstr "無効ãªãƒ‘ス" #: editor/script_create_dialog.cpp msgid "Invalid class name" @@ -8771,20 +8459,9 @@ msgid "Bytes:" msgstr "ãƒã‚¤ãƒˆ:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "è¦å‘Š" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "エラー:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "ソース:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "関数:" +#, fuzzy +msgid "Stack Trace" +msgstr "スタックフレーム" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8818,18 +8495,6 @@ msgid "Stack Frames" msgstr "スタックフレーム" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "変数" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "エラー:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "スタックトレース(å¯èƒ½ãªã‚‰ï¼‰:" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "プãƒãƒ•ァイラー" @@ -9261,7 +8926,7 @@ msgstr "リソースèªã¿è¾¼ã¿å¤±æ•—" #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" -msgstr "モノラル音声" +msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" @@ -9296,13 +8961,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "ベイク!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -#, fuzzy -msgid "Bake the navigation mesh." -msgstr "ナビメッシュ(ナビゲーションメッシュ)ã®ç”Ÿæˆ" +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -9627,6 +9287,10 @@ msgid "Base Type:" msgstr "基底型(Base Type):" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "メンãƒãƒ¼:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "利用å¯èƒ½ãªãƒŽãƒ¼ãƒ‰:" @@ -9746,12 +9410,11 @@ msgid "Search VisualScript" msgstr "シェーダーグラフノードを除去" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy -msgid "Get" -msgstr "Getメソッド" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9854,6 +9517,12 @@ msgstr "" "関数ã«å¯¾ã—㦠CollisionShape2D ã®å½¢çŠ¶ï¼ˆã‚·ã‚§ã‚¤ãƒ—ï¼‰ã‚’æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã" "ã®ãŸã‚ã®ã‚·ã‚§ã‚¤ãƒ—リソースを作æˆã—ã¦ãã ã•ã„!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9903,6 +9572,12 @@ msgstr "" "パーティクルを処ç†ã™ã‚‹ãŸã‚ã®ãƒžãƒ†ãƒªã‚¢ãƒ«ã¯æŒ‡å®šã•れã¦ãŠã‚‰ãšã€ãã®æŒ¯ã‚‹èˆžã„ã¯æœªæŒ‡" "示ã§ã™." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -10036,6 +9711,17 @@ msgstr "" "関数㮠CollisionShape ã®å½¢çŠ¶ã‚’æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãれã®ãŸã‚ã®ã‚·ã‚§ã‚¤ãƒ—リ" "ソースを作æˆã—ã¦ãã ã•ã„!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "æç”»ãƒ‘スã®ãŸã‚ã®ãƒ¡ãƒƒã‚·ãƒ¥ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“ã®ã§è¦‹ãˆã¾ã›ã‚“" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp #, fuzzy msgid "Plotting Meshes" @@ -10061,6 +9747,28 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "æç”»ãƒ‘スã®ãŸã‚ã®ãƒ¡ãƒƒã‚·ãƒ¥ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“ã®ã§è¦‹ãˆã¾ã›ã‚“" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D ã¯ã€Path2D ノードã®åã¨ã—ã¦è¨å®šã•れã¦ã„ã‚‹å ´åˆã®ã¿å‹•作ã—ã¾ã™ã€‚" + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D ã¯ã€Path2D ノードã®åã¨ã—ã¦è¨å®šã•れã¦ã„ã‚‹å ´åˆã®ã¿å‹•作ã—ã¾ã™ã€‚" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -10088,10 +9796,13 @@ msgstr "" "セット) ã”ã¨ã«è¨±å¯ã•れã¾ã™ã€‚" #: scene/3d/scenario_fx.cpp +#, fuzzy msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"ã“ã®WorldEnvironmentã¯ç„¡è¦–ã•れã¾ã—ãŸã€‚ã‚«ãƒ¡ãƒ©ã‚’è¿½åŠ ã™ã‚‹ã‹(3Dシーンã®å ´åˆ)ã€ã“" +"ã®Environmentã® Backgroundモード ã‚’ Canvas ã«è¨å®šã—ã¾ã™(2Dシーンã®å ´åˆ)。" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" @@ -10099,7 +9810,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -10177,11 +9888,6 @@ msgstr "è¦å‘Š!" msgid "Please Confirm..." msgstr "確èª" -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "ã™ã¹ã¦é¸æŠž" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -10192,6 +9898,10 @@ msgstr "" "既定ã§ã¯éžè¡¨ç¤ºã«ãªã‚Šã¾ã™ã€‚編集ã®ãŸã‚ã«ãれらをå¯è¦–化ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€å½¼" "らã¯å®Ÿè¡Œæ™‚ã«éžè¡¨ç¤ºã«ãªã‚Šã¾ã™ã€‚" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -10271,6 +9981,127 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "ズーム:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "\" ã‹ã‚‰å…¨ã¦ã®æŽ¥ç¶šã‚’除去ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹" + +#~ msgid "Class List:" +#~ msgstr "クラス一覧:" + +#~ msgid "Search Classes" +#~ msgstr "ã‚¯ãƒ©ã‚¹ã®æ¤œç´¢" + +#~ msgid "Public Methods" +#~ msgstr "パブリックメソッド" + +#~ msgid "Public Methods:" +#~ msgstr "パブリックメソッド:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUIテーマã®ã‚¢ã‚¤ãƒ†ãƒ " + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUIテーマã®ã‚¢ã‚¤ãƒ†ãƒ :" + +#~ msgid "Property: " +#~ msgstr "プãƒãƒ‘ティ: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "フォルダã®çŠ¶æ…‹ã‚’ãŠæ°—ã«å…¥ã‚Šã«åˆ‡æ›¿ãˆã‚‹ã€‚" + +#~ msgid "Show current scene file." +#~ msgstr "ç¾åœ¨ã®ã‚·ãƒ¼ãƒ³ãƒ•ァイルを表示ã™ã‚‹ã€‚" + +#~ msgid "Enter tree-view." +#~ msgstr "ツリービューã«å…¥ã‚‹ã€‚" + +#~ msgid "Whole words" +#~ msgstr "å˜èªžå…¨ä½“" + +#~ msgid "Match case" +#~ msgstr "大文å—å°æ–‡å—を区別" + +#~ msgid "Filter: " +#~ msgstr "フィルタ: " + +#~ msgid "Ok" +#~ msgstr "OK" + +#, fuzzy +#~ msgid "Show In File System" +#~ msgstr "ファイルシステム上ã§è¡¨ç¤º" + +#, fuzzy +#~ msgid "Search the class hierarchy." +#~ msgstr "クラス階層を検索." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "ã‚¯ãƒ©ã‚¹ã®æ¤œç´¢" + +#, fuzzy +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "組ã¿è¾¼ã¾ã‚ŒãŸã‚¹ã‚¯ãƒªãƒ—ãƒˆã¯æ‰€å±žã™ã‚‹ã‚·ãƒ¼ãƒ³ãŒèªã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ã¨ç·¨é›†ã§ãã¾ã›ã‚“" + +#~ msgid "Convert To Uppercase" +#~ msgstr "大文å—ã«å¤‰æ›" + +#~ msgid "Convert To Lowercase" +#~ msgstr "å°æ–‡å—ã«å¤‰æ›" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Snapモード:" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "0度回転" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "90度回転" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "180度回転" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "270度回転" + +#~ msgid "Warning" +#~ msgstr "è¦å‘Š" + +#~ msgid "Error:" +#~ msgstr "エラー:" + +#~ msgid "Source:" +#~ msgstr "ソース:" + +#~ msgid "Function:" +#~ msgstr "関数:" + +#~ msgid "Variable" +#~ msgstr "変数" + +#~ msgid "Errors:" +#~ msgstr "エラー:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "スタックトレース(å¯èƒ½ãªã‚‰ï¼‰:" + +#~ msgid "Bake!" +#~ msgstr "ベイク!" + +#, fuzzy +#~ msgid "Bake the navigation mesh." +#~ msgstr "ナビメッシュ(ナビゲーションメッシュ)ã®ç”Ÿæˆ" + +#, fuzzy +#~ msgid "Get" +#~ msgstr "Getメソッド" + #, fuzzy #~ msgid "Change Scalar Constant" #~ msgstr "スカラ定数を変更" @@ -10810,10 +10641,6 @@ msgstr "" #~ msgstr "アトラスã®è¦ç´ ã§ã‚るテクスãƒãƒ£ã®ä¿å˜ãŒã§ãã¾ã›ã‚“:" #, fuzzy -#~ msgid "Exporting for %s" -#~ msgstr "%sã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸" - -#, fuzzy #~ msgid "Setting Up..." #~ msgstr "セットアップä¸..." @@ -10938,10 +10765,6 @@ msgstr "" #~ msgstr "ソース フォント:" #, fuzzy -#~ msgid "Source Font Size:" -#~ msgstr "ソース フォントサイズ:" - -#, fuzzy #~ msgid "Dest Resource:" #~ msgstr "é€ã‚Šå…ˆã®ãƒªã‚½ãƒ¼ã‚¹:" @@ -11036,9 +10859,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "é–‹å§‹" -#~ msgid "Filters" -#~ msgstr "フィルター" - #, fuzzy #~ msgid "Source path is empty." #~ msgstr "ソースã®ãƒ‘スã¯ç©ºã§ã™" @@ -11378,17 +11198,10 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "ステレオ音声" -#~ msgid "Pitch" -#~ msgstr "ピッãƒ" - #~ msgid "Window" #~ msgstr "ウィンドウ" #, fuzzy -#~ msgid "Move Right" -#~ msgstr "å³ã«ç§»å‹•" - -#, fuzzy #~ msgid "Scaling to %s%%." #~ msgstr "æ‹¡å¤§ç¸®å°æ¯”率%s%%." @@ -11459,10 +11272,6 @@ msgstr "" #~ msgstr "押ã—ãŸ" #, fuzzy -#~ msgid "just released" -#~ msgstr "離ã—ãŸ" - -#, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index b8b3e848be..e8b20b048f 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -23,7 +23,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -389,8 +389,7 @@ msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის ცვლილá msgid "Scale From Cursor" msgstr "შკáƒáƒšáƒ˜áƒ ებრმáƒáƒ©áƒ•ენებლიდáƒáƒœ" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" @@ -404,11 +403,13 @@ msgid "Delete Selection" msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "მáƒáƒ›áƒ“ევნრნáƒáƒ‘იჯზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "წინáƒáƒ›áƒ“ებáƒáƒ ე ნáƒáƒ‘იჯზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ" #: editor/animation_track_editor.cpp @@ -511,11 +512,11 @@ msgstr "áƒáƒ áƒáƒ სებáƒáƒ‘ს ტáƒáƒšáƒ˜" msgid "Replaced %d occurrence(s)." msgstr "შეცვლილირ%d დáƒáƒ›áƒ—ხვევები." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "სáƒáƒ¥áƒ›áƒ˜áƒ¡ დáƒáƒ›áƒ—ხვევáƒ" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "მთლიáƒáƒœáƒ˜ სიტყვები" @@ -548,11 +549,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "ზუმის გáƒáƒ–რდáƒ" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "ხáƒáƒ–ი:" @@ -585,6 +585,7 @@ msgstr "დáƒáƒ›áƒáƒ¢áƒ”ბáƒ" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -665,7 +666,7 @@ msgid "Edit Connection: " msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მრუდის ცვლილებáƒ" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -718,17 +719,14 @@ msgstr "ბáƒáƒšáƒ:" msgid "Search:" msgstr "ძებნáƒ:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "დáƒáƒ›áƒ—ხვევები:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" @@ -789,9 +787,10 @@ msgid "Search Replacement Resource:" msgstr "ჩáƒáƒ›áƒœáƒáƒªáƒ•ლებელი რესურსის ძიებáƒ:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -823,7 +822,8 @@ msgid "Error loading:" msgstr "ჩáƒáƒ¢áƒ•ირთვის შეცდáƒáƒ›áƒ:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "სცენის ჩáƒáƒ¢áƒ•ირთვრვერმáƒáƒ®áƒ”რხდრáƒáƒ áƒáƒ სებული დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების გáƒáƒ›áƒ:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -882,14 +882,6 @@ msgstr "ლექსიკáƒáƒœáƒ˜áƒ¡ მნიშვნელáƒáƒ‘ის შá msgid "Thanks from the Godot community!" msgstr "მáƒáƒ“ლáƒáƒ‘რGodot სáƒáƒ–áƒáƒ’áƒáƒ“áƒáƒ”ბისგáƒáƒœ!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot ძრáƒáƒ•ის ხელშემწყáƒáƒ‘ები" @@ -1065,8 +1057,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1233,8 +1224,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1304,11 +1296,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1316,12 +1312,13 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "გáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1357,7 +1354,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1415,8 +1413,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1432,24 +1429,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1466,27 +1450,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1514,8 +1498,14 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" -msgstr "" +#, fuzzy +msgid "Class Description" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1529,12 +1519,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp msgid "" @@ -1543,12 +1535,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp msgid "" @@ -1556,11 +1550,56 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "ყველáƒáƒ¡ ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ მხáƒáƒšáƒáƒ“" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "სიგნáƒáƒšáƒ”ბი" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "მუდმივი" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1594,6 +1633,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1648,10 +1692,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1879,6 +1933,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1919,6 +1979,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -2001,7 +2066,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2030,7 +2095,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2068,6 +2133,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2175,10 +2241,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2272,21 +2334,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2423,7 +2485,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2447,7 +2509,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2459,7 +2521,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2467,6 +2529,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2484,10 +2560,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2496,7 +2568,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2778,6 +2851,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2813,7 +2891,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2850,39 +2928,40 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2894,6 +2973,15 @@ msgstr "" msgid "New Resource..." msgstr "რესურსი" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "ყველáƒáƒ¡ ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2914,33 +3002,25 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "ძებნáƒ:" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "ძებნáƒ:" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2957,29 +3037,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Find: " +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "მთლიáƒáƒœáƒ˜ სიტყვები" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "სáƒáƒ¥áƒ›áƒ˜áƒ¡ დáƒáƒ›áƒ—ხვევáƒ" - -#: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2996,6 +3066,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp #, fuzzy msgid "Replace: " msgstr "ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" @@ -3155,17 +3229,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3403,6 +3472,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3774,10 +3848,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4099,6 +4169,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4162,6 +4236,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4256,6 +4335,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ მხáƒáƒšáƒáƒ“" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4306,6 +4390,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4741,8 +4829,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4771,6 +4858,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4840,11 +4932,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5174,22 +5266,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5219,6 +5311,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5317,11 +5413,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5392,7 +5484,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5400,10 +5492,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5438,17 +5526,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +#, fuzzy +msgid "Search Results" +msgstr "ძებნáƒ:" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -5460,6 +5540,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "ფუნქციის შექმნáƒ" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5546,11 +5631,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5567,36 +5652,32 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "მáƒáƒ›áƒ“ევნრნáƒáƒ‘იჯზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "წინáƒáƒ›áƒ“ებáƒáƒ ე ნáƒáƒ‘იჯზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "ფუნქციის შექმნáƒ" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "ხáƒáƒ–ზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5687,6 +5768,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5851,6 +5940,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5950,10 +6043,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6352,6 +6441,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6397,25 +6491,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¨áƒáƒ ებáƒ" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ დáƒáƒ¥áƒ›áƒœáƒ˜áƒ¡ ცვლილებáƒ" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6443,7 +6542,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6459,7 +6558,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6535,6 +6634,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6543,6 +6650,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6601,6 +6712,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7050,10 +7169,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7187,10 +7302,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7276,7 +7387,7 @@ msgid "Step" msgstr "ნáƒáƒ‘იჯი (წáƒáƒ›áƒ˜):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7285,7 +7396,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7326,7 +7437,7 @@ msgstr "" msgid "Reset" msgstr "ზუმის სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ–ე დáƒáƒ§áƒ”ნებáƒ" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7385,6 +7496,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7421,6 +7536,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7492,6 +7613,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7500,11 +7625,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7654,6 +7779,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7742,19 +7871,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7786,18 +7903,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8216,11 +8321,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8492,6 +8593,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8590,11 +8695,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8672,6 +8777,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8710,6 +8821,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8827,6 +8944,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8846,6 +8973,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8878,7 +9023,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8951,10 +9096,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8962,6 +9103,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9028,6 +9173,18 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "ზუმის გáƒáƒ–რდáƒ" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "მთლიáƒáƒœáƒ˜ სიტყვები" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "სáƒáƒ¥áƒ›áƒ˜áƒ¡ დáƒáƒ›áƒ—ხვევáƒ" + #~ msgid "Disabled" #~ msgstr "გáƒáƒ›áƒáƒ თული" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 10ee7d659b..c598e5cb59 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -11,12 +11,13 @@ # 박한얼 (volzhs) <volzhs@gmail.com>, 2016-2018. # ì†¡íƒœì„ <xotjq237@gmail.com>, 2018. # JY <yimjisoo@mailfence.com>, 2018. +# Ch. <ccwpc@hanmail.net>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-08-21 00:40+0000\n" -"Last-Translator: JY <yimjisoo@mailfence.com>\n" +"PO-Revision-Date: 2018-12-03 19:25+0000\n" +"Last-Translator: ì†¡íƒœì„ <xotjq237@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -24,79 +25,72 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" -"convert()하기 위한 ì¸ìž íƒ€ìž…ì´ ìœ íš¨í•˜ì§€ 않습니다, TYPE_* ìƒìˆ˜ë¥¼ 사용하세요." +"convert()하기 위한 ì¸ìˆ˜ íƒ€ìž…ì´ ìœ íš¨í•˜ì§€ 않습니다, TYPE_* ìƒìˆ˜ë¥¼ 사용하세요." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ë””ì½”ë”©í• ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜, ìœ íš¨í•˜ì§€ ì•Šì€ í˜•ì‹ìž…니다." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "표현ì‹ì—서 ìž˜ëª»ëœ ìž…ë ¥ %i (ì „ë‹¬ë˜ì§€ 않ìŒ)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "ì¸ìŠ¤í„´ìŠ¤ê°€ 비어있기 ë•Œë¬¸ì— Self를 ì‚¬ìš©í• ìˆ˜ 없습니다 (ì „ë‹¬ë˜ì§€ 않ìŒ)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "노드 %s ì•ˆì— ì¸ë±ìФ ì†ì„± ì´ë¦„ '%s' 는 ìœ íš¨í•˜ì§€ 않습니다." +msgstr "ì—°ì‚°ìž %s, %s ë° %s ì˜ ì—°ì‚° 대ìƒì´ ìœ íš¨í•˜ì§€ 않습니다." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "노드 %s ì•ˆì— ì¸ë±ìФ ì†ì„± ì´ë¦„ '%s' 는 ìœ íš¨í•˜ì§€ 않습니다." +msgstr "ë² ì´ìФ 타입 %s ì— ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ë±ìФ 타입 %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "ë² ì´ìФ 타입 %s ì— ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ë±ìФ ì´ë¦„ %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìž 타입: " +msgstr "'%s' ì„ êµ¬ì„±í•˜ê¸°ì— ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìˆ˜" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "'%s' 를 호출 시:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "무료" +msgstr "ìžìœ " #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "ê· í˜•" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Xì¶• 뒤집기" +msgstr "거울" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "키 삽입" +msgstr "ì—¬ê¸°ì— í‚¤ë¥¼ 삽입" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "ì„ íƒ ë³µì œ" +msgstr "ì„ íƒí•œ 키를 ë³µì œ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "ì„ íƒ í•목 ì‚ì œ" +msgstr "ì„ íƒí•œ 키를 ì‚ì œ" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -127,46 +121,40 @@ msgid "Anim Change Call" msgstr "ì• ë‹ˆë©”ì´ì…˜ 호출 변경" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "ì†ì„±:" +msgstr "ì†ì„± 트랙" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "변형 타입" +msgstr "3D 변형 트랙" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "호출 메서드 트랙" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "ë² ì§€ì–´ 커브 트랙" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "오디오 ìž¬ìƒ íŠ¸ëž™" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ì •ì§€. (S)" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ íŠ¸ëž™" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 추가" +msgstr "트랙 추가" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ê¸¸ì´ (ì´ˆ)." +msgstr "ì• ë‹ˆë©”ì´ì…˜ ê¸¸ì´ ì‹œê°„ (ì´ˆ)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 확대." +msgstr "ì• ë‹ˆë©”ì´ì…˜ 반복" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -174,63 +162,56 @@ msgid "Functions:" msgstr "함수:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "오디오 리스너" +msgstr "오디오 í´ë¦½:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "í´ë¦½" +msgstr "ì• ë‹ˆë©”ì´ì…˜ í´ë¦½:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "집중 모드 í† ê¸€." +msgstr "ì´ íŠ¸ëž™ì„ í‚¤ê±°ë‚˜ ë•니다." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "ì—…ë°ì´íЏ 모드 (ì´ ì†ì„±ì„ ì„¤ì •í•˜ëŠ” 방법)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 노드" +msgstr "ë³´ê°„ 모드" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "루프 ëž© 모드 (시작 루프와 ëì„ ë³´ê°„)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "ì„ íƒëœ 트랙 ì‚ì œ." +msgstr "ì´ íŠ¸ëž™ì„ ì‚ì œí•©ë‹ˆë‹¤." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "í¬ë¡œìФ 페ì´ë“œ 시간 (ì´ˆ):" +msgstr "시간 (ì´ˆ): " #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "ì—°ì†ì ì¸" +msgstr "ì—°ì†ì " #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "비연ì†ì ì¸" +msgstr "비연ì†ì " #: editor/animation_track_editor.cpp msgid "Trigger" msgstr "트리거" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "기능" +msgstr "캡ì³" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "가장 가까움" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -239,16 +220,15 @@ msgstr "ì§ì„ 형" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "입방형" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 루프 ë³´ê°„ 변경" +msgstr "í´ëž¨í”„ 루프 ì¸í„°í”„리터" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "ëž© 루프 ì¸í„°í”„리터" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -256,14 +236,12 @@ msgid "Insert Key" msgstr "키 삽입" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "노드 ë³µì œ" +msgstr "키 ë³µì œ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "노드 ì‚ì œ" +msgstr "키 ì‚ì œ" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -285,7 +263,7 @@ msgstr "%dê°œì˜ ìƒˆ íŠ¸ëž™ì„ ìƒì„±í•˜ê³ 키를 ì‚½ìž…í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp msgid "Create" -msgstr "ìƒì„±" +msgstr "만들기" #: editor/animation_track_editor.cpp msgid "Anim Insert" @@ -294,6 +272,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 삽입" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" +"AnimationPlayer는 ìžì‹ ì„ ì• ë‹ˆë©”ì´ì…˜ í• ìˆ˜ 없습니다, 다른 것ì—ë§Œ ë©ë‹ˆë‹¤." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -309,7 +288,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 삽입" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "변형 íŠ¸ëž™ì€ ì˜¤ì§ Spatial 기반 노드ì—ë§Œ ì ìš©ë©ë‹ˆë‹¤." #: editor/animation_track_editor.cpp msgid "" @@ -318,44 +297,47 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"오디오 íŠ¸ëž™ì€ ì˜¤ì§ ë‹¤ìŒ íƒ€ìž…ì˜ ë…¸ë“œë§Œ 가리킬 수 있습니다:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "ì• ë‹ˆë©”ì´ì…˜ íŠ¸ëž™ì€ ì˜¤ì§ AnimationPlayer 노드만 가리킬 수 있습니다." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ëŠ” ìžì‹ ì„ ì• ë‹ˆë©”ì´ì…˜ í• ìˆ˜ 없습니다, 다른 것ì—ë§Œ ë©ë‹ˆë‹¤." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "루트 ì—†ì´ ìƒˆ íŠ¸ëž™ì„ ì¶”ê°€í• ìˆ˜ ì—†ìŒ" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "트랙 경로가 ìœ íš¨í•˜ì§€ 않습니다, 키를 추가하실 수 없습니다." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "íŠ¸ëž™ì´ Spatial íƒ€ìž…ì´ ì•„ë‹™ë‹ˆë‹¤, 키를 삽입하실 수 없습니다" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "트랙 경로가 ìœ íš¨í•˜ì§€ 않습니다, 메서드 키를 추가하실 수 없습니다." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGetì´ ìŠ¤í¬ë¦½íЏì—서 발견ë˜ì§€ 않ìŒ: " +msgstr "ê°ì²´ì— 메서드가 없습니다: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ì´ë™" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "í´ë¦½ë³´ë“œê°€ 비었습니다!" +msgstr "í´ë¦½ë³´ë“œê°€ 비었습니다" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -364,25 +346,23 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 í¬ê¸° ì¡°ì ˆ" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "" +msgstr "ì´ ì˜µì…˜ì€ ë² ì§€ì–´ 편집ì—서 ë‹¨ì¼ íŠ¸ëž™ì´ê¸° 때문ì—, ìž‘ë™í•˜ì§€ 않습니다." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "트리ì—서 ì„ íƒí•œ ë…¸ë“œì˜ íŠ¸ëž™ë§Œ 표시합니다." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "노드 별로 ê·¸ë£¹ì„ íŠ¸ëž™ 하거나 ì¼ë°˜ 목ë¡ìœ¼ë¡œ 표시합니다." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "스냅 (픽셀):" +msgstr "스냅: " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 ìœ íš¨í•©ë‹ˆë‹¤." +msgstr "ì• ë‹ˆë©”ì´ì…˜ 단계 ê°’." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -394,19 +374,16 @@ msgid "Edit" msgstr "편집" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì†ì„±." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "ì†ì„± 복사" +msgstr "트랙 복사" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "ì†ì„± 붙여넣기" +msgstr "트랙 붙여넣기" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -416,8 +393,7 @@ msgstr "ì„ íƒ í¬ê¸° ì¡°ì ˆ" msgid "Scale From Cursor" msgstr "커서 위치ì—서 í¬ê¸° ì¡°ì ˆ" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "ì„ íƒ ë³µì œ" @@ -426,16 +402,15 @@ msgid "Duplicate Transposed" msgstr "ì„ íƒëœ íŠ¸ëž™ì— ë³µì œ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "ì„ íƒ í•목 ì‚ì œ" +msgstr "ì„ íƒ ì‚ì œ" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "ë‹¤ìŒ ìŠ¤í…으로 ì´ë™" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "ì´ì „ 스í…으로 ì´ë™" #: editor/animation_track_editor.cpp @@ -448,11 +423,11 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ì •ë¦¬" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "ì• ë‹ˆë©”ì´ì…˜ í• ë…¸ë“œë¥¼ ì„ íƒí•˜ì„¸ìš”:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "ë² ì§€ì–´ 커브 사용" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -500,7 +475,7 @@ msgstr "ìŠ¤ì¼€ì¼ ë¹„ìœ¨:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "ë³µì‚¬í• íŠ¸ëž™ ì„ íƒ:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -538,11 +513,11 @@ msgstr "ì¼ì¹˜ ê²°ê³¼ ì—†ìŒ" msgid "Replaced %d occurrence(s)." msgstr "%d 회 êµì²´ë¨." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "ëŒ€ì†Œë¬¸ìž êµ¬ë¶„" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "ì „ì²´ 단어" @@ -571,16 +546,15 @@ msgid "Reset Zoom" msgstr "줌 리셋" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "ê²½ê³ " +msgstr "ê²½ê³ :" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "확대 (%):" +msgid "Font Size:" +msgstr "소스 í°íЏ í¬ê¸°:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "ë¼ì¸:" @@ -613,6 +587,7 @@ msgstr "추가" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -620,11 +595,11 @@ msgstr "ì‚ì œ" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "별ë„ì˜ í˜¸ì¶œ ì¸ìž 추가:" +msgstr "별ë„ì˜ í˜¸ì¶œ ì¸ìˆ˜ 추가:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "별ë„ì˜ í˜¸ì¶œ ì¸ìž:" +msgstr "별ë„ì˜ í˜¸ì¶œ ì¸ìˆ˜:" #: editor/connections_dialog.cpp msgid "Path to Node:" @@ -669,9 +644,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s'와 '%s'ì˜ ì—°ê²° í•´ì œ" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "'%s'와 '%s'ì˜ ì—°ê²° í•´ì œ" +msgstr "ì „ë¶€ 시그ë„ì—서 ì—°ê²° í•´ì œ: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -683,42 +657,36 @@ msgid "Disconnect" msgstr "ì—°ê²°í•´ì œ" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "ì‹œê·¸ë„ ì—°ê²°:" +msgstr "ì‹œê·¸ë„ ì—°ê²°: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "ì—°ê²° 편집" +msgstr "ì—°ê²° 편집 " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "ë‘ê°œ ì´ìƒì˜ 프로ì 트를 ì‹¤í–‰í•˜ë ¤ëŠ” ê²ƒì´ í™•ì‹¤í•©ë‹ˆê¹Œ?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "\"%s\" 시그ë„ì—서 ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "시그ë„" +msgstr "시그ë„(Signal)" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "ì´ ì‹œê·¸ë„ì—서 ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "ì—°ê²°í•´ì œ" +msgstr "ëª¨ë“ ì—°ê²° í•´ì œ" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "편집" +msgstr "편집..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "메서드" +msgstr "메서드로 ì´ë™" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -731,7 +699,7 @@ msgstr "변경" #: editor/create_dialog.cpp msgid "Create New %s" -msgstr "새 %s ìƒì„±" +msgstr "새 %s 만들기" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -749,17 +717,14 @@ msgstr "최근:" msgid "Search:" msgstr "검색:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "ì¼ì¹˜:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "설명:" @@ -778,7 +743,7 @@ msgid "" "Changes will not take effect unless reloaded." msgstr "" "씬 '%s'(ì´)ê°€ 현재 편집 중입니다.\n" -"다시 로드 í• ë•Œ 변경 사í•ì´ ì ìš©ë©ë‹ˆë‹¤." +"다시 불러올 때 변경 사í•ì´ ì ìš©ë©ë‹ˆë‹¤." #: editor/dependency_editor.cpp msgid "" @@ -786,7 +751,7 @@ msgid "" "Changes will take effect when reloaded." msgstr "" "리소스 '%s'ì´(ê°€) 사용 중입니다.\n" -"다시 로드 í• ë•Œ 변경 사í•ì´ ì ìš©ë©ë‹ˆë‹¤." +"다시 불러올 때 변경 사í•ì´ ì ìš©ë©ë‹ˆë‹¤." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -820,9 +785,10 @@ msgid "Search Replacement Resource:" msgstr "대체 리소스 검색:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -851,11 +817,11 @@ msgstr "ì œê±°í• ìˆ˜ 없습니다:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "로드 중 ì—러:" +msgstr "불러오기 중 ì—러:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "ì¢…ì† ê´€ê³„ë¥¼ ì°¾ì„ ìˆ˜ 없어 씬를 ë¡œë“œí• ìˆ˜ 없습니다:" +msgid "Load failed due to missing dependencies:" +msgstr "ì¢…ì† ê´€ê³„ë¥¼ ì°¾ì„ ìˆ˜ 없어 ì”¬ì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -871,7 +837,7 @@ msgstr "ì¢…ì† ê´€ê³„ ìˆ˜ì •" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "로드 중 ì—러 ë°œìƒ!" +msgstr "불러오기 중 ì—러 ë°œìƒ!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" @@ -913,14 +879,6 @@ msgstr "Dictionary ê°’ 변경" msgid "Thanks from the Godot community!" msgstr "Godot ì»¤ë®¤ë‹ˆí‹°ì— ê°ì‚¬ë“œë¦½ë‹ˆë‹¤!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "확ì¸" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine 기여ìž" @@ -1052,11 +1010,11 @@ msgstr "오디오 버스 솔로 í† ê¸€" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "오디오 버스 뮤트 í† ê¸€" +msgstr "오디오 버스 ìŒì†Œê±° í† ê¸€" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "오디오 버스 ë°”ì´íŒ¨ìФ ì´íŽ™íŠ¸ í† ê¸€" +msgstr "오디오 버스 ë°”ì´íŒ¨ìФ 효과 í† ê¸€" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -1076,7 +1034,7 @@ msgstr "버스 ì´íŽ™íŠ¸ ì‚ì œ" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "오디오 버스, 드래그 ë° ë“œëžìœ¼ë¡œ 재배치하세요." +msgstr "오디오 버스, 드래그 앤 드ë¡ìœ¼ë¡œ 재 배치하세요." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1095,8 +1053,7 @@ msgid "Bus options" msgstr "버스 옵션" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ë³µì œ" @@ -1168,7 +1125,7 @@ msgstr "새로운 버스 ë ˆì´ì•„ì›ƒì„ ë§Œë“니다." #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Load" -msgstr "로드" +msgstr "불러오기" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." @@ -1265,8 +1222,9 @@ msgstr "경로:" msgid "Node Name:" msgstr "노드 ì´ë¦„:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "ì´ë¦„" @@ -1305,7 +1263,7 @@ msgstr "ë””ë ‰í† ë¦¬ ì„ íƒ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "í´ë” ìƒì„±" +msgstr "í´ë” 만들기" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1336,26 +1294,29 @@ msgid "Template file not found:" msgstr "í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "현재 í´ë” ì„ íƒ" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² 습니까?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "현재 í´ë” ì„ íƒ" +msgid "Select This Folder" +msgstr "ì´ í´ë” ì„ íƒ" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "경로 복사" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—서 보기" +msgid "Open in File Manager" +msgstr "íŒŒì¼ íƒìƒ‰ê¸°ì—서 열기" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—서 보기" +msgid "Show in File Manager" +msgstr "íŒŒì¼ íƒìƒ‰ê¸°ì—서 보기" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1390,7 +1351,8 @@ msgid "Open a File or Directory" msgstr "ë””ë ‰í† ë¦¬ ë˜ëŠ” íŒŒì¼ ì—´ê¸°" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "ì €ìž¥í•˜ê¸°" @@ -1448,8 +1410,7 @@ msgstr "ë””ë ‰í† ë¦¬ì™€ 파ì¼:" msgid "Preview:" msgstr "미리보기:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "파ì¼:" @@ -1465,24 +1426,11 @@ msgstr "소스 조사" msgid "(Re)Importing Assets" msgstr "ì—ì…‹ (다시) ê°€ì ¸ì˜¤ê¸°" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "ë„ì›€ë§ ê²€ìƒ‰" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "í´ëž˜ìФ 목ë¡:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "í´ëž˜ìФ 검색" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "윗면" +msgstr "맨 위" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "í´ëž˜ìФ:" @@ -1499,28 +1447,28 @@ msgid "Brief Description:" msgstr "간단한 설명:" #: editor/editor_help.cpp -msgid "Members" -msgstr "멤버" +msgid "Properties" +msgstr "ì†ì„±" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "멤버:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "ì†ì„±:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "공개 메서드" +msgid "Methods" +msgstr "메서드" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "공개 메서드:" +msgid "Methods:" +msgstr "메서드:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI 테마 í•목" +msgid "Theme Properties" +msgstr "테마 ì†ì„±" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI 테마 í•목:" +msgid "Theme Properties:" +msgstr "테마 ì†ì„±:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1540,15 +1488,19 @@ msgstr "ì´ë„˜(ì—´ê±°) " #: editor/editor_help.cpp msgid "Constants" -msgstr "ìƒìˆ˜" +msgstr "ìƒìˆ˜(Constant)" #: editor/editor_help.cpp msgid "Constants:" msgstr "ìƒìˆ˜:" #: editor/editor_help.cpp -msgid "Description" -msgstr "설명" +msgid "Class Description" +msgstr "í´ëž˜ìФ 설명" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "í´ëž˜ìФ 설명:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1565,11 +1517,11 @@ msgstr "" "니다." #: editor/editor_help.cpp -msgid "Properties" -msgstr "ì†ì„±" +msgid "Property Descriptions" +msgstr "ì†ì„± 설명" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "ì†ì„± 설명:" #: editor/editor_help.cpp @@ -1581,11 +1533,11 @@ msgstr "" "기여하여[/url][/color] ë” ë‚˜ì•„ì§€ê²Œ ë„와주세요!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "메서드" +msgid "Method Descriptions" +msgstr "메서드 설명" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "메서드 설명:" #: editor/editor_help.cpp @@ -1593,21 +1545,61 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"현재 ì´ ë©”ì„œë“œì— ëŒ€í•œ ìƒì„¸ì„¤ëª…ì´ ì—†ìŠµë‹ˆë‹¤. [color=$color][url=$url]ê´€ë ¨ ì •ë³´" +"현재 ì´ ë©”ì„œë“œì— ëŒ€í•œ ìƒì„¸ ì„¤ëª…ì´ ì—†ìŠµë‹ˆë‹¤. [color=$color][url=$url]ê´€ë ¨ ì •ë³´" "를 기여하여[/url][/color] ë” ë‚˜ì•„ì§€ê²Œ ë„와주세요!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "ë„ì›€ë§ ê²€ìƒ‰" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "ëª¨ë‘ í‘œì‹œ" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "í´ëž˜ìŠ¤ë§Œ" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "메서드만" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "시그ë„ë§Œ" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "ìƒìˆ˜ë§Œ" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "ì†ì„±ë§Œ" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "테마 ì†ì„±ë§Œ" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "멤버 타입" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "í´ëž˜ìФ" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "ì†ì„±:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "ì„¤ì •" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "다중 ì„¤ì •:" #: editor/editor_log.cpp msgid "Output:" @@ -1635,6 +1627,11 @@ msgstr "프로ì 트 내보내기가 오류 코드 %d 로 실패했습니다." msgid "Error saving resource!" msgstr "리소스 ì €ìž¥ 중 ì—러!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "확ì¸" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥..." @@ -1653,7 +1650,7 @@ msgstr "ì €ìž¥ 중 ì—러." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "'%s' 를 ì—´ 수 없습니다. 파ì¼ì´ 존재하지 않습니다." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1689,15 +1686,25 @@ msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트 ì—†ì´ëŠ” 불가합니다." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "ì”¬ì„ ì €ìž¥í• ìˆ˜ 없습니다. ì•„ë§ˆë„ ì¢…ì† ê´€ê³„(ì¸ìŠ¤í„´ìŠ¤ ë˜ëŠ” ìƒì†)ê°€ 만족스럽지 않" "ì„ ìˆ˜ 있습니다." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "ì—´ë ¤ìžˆëŠ” ì”¬ì„ ë®ì–´ 쓸 수 없습니다!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "ë³‘í•©í• ë©”ì‹œ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다!" +msgstr "ë³‘í•©í• ë©”ì‹œ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 불러올 수 없습니다!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -1705,7 +1712,7 @@ msgstr "메시 ë¼ì´ë¸ŒëŸ¬ë¦¬ ì €ìž¥ 중 ì—러!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "ë³‘í•©í• íƒ€ì¼ì…‹ì„ ë¡œë“œí• ìˆ˜ 없습니다!" +msgstr "ë³‘í•©í• íƒ€ì¼ì…‹ì„ 불러올 수 없습니다!" #: editor/editor_node.cpp msgid "Error saving TileSet!" @@ -1880,7 +1887,7 @@ msgstr "현재 ì”¬ì´ ì €ìž¥ë˜ì§€ 않았습니다. ë¬´ì‹œí•˜ê³ ì—¬ì‹œê² ìŠµë‹ˆ #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "ì €ìž¥ë˜ì§€ ì•Šì€ ì”¬ì€ ë‹¤ì‹œ ë¡œë“œí• ìˆ˜ 없습니다." +msgstr "ì €ìž¥ë˜ì§€ ì•Šì€ ì”¬ì€ ë‹¤ì‹œ 불러올 수 없습니다." #: editor/editor_node.cpp msgid "Revert" @@ -1908,7 +1915,7 @@ msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "ì €ìž¥ ë° ì¢…ë£Œ" +msgstr "ì €ìž¥í•˜ê³ ì¢…ë£Œ" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" @@ -1923,8 +1930,8 @@ msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" -"ì´ ì˜µì…˜ì€ ë” ì´ìƒ 사용ë˜ì§€ 않습니다. 반드시 ìƒˆë¡œê³ ì¹¨ì„ í•´ì•¼ 하는 ìƒí™©ì€ ì´ì œ " -"버그입니다. ì‹ ê³ í•´ì£¼ì‹ì‹œì˜¤." +"ì´ ì˜µì…˜ì€ ë” ì´ìƒ 사용ë˜ì§€ 않습니다. ìƒˆë¡œê³ ì¹¨ì„ í•´ì•¼ 하는 ìƒí™©ì€ 버그로 간주" +"ë©ë‹ˆë‹¤. 리í¬íЏ ë°”ëžë‹ˆë‹¤." #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -1932,35 +1939,43 @@ msgstr "ë©”ì¸ ì”¬ ì„ íƒ" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." -msgstr "확장기능 플러그ì¸ì„ í™œì„±í™”í• ìˆ˜ 없습니다: '%s' ì„¤ì • í•´ì„ ì‹¤íŒ¨." +msgstr "ì• ë“œì˜¨ 플러그ì¸ì„ í™œì„±í™”í• ìˆ˜ 없습니다: '%s' ì„¤ì • í•´ì„ ì‹¤íŒ¨." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "확장기능 플러그ì¸ì„ ì°¾ì„ ìˆ˜ 없습니다: 'res://addons/%s'." +msgstr "ì• ë“œì˜¨ 플러그ì¸ì„ ì°¾ì„ ìˆ˜ 없습니다: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "확장기능 스í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다: '%s'." +msgstr "ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s'." + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"해당 경로ì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' ì½”ë“œì— ì˜¤ë¥˜ê°€ 있는 " +"것 같습니다, êµ¬ë¬¸ì„ í™•ì¸í•´ ë³´ì‹ì‹œì˜¤." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" -"해당 경로ì—서 확장기능 스í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다: '%s' 기본 íƒ€ìž…ì´ " +"해당 경로ì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' 기본 íƒ€ìž…ì´ " "EditorPluginì´ ì•„ë‹™ë‹ˆë‹¤." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"해당 경로ì—서 확장기능 스í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다: '%s' 스í¬ë¦½íŠ¸ê°€ tool 모" -"드가 아닙니다." +"해당 경로ì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' 스í¬ë¦½íŠ¸ê°€ tool 모드" +"ê°€ 아닙니다." #: editor/editor_node.cpp msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"'%s' ì”¬ì€ ìžë™ìœ¼ë¡œ ìž„í¬íЏ ë˜ì™¸ì„œ, ë³€ê²½í• ìˆ˜ 없습니다.\n" +"'%s' ì”¬ì€ ìžë™ìœ¼ë¡œ ê°€ì ¸ì™€ 지기 때문ì—, ë³€ê²½í• ìˆ˜ 없습니다.\n" "변경사í•ì„ ì ìš©í•˜ë ¤ë©´, 새로운 ìƒì† ì”¬ì„ ë§Œë“œì„¸ìš”." #: editor/editor_node.cpp @@ -1992,15 +2007,18 @@ msgstr "ë ˆì´ì•„웃 ì‚ì œ" msgid "Default" msgstr "기본" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "씬 실행" +msgstr "ì´ ì”¬ì„ ì‹¤í–‰" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "다른 íƒ ë‹«ê¸°" +msgstr "íƒ ë‹«ê¸°" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2075,7 +2093,7 @@ msgid "Save Scene" msgstr "씬 ì €ìž¥" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "ëª¨ë“ ì”¬ ì €ìž¥" #: editor/editor_node.cpp @@ -2104,7 +2122,7 @@ msgid "Undo" msgstr "ë˜ëŒë¦¬ê¸°" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "다시 실행" @@ -2133,15 +2151,15 @@ msgid "Tools" msgstr "ë„구" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "프로ì 트 ë°ì´í„° í´ë” 열기" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "종료 후 프로ì 트 ëª©ë¡ ì—´ê¸°" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "디버그" @@ -2247,21 +2265,19 @@ msgstr "ì—디터 ë ˆì´ì•„웃" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "ì „ì²´í™”ë©´ í† ê¸€" +msgstr "ì „ì²´ 화면 í† ê¸€" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "ì—디터 ì„¤ì •" +msgstr "ì—디터 ë°ì´í„°/ì„¤ì • í´ë” 열기" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "ì—디터 ë°ì´í„° í´ë” 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "ì—디터 ì„¤ì •" +msgstr "ì—디터 ì„¤ì • í´ë” 열기" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2271,10 +2287,6 @@ msgstr "내보내기 템플릿 관리" msgid "Help" msgstr "ë„움ë§" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "í´ëž˜ìФ" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2345,13 +2357,12 @@ msgstr "커스텀 씬 실행" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "비디오 드ë¼ì´ë²„를 ë³€ê²½í•˜ë ¤ë©´ ì—디터를 다시 시작해야 합니다." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "ì €ìž¥ ë° ë‹¤ì‹œ ê°€ì ¸ì˜¤ê¸°" +msgstr "ì €ìž¥ & 다시 시작" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2369,27 +2380,26 @@ msgstr "변경사í•ë§Œ ê°±ì‹ " msgid "Disable Update Spinner" msgstr "ì—…ë°ì´íЏ 스피너 비활성화" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "ì¸ìŠ¤íŽ™í„°" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "ê°€ì ¸ì˜¤ê¸°" #: editor/editor_node.cpp -msgid "Node" -msgstr "노드" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "íŒŒì¼ ì‹œìŠ¤í…œ" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "ì¸ìŠ¤íŽ™í„°" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "노드" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "ëª¨ë‘ í™•ìž¥" +msgstr "하단 íŒ¨ë„ í™•ìž¥" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2429,7 +2439,7 @@ msgstr "새 ìƒì† 씬" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "로드 ì—러" +msgstr "불러오기 ì—러" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" @@ -2468,9 +2478,8 @@ msgid "Thumbnail..." msgstr "ì¸ë„¤ì¼..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "í´ë¦¬ê³¤ 편집" +msgstr "í”ŒëŸ¬ê·¸ì¸ íŽ¸ì§‘" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2494,15 +2503,13 @@ msgid "Status:" msgstr "ìƒíƒœ:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "편집" +msgstr "편집:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "시작!" +msgstr "시작" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2524,7 +2531,7 @@ msgstr "í”„ë ˆìž„ %" msgid "Physics Frame %" msgstr "물리 í”„ë ˆìž„ %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "시간:" @@ -2534,7 +2541,7 @@ msgstr "í¬í•¨" #: editor/editor_profiler.cpp msgid "Self" -msgstr "ìžì‹ " +msgstr "Self(셀프)" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2548,27 +2555,45 @@ msgstr "시간" msgid "Calls" msgstr "호출" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "사용" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "ë ˆì´ì–´" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "비트 %d, ê°’ %d." +msgstr "비트 %d, ê°’ %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[비어있ìŒ]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "í• ë‹¹" +msgstr "ì§€ì •í•˜ê¸°.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"파ì¼ë¡œ ì €ìž¥ëœ ë¦¬ì†ŒìŠ¤ì—서 ViewportTexture를 만들 수 없습니다.\n" +"리소스가 ì”¬ì— ì†í•´ 있어야 합니다." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"리소스가 ì”¬ì— ë¡œì»¬ë¡œ ì„¤ì •ë˜ì§€ 않았기 ë•Œë¬¸ì— ViewportTexture를 만들 수 없습니" +"다.\n" +"ë¦¬ì†ŒìŠ¤ì˜ 'local to scene' ì†ì„±ì„ 켜ì‹ì‹œì˜¤ (ê·¸ë¦¬ê³ ëª¨ë“ ë¦¬ì†ŒìŠ¤ë¥¼ 노드가 í¬í•¨í•˜" +"ê³ ìžˆì–´ì•¼ 합니다)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2587,10 +2612,6 @@ msgstr "새 %s" msgid "Make Unique" msgstr "ê³ ìœ í•˜ê²Œ 만들기" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2599,7 +2620,8 @@ msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "붙여넣기" @@ -2612,36 +2634,32 @@ msgstr "%s로 변환" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "ì—디터ì—서 열기" +msgstr "ì—디터 열기" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "ì„ íƒëœ 노드는 ë·°í¬íŠ¸ê°€ 아닙니다!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "쎌 사ì´ì¦ˆ:" +msgstr "사ì´ì¦ˆ: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "페ì´ì§€: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "새 ì´ë¦„:" +msgstr "새 키:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "새 ì´ë¦„:" +msgstr "새 ê°’:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "키/ê°’ ìŒ ì¶”ê°€" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2662,7 +2680,7 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "로ì§ì„ _run() ë©”ì„œë“œì•ˆì— ìž‘ì„±í•˜ì„¸ìš”." +msgstr "_run() ë©”ì„œë“œì— ë¡œì§ì„ 작성하세요." #: editor/editor_run_script.cpp msgid "There is an edited scene already." @@ -2698,7 +2716,7 @@ msgstr "노드ì—서 ê°€ì ¸ì˜¤ê¸°:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "다시 다운로드" +msgstr "다시 다운불러오기" #: editor/export_template_manager.cpp msgid "Uninstall" @@ -2734,9 +2752,8 @@ msgid "Can't open export templates zip." msgstr "내보내기 템플릿 zip 파ì¼ì„ ì—´ 수 없습니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "템플릿 ì•ˆì— version.txtê°€ ìœ íš¨í•˜ì§€ ì•Šì€ í˜•ì‹ìž…니다." +msgstr "템플릿 ì•ˆì— version.txtê°€ ìœ íš¨í•˜ì§€ ì•Šì€ í˜•ì‹ìž…니다: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2801,6 +2818,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"템플릿 ì„¤ì¹˜ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ë¬¸ì œê°€ 있는 템플릿 ì•„ì¹´ì´ë¸ŒëŠ” '%s' ì—서 확ì¸í•˜ì‹¤ " +"수 있습니다." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2881,27 +2900,28 @@ msgid "Download Templates" msgstr "템플릿 다운로드" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "목ë¡ì—서 미러를 ì„ íƒí•˜ì„¸ìš”: " +msgstr "목ë¡ì—서 미러를 ì„ íƒí•˜ì„¸ìš”: (Shift+í´ë¦: 브ë¼ìš°ì €ì—서 열기)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "file_type_cache.cch를 열수 없어서, íŒŒì¼ íƒ€ìž… ìºì‰¬ë¥¼ ì €ìž¥í•˜ì§€ 않습니다!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "ì¦ê²¨ì°¾ê¸°" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 '%s'를 ì°¾ì„ ìˆ˜ 없습니다!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "ì¸ë„¤ì¼ 그리드로 보기" +msgstr "ì¸ë„¤ì¼ 그리드로 보기." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "리스트로 보기" +msgstr "리스트로 보기." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2928,7 +2948,7 @@ msgstr "ë³µì œ 중 ì—러:" msgid "Unable to update dependencies:" msgstr "종ì†í•ëª©ì„ ì—…ë°ì´íЏ í• ìˆ˜ 없습니다:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않ìŒ" @@ -2965,22 +2985,6 @@ msgid "Duplicating folder:" msgstr "ë³µì œ ì¤‘ì¸ í´ë”:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "ëª¨ë‘ í™•ìž¥" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "ëª¨ë‘ ì ‘ê¸°" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "ì´ë¦„ 변경..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "ì´ë™..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "씬(들) 열기" @@ -2989,6 +2993,14 @@ msgid "Instance" msgstr "ì¸ìŠ¤í„´ìŠ¤" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ 추가" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "ì¦ê²¨ì°¾ê¸°ì—서 ì œê±°" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "ì¢…ì† ê´€ê³„ 편집..." @@ -2996,19 +3008,33 @@ msgstr "ì¢…ì† ê´€ê³„ 편집..." msgid "View Owners..." msgstr "ì†Œìœ ìž ë³´ê¸°..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "ì´ë¦„ 변경..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "ë³µì œ..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "ì´ë™..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "새 스í¬ë¦½íЏ" +msgstr "새 스í¬ë¦½íЏ..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥..." +msgstr "새 리소스..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "ëª¨ë‘ í™•ìž¥" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "ëª¨ë‘ ì ‘ê¸°" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3030,29 +3056,18 @@ msgid "Re-Scan Filesystem" msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 재검사" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ ì„¤ì • í† ê¸€" +msgid "Toggle split mode" +msgstr "ë¶„í• ëª¨ë“œ í† ê¸€" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "현재 íŽ¸ì§‘ëœ ì„œë¸Œ íƒ€ì¼ ì„ íƒ." +msgid "Search files" +msgstr "íŒŒì¼ ê²€ìƒ‰" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "ì„ íƒëœ ì”¬ì„ ì„ íƒëœ ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ì¸ìŠ¤í„´ìŠ¤ 합니다." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "í´ëž˜ìФ 검색" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3060,50 +3075,36 @@ msgstr "" "íŒŒì¼ ìŠ¤ìº”ì¤‘,\n" "ìž ì‹œë§Œ ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "ì´ë™" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "ì´ë¯¸ ì§€ì •ëœ ì´ë¦„ì˜ ê²½ë¡œë¥¼ 가진 í´ë”입니다." +msgstr "ê°™ì€ ì´ë¦„ì˜ íŒŒì¼ì´ë‚˜ í´ë”ê°€ ì´ë¯¸ 존재합니다." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "ë®ì–´ 쓰기" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "스í¬ë¦½íЏ 만들기" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "íƒ€ì¼ ì°¾ê¸°" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "찾기" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "ì „ì²´ 단어" +msgid "Find in Files" +msgstr "파ì¼ì—서 찾기" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "ëŒ€ì†Œë¬¸ìž êµ¬ë¶„" +msgid "Find:" +msgstr "찾기:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "í´ë”:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "í•„í„°:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3120,52 +3121,48 @@ msgid "Cancel" msgstr "취소" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "찾기: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "바꾸기" +msgstr "바꾸기: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "ì „ì²´ 바꾸기" +msgstr "ì „ì²´ 바꾸기 (ì·¨ì†Œí• ìˆ˜ ì—†ìŒ)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "ì €ìž¥ 중..." +msgstr "검색 중..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "ë¬¸ìž ê²€ìƒ‰" +msgstr "검색 완료" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ì—러: ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ì´ ì´ë¯¸ 존재합니다!" +msgstr "그룹 ì´ë¦„ì´ ì´ë¯¸ 존재합니다." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì´ë¦„." +msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ê·¸ë£¹ ì´ë¦„." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "그룹" +msgstr "그룹(Groups)" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "노트 그룹" +msgstr "ê·¸ë£¹ì— ìžˆì§€ ì•Šì€ ë…¸ë“œ" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "노드 í•„í„°" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "노트 그룹" +msgstr "ê·¸ë£¹ì— ìžˆëŠ” 노드" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3176,9 +3173,8 @@ msgid "Remove from Group" msgstr "그룹ì—서 ì œê±°" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "ì´ë¯¸ì§€ 그룹" +msgstr "그룹 관리" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3239,16 +3235,16 @@ msgstr "메시를 위해 ìƒì„± 중: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." -msgstr "ì‚¬ìš©ìž ì •ì˜ ìŠ¤í¬ë¦½íЏ 실행중..." +msgstr "커스텀 스í¬ë¦½íЏ 실행 중..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ 없습니다:" +msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" msgstr "" -"ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ê°€ ìœ íš¨í•˜ì§€ 않거나 ê¹¨ì ¸ìžˆìŠµë‹ˆë‹¤ (콘솔 확ì¸):" +"ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ê°€ ìœ íš¨í•˜ì§€ 않거나 ê¹¨ì ¸ 있습니다 (콘솔 확ì¸):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" @@ -3284,19 +3280,14 @@ msgstr "다시 ê°€ì ¸ì˜¤ê¸°" #: editor/inspector_dock.cpp msgid "Failed to load resource." -msgstr "리소스 로드 실패." - -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "확ì¸" +msgstr "리소스 불러오기 실패." #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "ëª¨ë“ ì†ì„± 펼치기" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "ëª¨ë“ ì†ì„± ì ‘ê¸°" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3313,9 +3304,8 @@ msgid "Paste Params" msgstr "ì†ì„± 붙여넣기" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "리소스 í´ë¦½ë³´ë“œê°€ 비었습니다!" +msgstr "리소스 í´ë¦½ë³´ë“œ 편집" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3339,15 +3329,15 @@ msgstr "새로운 리소스를 ë©”ëª¨ë¦¬ì— ë§Œë“¤ê³ íŽ¸ì§‘í•©ë‹ˆë‹¤." #: editor/inspector_dock.cpp msgid "Load an existing resource from disk and edit it." -msgstr "디스í¬ì—서 기존 리소스를 로드하여 편집합니다." +msgstr "디스í¬ì—서 기존 리소스를 불러와 편집합니다." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "ížˆìŠ¤í† ë¦¬ìƒ ì´ì „ì— íŽ¸ì§‘í•œ 오브ì 트로 가기." +msgstr "기ë¡ì—서 ì´ì „ 편집한 대ìƒìœ¼ë¡œ 가기." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "ížˆìŠ¤í† ë¦¬ìƒ ë‹¤ìŒì— 편집한 오브ì 트로 가기." +msgstr "기ë¡ì—서 ë‹¤ìŒ íŽ¸ì§‘í•œ 대ìƒìœ¼ë¡œ 가기." #: editor/inspector_dock.cpp msgid "History of recently edited objects." @@ -3358,9 +3348,8 @@ msgid "Object properties." msgstr "오브ì 트 ì†ì„±." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "노드 í•„í„°" +msgstr "í•„í„° ì†ì„±" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3375,42 +3364,37 @@ msgid "Select a Node to edit Signals and Groups." msgstr "시그ë„ê³¼ ê·¸ë£¹ì„ íŽ¸ì§‘í• ë…¸ë“œë¥¼ ì„ íƒí•˜ì„¸ìš”." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "í´ë¦¬ê³¤ 편집" +msgstr "í”ŒëŸ¬ê·¸ì¸ íŽ¸ì§‘" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "C# 솔루션 만들기" +msgstr "í”ŒëŸ¬ê·¸ì¸ ë§Œë“¤ê¸°" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "í”ŒëŸ¬ê·¸ì¸ ëª©ë¡:" +msgstr "í”ŒëŸ¬ê·¸ì¸ ì´ë¦„:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "하위 í´ë”:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "언어" +msgstr "언어:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "ìœ íš¨í•œ 스í¬ë¦½íЏ" +msgstr "스í¬ë¦½íЏ ì´ë¦„:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "지금 ì‹¤í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Poly" -msgstr "í´ë¦¬ê³¤ ìƒì„±" +msgstr "í´ë¦¬ê³¤ 만들기" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp @@ -3445,7 +3429,7 @@ msgid "" msgstr "" "기존 í´ë¦¬ê³¤ 편집:\n" "좌í´ë¦: í¬ì¸íЏ ì´ë™.\n" -"컨트롤+좌í´ë¦: 세그먼트 나누기.\n" +"Ctrl+좌í´ë¦: ì„ ë¶„ 나누기.\n" "ìš°í´ë¦: í¬ì¸íЏ 지우기." #: editor/plugins/abstract_polygon_2d_editor.cpp @@ -3464,15 +3448,14 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 추가하기" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "로드" +msgstr "불러오기.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "ì´ íƒ€ìž…ì˜ ë…¸ë“œë¥¼ ì‚¬ìš©í• ìˆ˜ 없습니다. ì˜¤ì§ ë£¨íŠ¸ 노드만 사용 가능합니다." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3482,67 +3465,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree ê°€ 비활성 ìƒíƒœíž™ë‹ˆë‹¤.\n" +"ìƒíƒœë¥¼ 활성화하면 재ìƒí• 수 있습니다, í™œì„±í™”ì— ì‹¤íŒ¨í•˜ë©´ ë…¸ë“œì— ê²½ê³ ê°€ 있는지 " +"확ì¸í•˜ì„¸ìš”." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "공간 ë‚´ì˜ í˜¼í•© 위치 ì„¤ì •" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "í¬ì¸íŠ¸ë¥¼ ì„ íƒí•˜ê³ ì´ë™í•©ë‹ˆë‹¤, ìš°í´ë¦ìœ¼ë¡œ í¬ì¸íŠ¸ë¥¼ 만드실 수 있습니다." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "í¬ì¸íЏ ì‚ì œ" +msgstr "í¬ì¸íЏ 만들기." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "ìš°í´ë¦: í¬ì¸íЏ ì‚ì œ." +msgstr "í¬ì¸íЏ 지우기." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "í¬ì¸íЏ ì´ë™" +msgstr "í¬ì¸íЏ" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 노드" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 노드 열기" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "'%s' ì•¡ì…˜ì´ ì´ë¯¸ 존재합니다!" +msgstr "삼ê°í˜•ì´ ì´ë¯¸ 존재함" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2Dê°€ AnimationTree ë…¸ë“œì— ì†í•´ìžˆì§€ 않습니다." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "삼ê°í˜•ì´ ì¡´ìž¬í•˜ì§€ 않습니다, ë¸”ëžœë”©ì´ ì¼ì–´ë‚˜ì§€ 않습니다." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "í¬ì¸íŠ¸ë¥¼ 연결하여 삼ê°í˜• 만들기." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "%dê°œ 삼ê°í˜• ë¶„ì„ ì¤‘:" +msgstr "í¬ì¸íŠ¸ì™€ 삼ê°í˜• 지우기." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "(ìˆ˜ë™ ëŒ€ì‹ ) ìžë™ìœ¼ë¡œ ë¸”ë Œë“œ 삼ê°í˜• 만들기" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3550,6 +3530,11 @@ msgstr "" msgid "Snap" msgstr "스냅" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "ë¸”ë Œë“œ:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3557,20 +3542,21 @@ msgstr "í•„í„° 편집" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "ì¶œë ¥ 노드를 ë¸”ë Œë“œ íŠ¸ë¦¬ì— ì¶”ê°€í• ìˆ˜ 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." -msgstr "" +msgstr "ì—°ê²°í• ìˆ˜ 없습니다, í¬íŠ¸ê°€ 사용 중ì´ê±°ë‚˜ ìœ íš¨í•˜ì§€ 않는 연결입니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "" +msgstr "ì„¤ì •í•œ ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ê°€ 없습니다, 트랙 ì´ë¦„ì„ ê²€ìƒ‰í• ìˆ˜ 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"ìœ íš¨í•˜ì§€ 않는 í”Œë ˆì´ì–´ 경로 ì„¤ì •ìž…ë‹ˆë‹¤, 트랙 ì´ë¦„ì„ ê²€ìƒ‰í• ìˆ˜ 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3578,23 +3564,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ê°€ ìœ íš¨í•œ 루트 노드 경로를 ê°€ì§€ê³ ìžˆì§€ 않습니다, 트랙 ì´ë¦„" +"ì„ ê²€ìƒ‰í• ìˆ˜ 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "노드 추가" +msgstr "노드 추가.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "í•„í„° 편집" +msgstr "í•„í„° 트랙 편집:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "ìžì‹ë…¸ë“œ 편집 가능" +msgstr "í•„í„° 활성화" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3622,14 +3607,12 @@ msgid "Remove Animation" msgstr "ì• ë‹ˆë©”ì´ì…˜ ì œê±°" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ì—러: ìœ íš¨í•˜ì§€ ì•Šì€ ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„!" +msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ì—러: ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ì´ ì´ë¯¸ 존재합니다!" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ì´ ì´ë¯¸ 존재합니다!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3646,21 +3629,19 @@ msgstr "ë¸”ë Œë“œ 시간 변경" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 로드하기" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 불러오기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" msgstr "ì• ë‹ˆë©”ì´ì…˜ ë³µì œí•˜ê¸°" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ì—러: ë³µì‚¬í• ì• ë‹ˆë©”ì´ì…˜ì´ 없습니다!" +msgstr "ë³µì‚¬í• ì• ë‹ˆë©”ì´ì…˜ì´ 없습니다!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ì—러: í´ë¦½ë³´ë“œì— ì• ë‹ˆë©”ì´ì…˜ 리소스가 없습니다!" +msgstr "í´ë¦½ë³´ë“œì— ì• ë‹ˆë©”ì´ì…˜ 리소스가 없습니다!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3671,9 +3652,8 @@ msgid "Paste Animation" msgstr "ì• ë‹ˆë©”ì´ì…˜ 붙여넣기" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ì—러: íŽ¸ì§‘í• ì• ë‹ˆë©”ì´ì…˜ì´ 없습니다!" +msgstr "íŽ¸ì§‘í• ì• ë‹ˆë©”ì´ì…˜ì´ 없습니다!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3681,7 +3661,7 @@ msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ 현재 위치ì—서 거꾸로 재ìƒ. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ ëì—서 거꾸로 재ìƒ. (시프트+A)" +msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ ëì—서 거꾸로 재ìƒ. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" @@ -3689,7 +3669,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ì •ì§€. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ 처ìŒë¶€í„° 재ìƒ. (시프트+D)" +msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ 처ìŒë¶€í„° 재ìƒ. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" @@ -3717,14 +3697,12 @@ msgid "New" msgstr "새 파ì¼" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "ì—°ê²° 편집..." +msgstr "ì „í™˜ 편집..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "ì—디터ì—서 열기" +msgstr "ì¸ìŠ¤íŽ™í„°ì—서 열기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3732,7 +3710,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ëª©ë¡ í‘œì‹œ." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "로드 시 ìžë™ í”Œë ˆì´" +msgstr "불러올 시 ìžë™ 재ìƒ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning" @@ -3783,9 +3761,8 @@ msgid "Include Gizmos (3D)" msgstr "기즈모 í¬í•¨ (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 붙여넣기" +msgstr "AnimationPlayer ê³ ì •í•˜ê¸°" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3816,34 +3793,32 @@ msgid "Cross-Animation Blend Times" msgstr "êµì°¨-ì• ë‹ˆë©”ì´ì…˜ ë¸”ë Œë“œ 시간" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "ë(ì´ˆ)" +msgstr "ë" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "즉시" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "ë™ê¸°í™”" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "ëì—서" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "ì´ë™" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "하위 ì „í™˜ì— ì‹œìž‘ê³¼ ë 노드가 필요합니다." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "리소스 경로가 아닙니다." +msgstr "ê²½ë¡œì— ì„¤ì •ëœ ìž¬ìƒ ë¦¬ì†ŒìŠ¤ ì„¤ì •ì´ ì—†ìŠµë‹ˆë‹¤: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3851,34 +3826,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"노드를 ì„ íƒí•˜ê³ ì´ë™í•˜ì‹ì‹œì˜¤.\n" +"ìš°í´ë¦ìœ¼ë¡œ 새 노드를 추가합니다.\n" +"Shift+좌í´ë¦ìœ¼ë¡œ ì—°ê²°ì„ ë§Œë“니다." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "새 %s ìƒì„±" +msgstr "새 노드 만들기." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "노드 ì—°ê²°" +msgstr "노드 ì—°ê²°." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "ì„ íƒëœ 트랙 ì‚ì œ." +msgstr "ì„ íƒëœ 노드나 ì „í™˜ ì‚ì œ" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"ì´ ì• ë‹ˆë©”ì´ì…˜ì´ 시작, 재시작, 아니면 0으로 ê°ˆ 때 ìžë™ìœ¼ë¡œ ì‹œìž‘í• ì§€ë¥¼ 키거나 " +"ë•니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "ë ì• ë‹ˆë©”ì´ì…˜ì„ ì„¤ì •í•©ë‹ˆë‹¤. ì´ê²ƒì€ 하위 ì „í™˜ì— ìœ ìš©í•©ë‹ˆë‹¤." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "ì „í™˜" +msgstr "ì „í™˜: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3932,10 +3908,6 @@ msgid "Amount:" msgstr "ì–‘:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "ë¸”ë Œë“œ:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "ë¸”ë Œë“œ 0:" @@ -4076,14 +4048,12 @@ msgid "Asset Download Error:" msgstr "ì—ì…‹ 다운로드 ì—러:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "다운로드 중" +msgstr "다운로드 중 (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "다운로드 중" +msgstr "다운로드 중..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4110,14 +4080,12 @@ msgid "Download for this asset is already in progress!" msgstr "ì´ ì—ì…‹ì˜ ë‹¤ìš´ë¡œë“œê°€ ì´ë¯¸ 진행중입니다!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "처ìŒ" +msgstr "처ìŒìœ¼ë¡œ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "ì´ì „ íƒ" +msgstr "ì´ì „" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4125,7 +4093,7 @@ msgstr "다ìŒ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "마지막으로" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4250,29 +4218,28 @@ msgid "Create new horizontal and vertical guides" msgstr "새 가로 세로 ê°€ì´ë“œ 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" msgstr "피벗 ì´ë™" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "CanvasItem 편집" +msgstr "CanvasItem íšŒì „" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "ì´ë™ ì•¡ì…˜" +msgstr "앵커 ì´ë™" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "CanvasItem 편집" +msgstr "CanvasItem í¬ê¸° ì¡°ì ˆ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "CanvasItem 규모" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "CanvasItem 편집" +msgstr "CanvasItem ì´ë™" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4291,17 +4258,14 @@ msgid "Paste Pose" msgstr "í¬ì¦ˆ 붙여넣기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" msgstr "축소" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "확대 초기화" +msgstr "배율 초기화" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" msgstr "확대" @@ -4319,7 +4283,7 @@ msgstr "알트+드래그: ì´ë™" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." -msgstr "'v'키로 피벗 변경, '시프트+v'키로 피벗 드래그 (ì´ë™í•˜ëŠ” ë™ì•ˆ)." +msgstr "'v'키로 피벗 변경, 'Shift+v'키로 피벗 드래그 (ì´ë™í•˜ëŠ” ë™ì•ˆ)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" @@ -4334,6 +4298,10 @@ msgid "Rotate Mode" msgstr "íšŒì „ 모드" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "규모 모드" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4351,16 +4319,14 @@ msgid "Pan Mode" msgstr "팬 모드" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "스냅 í† ê¸€" +msgstr "스냅 í† ê¸€." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "스냅 옵션" @@ -4402,9 +4368,8 @@ msgid "Snap to node sides" msgstr "노드 ì˜†ì— ìŠ¤ëƒ…" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "노드 ì•µì»¤ì— ìŠ¤ëƒ…" +msgstr "노드 ì¤‘ì‹¬ì— ìŠ¤ëƒ…" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4433,6 +4398,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "ìŠ¤ì¼ˆë ˆí†¤ ì„¤ì •" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "뼈대 보기" @@ -4446,12 +4415,11 @@ msgstr "IK ì²´ì¸ ì§€ìš°ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "노드ì—서 커스텀 본 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Bones 지우기" +msgstr "커스텀 본 지우기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4484,6 +4452,10 @@ msgid "Show Viewport" msgstr "ë·°í¬íЏ 보기" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "그룹과 ìž ê¸ˆ ì•„ì´ì½˜ ë³´ì´ê¸°" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "ì„ íƒ í•목 화면 ì¤‘ì•™ì— í‘œì‹œ" @@ -4496,9 +4468,8 @@ msgid "Layout" msgstr "ë ˆì´ì•„웃" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "키 삽입" +msgstr "키 삽입." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4535,7 +4506,7 @@ msgstr "루트 ë…¸ë“œì—†ì´ ì—¬ëŸ¬ê°œì˜ ë…¸ë“œë¥¼ ìƒì„±í• 수 없습니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "노드 ìƒì„±" +msgstr "노드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -4551,8 +4522,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"드래그 & ë“œëž + 시프트 : í˜•ì œ 노드로 추가\n" -"드래그 & ë“œëž + 알트 : 노드 타입 변경" +"드래그 & ë“œë¡ + Shift : í˜•ì œ 노드로 추가\n" +"드래그 & ë“œë¡ + Alt : 노드 타입 변경" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" @@ -4563,9 +4534,8 @@ msgid "Set Handle" msgstr "핸들 ì„¤ì •" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "파티í´" +msgstr "CPU파티í´" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4607,7 +4577,7 @@ msgstr "커브 탄ì 트 ìˆ˜ì •" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" -msgstr "커브 프리셋 로드" +msgstr "커브 프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Add point" @@ -4627,7 +4597,7 @@ msgstr "오른쪽 ì„ í˜•" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" -msgstr "프리셋 로드" +msgstr "프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" @@ -4639,7 +4609,7 @@ msgstr "커브 ì„ í˜• 탄ì 트 í† ê¸€" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "시프트키를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 탄ì 트를 개별ì 으로 편집 가능" +msgstr "Shift키를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 탄ì 트를 개별ì 으로 편집 가능" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" @@ -4683,7 +4653,7 @@ msgstr "좌í´ë¦: í¬ì¸íЏ ì´ë™." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "컨트롤+좌í´ë¦: 세그먼트 ë¶„í• ." +msgstr "Ctrl+좌í´ë¦: ì„ ë¶„ ë¶„í• ." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." @@ -4873,11 +4843,11 @@ msgstr "ëŒ€ìƒ ì„œí”¼ìŠ¤ ì„ íƒ:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "서피스 ìƒì„±" +msgstr "서피스 만들기" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "MultiMesh ìƒì„±" +msgstr "MultiMesh 만들기" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" @@ -4917,16 +4887,15 @@ msgstr "ìž„ì˜ í¬ê¸°:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" -msgstr "ìƒì„±" +msgstr "만들기" #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" msgstr "네비게ì´ì…˜ í´ë¦¬ê³¤ 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "AABB ìƒì„± 중" +msgid "Generating Visibility Rect" +msgstr "가시성 ì§ì‚¬ê°í˜• 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4934,7 +4903,7 @@ msgstr "ì˜¤ì§ ParticlesMaterial 프로세스 메테리얼 ì•ˆì˜ í¬ì¸íŠ¸ë§Œ ì #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "ì´ë¯¸ì§€ 로드 ì—러:" +msgstr "ì´ë¯¸ì§€ 불러오기 ì—러:" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "No pixels with transparency > 128 in image..." @@ -4942,11 +4911,11 @@ msgstr "ì´ë¯¸ì§€ì— 투명ë„ê°€ 128보다 í° í”½ì…€ì´ ì—†ìŠµë‹ˆë‹¤..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "Visibility Rect를 ìƒì„±" +msgstr "가시성 ì§ì‚¬ê°í˜•ì„ ë§Œë“¤ê¸°" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "ì—미션 ë§ˆìŠ¤í¬ ë¡œë“œ" +msgstr "ì—미션 ë§ˆìŠ¤í¬ ë¶ˆëŸ¬ì˜¤ê¸°" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" @@ -4954,8 +4923,13 @@ msgstr "ì—미션 ë§ˆìŠ¤í¬ ì •ë¦¬" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "CPU파티í´ë¡œ 변환" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "파티í´" +msgstr "파티í´(Particles)" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" @@ -5023,17 +4997,16 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "'ParticlesMaterial' íƒ€ìž…ì˜ í”„ë¡œì„¸ì„œ ë¨¸í„°ë¦¬ì–¼ì´ í•„ìš”í•©ë‹ˆë‹¤." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "AABB ìƒì„±" +msgid "Generating AABB" +msgstr "AABB ìƒì„± 중" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "대문ìžë¡œ 변환" +msgid "Generate AABB" +msgstr "AABB 만들기" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "가시성 AABB ìƒì„±" +msgstr "가시성 AABB 만들기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -5072,7 +5045,7 @@ msgstr "í¬ì¸íЏ ì„ íƒ" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "시프트+드래그: 컨트롤 í¬ì¸íЏ ì„ íƒ" +msgstr "Shift+드래그: 컨트롤 í¬ì¸íЏ ì„ íƒ" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5086,7 +5059,7 @@ msgstr "ìš°í´ë¦: í¬ì¸íЏ ì‚ì œ" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "컨트롤 í¬ì¸íЏ ì„ íƒ (시프트+드래그)" +msgstr "컨트롤 í¬ì¸íЏ ì„ íƒ (Shift+드래그)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5096,7 +5069,7 @@ msgstr "í¬ì¸íЏ 추가 (빈 공간)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "세그먼트 ë¶„í• (커브)" +msgstr "ì„ ë¶„ ë¶„í• (커브)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5117,12 +5090,12 @@ msgstr "옵션" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "핸들 ê°ë„ 거울" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "핸들 ê¸¸ì´ ê±°ìš¸" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5157,56 +5130,49 @@ msgid "Remove In-Control Point" msgstr "ì¸-컨트롤 í¬ì¸íЏ ì‚ì œ" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "í¬ì¸íЏ ì´ë™" +msgstr "ê´€ì ˆ ì´ë™" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "Polygon2Dì˜ ìŠ¤ì¼ˆë ˆí†¤ ì†ì„±ì´ Skeleton2D 노드를 í–¥í•˜ê³ ìžˆì§€ 않ìŒ" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "뼈대 보기" +msgstr "본 ë™ê¸°í™”" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "UV ë§µ 만들기" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "í´ë¦¬ê³¤ ìƒì„±" +msgstr "í´ë¦¬ê³¤ & UV 만들기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "ìžì²´ì 으로 í¬ì¸íЏ ë¶„í• ." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "ë¶„í• ì€ ì¡´ìž¬í•˜ëŠ” 모서리를 í˜•ì„±í• ìˆ˜ 없습니다." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "'%s' ì•¡ì…˜ì´ ì´ë¯¸ 존재합니다!" +msgstr "ì´ë¯¸ ë¶„í• ë˜ì—ˆìŠµë‹ˆë‹¤." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "í¬ì¸íЏ 추가" +msgstr "ë¶„í• ì¶”ê°€" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "경로가 ìœ íš¨í•˜ì§€ 않습니다!" +msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ë¶„í• : " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "í¬ì¸íЏ ì œê±°" +msgstr "ë¶„í• ì œê±°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5214,7 +5180,7 @@ msgstr "UV ë§µ 변형" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "본 가중치 페ì¸íЏ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5222,27 +5188,23 @@ msgstr "í´ë¦¬ê³¤ 2D UV ì—디터" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "í´ë¦¬ê³¤ 편집" +msgstr "í´ë¦¬" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "경로 나누기" +msgstr "ë¶„í• " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Bones 만들기" +msgstr "본" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "í´ë¦¬ê³¤ ìƒì„±" +msgstr "í´ë¦¬ê³¤ 만들기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -5250,15 +5212,15 @@ msgstr "í¬ì¸íЏ ì´ë™" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "컨트롤: íšŒì „" +msgstr "Ctrl: íšŒì „" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "시프트: ì „ì²´ ì´ë™" +msgstr "Shift: ì „ì²´ ì´ë™" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "시프트+컨트롤: í¬ê¸° ì¡°ì ˆ" +msgstr "Shift+Ctrl: í¬ê¸° ì¡°ì ˆ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" @@ -5274,24 +5236,23 @@ msgstr "í´ë¦¬ê³¤ í¬ê¸° ì¡°ì ˆ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "ë‘ í¬ì¸íŠ¸ë¥¼ 연결하여 ë¶„í• " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "ë¨¼ì € ì„¤ì • í•ëª©ì„ ì„ íƒí•˜ì„¸ìš”!" +msgstr "지울 ë¶„í• ì„ ì„ íƒ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "ì§€ì •í•œ ê°•ë„로 가중치를 페ì¸íЏ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "ì§€ì •í•œ ê°•ë„로 가중치를 페ì¸íЏ 취소" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "반지름:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5306,9 +5267,8 @@ msgid "Clear UV" msgstr "UV ì •ë¦¬" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "그리드맵 ì„¤ì •" +msgstr "그리드 ì„¤ì •" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5319,38 +5279,32 @@ msgid "Grid" msgstr "그리드" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "스냅 ì„¤ì •" +msgstr "그리드 구성:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "그리드 오프셋:" +msgstr "그리드 오프셋 X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "그리드 오프셋:" +msgstr "그리드 오프셋 Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "그리드 스í…:" +msgstr "그리드 ìŠ¤í… X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "그리드 스í…:" +msgstr "그리드 ìŠ¤í… Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "í´ë¦¬ê³¤ í¬ê¸° ì¡°ì ˆ" +msgstr "ë³¸ì„ í´ë¦¬ê³¤ì— ë™ê¸°í™”" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "ì—러: 리소스를 ë¡œë“œí• ìˆ˜ 없습니다!" +msgstr "ì—러: 리소스를 불러올 수 없습니다!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" @@ -5374,25 +5328,25 @@ msgid "Paste Resource" msgstr "리소스 붙여넣기" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "ì—디터ì—서 열기" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "ì¸ìŠ¤í„´ìŠ¤:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "타입:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "ì—디터ì—서 열기" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" -msgstr "리소스 로드" +msgstr "리소스 불러오기" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" @@ -5400,12 +5354,11 @@ msgstr "리소스 프리로ë”" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTreeê°€ AnimationPlayer로 향하는 경로를 ê°€ì§€ê³ ìžˆì§€ 않습니다" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 ìœ íš¨í•˜ì§€ 않습니다." +msgstr "AnimationPlayer로 향하는 경로가 ìœ íš¨í•˜ì§€ 않습니다" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5416,19 +5369,20 @@ msgid "Close and save changes?" msgstr "변경사í•ì„ ì €ìž¥í•˜ê³ ë‹«ê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "íŒŒì¼ ì´ë™ ì—러:\n" +msgstr "í…스트 íŒŒì¼ ì“°ê¸° ì—러:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "ì—러: 파ì¼ì„ 불러올 수 ì—†ìŒ." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "ì´ë¯¸ì§€ë¥¼ ë¡œë“œí• ìˆ˜ ì—†ìŒ" +msgstr "ì—러로 파ì¼ì„ 불러올 수 ì—†ìŒ." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "타ì¼ì…‹ ì €ìž¥ 중 ì—러!" +msgstr "íŒŒì¼ ì €ìž¥ 중 ì—러!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5447,17 +5401,14 @@ msgid "Error importing" msgstr "ê°€ì ¸ì˜¤ëŠ” 중 ì—러" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "새 í´ë”..." +msgstr "새 í…스트 파ì¼..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "íŒŒì¼ ì—´ê¸°" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." msgstr "다른 ì´ë¦„으로 ì €ìž¥..." @@ -5475,7 +5426,7 @@ msgstr " í´ëž˜ìФ ë ˆí¼ëŸ°ìФ" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "메서드 목ë¡ì˜ ì‚¬ì „ ì‹ ì •ë ¬ì„ í‚¤ê±°ë‚˜ ë•니다." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5506,9 +5457,8 @@ msgid "File" msgstr "파ì¼" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "íŒŒì¼ ë³´ê¸°" +msgstr "새 í…스트 파ì¼" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5516,18 +5466,14 @@ msgstr "ëª¨ë‘ ì €ìž¥" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "스í¬ë¦½íЏ 다시 로드" +msgstr "스í¬ë¦½íЏ 다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" msgstr "스í¬ë¦½íЏ 경로 복사" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "ì´ì „ ížˆìŠ¤í† ë¦¬" #: editor/plugins/script_editor_plugin.cpp @@ -5541,7 +5487,7 @@ msgstr "테마" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "테마 다시 로드" +msgstr "테마 다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" @@ -5598,18 +5544,14 @@ msgid "Keep Debugger Open" msgstr "디버거 í•ìƒ ì—´ì–´ë†“ê¸°" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "외부 ì—디터와 디버그" +msgid "Debug with External Editor" +msgstr "외부 ì—디터로 디버깅" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "Godot 온ë¼ì¸ 문서 열기" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "í´ëž˜ìФ 계층 검색." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "ë ˆí¼ëŸ°ìФ 문서 검색." @@ -5635,7 +5577,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Reload" -msgstr "다시 로드" +msgstr "다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Resave" @@ -5646,37 +5588,28 @@ msgid "Debugger" msgstr "디버거" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "ë„ì›€ë§ ê²€ìƒ‰" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "í´ëž˜ìФ 검색" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "내장 스í¬ë¦½íŠ¸ëŠ” 종ì†ëœ ì”¬ì´ ì—´ë¦° ìƒíƒœì—서만 íŽ¸ì§‘ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤" +msgid "Search Results" +msgstr "검색 ê²°ê³¼" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "ë¼ì¸:" +msgstr "ë¼ì¸" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(무시함)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "함수로 ì´ë™" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 ê°€ì ¸ì˜¨ 리소스만 드ëží• 수 있습니다." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "ìžë™ 완성" +msgstr "룩업 심벌" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5700,11 +5633,11 @@ msgstr "대문ìžë¡œ 시작" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "구문 ê°•ì¡°" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "표준" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5757,11 +5690,11 @@ msgid "Trim Trailing Whitespace" msgstr "후행 공백 ë¬¸ìž ì œê±°" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "들여쓰기를 스페ì´ìŠ¤ë¡œ 변환" +msgid "Convert Indent to Spaces" +msgstr "들여쓰기를 공백으로 변환" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "들여쓰기를 íƒìœ¼ë¡œ 변환" #: editor/plugins/script_text_editor.cpp @@ -5778,36 +5711,27 @@ msgid "Remove All Breakpoints" msgstr "중단ì ëª¨ë‘ ì‚ì œ" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "ë‹¤ìŒ ì¤‘ë‹¨ì 으로 ì´ë™" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "ì´ì „ 중단ì 으로 ì´ë™" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "대문ìžë¡œ 변환" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "소문ìžë¡œ 변환" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "ì´ì „ 찾기" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "íŒŒì¼ í•„í„°ë§..." +msgid "Find in Files..." +msgstr "파ì¼ì—서 찾기..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "함수로 ì´ë™..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™..." #: editor/plugins/script_text_editor.cpp @@ -5821,39 +5745,35 @@ msgstr "ì…°ì´ë”" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" +"ì´ ìŠ¤ì¼ˆë ˆí†¤ì€ ë³¸ì„ ê°€ì§€ê³ ìžˆì§€ 않습니다, ìžì‹ìœ¼ë¡œ Bone2D 노드를 추가하세요." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "ìŠ¤ì¼ˆë ˆí†¤..." +msgstr "ìŠ¤ì¼ˆë ˆí†¤2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "(본으로부터) íœ´ì‹ í¬ì¦ˆ 만들기" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "ë³¸ì„ íœ´ì‹ í¬ì¦ˆë¡œ ì„¤ì •" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "네비게ì´ì…˜ 메시 만들기" +msgstr "물리ì 본 만들기" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "ìŠ¤ì¼ˆë ˆí†¤..." +msgstr "ìŠ¤ì¼ˆë ˆí†¤" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "C# 솔루션 만들기" +msgstr "물리ì ìŠ¤ì¼ˆë ˆí†¤ 만들기" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "실행" +msgstr "IK 실행" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5904,6 +5824,14 @@ msgid "Animation Key Inserted." msgstr "ì• ë‹ˆë©”ì´ì…˜ 키가 삽입ë˜ì—ˆìŠµë‹ˆë‹¤." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "피치" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "ìš”" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "ê·¸ë ¤ì§„ 오브ì 트" @@ -5988,9 +5916,8 @@ msgid "This operation requires a single selected node." msgstr "ì´ ìž‘ì—…ì€ í•˜ë‚˜ì˜ ì„ íƒëœ 노드를 필요로 합니다." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "ì •ë³´ 보기" +msgstr "ë·° íšŒì „ ìž ê¸ˆ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6037,9 +5964,8 @@ msgid "Doppler Enable" msgstr "ë„플러 활성화" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "메시 미리보기 ìƒì„± 중" +msgstr "시네마틱 미리보기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6070,8 +5996,12 @@ msgid "Freelook Speed Modifier" msgstr "ìžìœ 시ì ì†ë„ 변화" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "ë·° íšŒì „ ìž ê¹€" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "XForm 다ì´ì–¼ë¡œê·¸" +msgstr "XForm 대화 ìƒìž" #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode (Q)" @@ -6172,13 +6102,8 @@ msgid "Tool Scale" msgstr "í¬ê¸° ì¡°ì ˆ 툴" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "ê·¸ë¦¬ë“œì— ìŠ¤ëƒ…" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" -msgstr "ìžìœ 시ì í† ê¸€" +msgstr "ìžìœ 시ì í† ê¸€" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" @@ -6186,11 +6111,11 @@ msgstr "변형" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "물체를 ë°”ë‹¥ì— ìŠ¤ëƒ…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." -msgstr "변형 다ì´ì–¼ë¡œê·¸..." +msgstr "변형 대화 ìƒìž..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -6217,9 +6142,8 @@ msgid "4 Viewports" msgstr "4ê°œ ë·°í¬íЏ" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "기즈모 보기" +msgstr "기즈모" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6295,55 +6219,48 @@ msgid "Post" msgstr "Post" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "ì €ìž¥ 경로가 없습니다!" +msgstr "스프ë¼ì´íŠ¸ê°€ 비었습니다!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "스프ë¼ì´íŠ¸ê°€ ì• ë‹ˆë©”ì´ì…˜ í”„ë ˆìž„ì„ ì‚¬ìš©í•´ì„œ 메시로 ì „í™˜ë 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í˜•ìƒ, 메시로 ëŒ€ì²´í• ìˆ˜ 없습니다." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "스프ë¼ì´íЏ í”„ë ˆìž„" +msgstr "스프ë¼ì´íЏ" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "%s로 변환" +msgstr "2D 메시로 ì „í™˜" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "ì™¸ê³½ì„ ë©”ì‹œ 만들기" +msgstr "2D 메시 만들기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "단순화: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "스냅 (픽셀):" +msgstr "성장 (픽셀): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "ì•„í‹€ë¼ìФ 미리보기" +msgstr "ì—…ë°ì´íЏ 미리보기" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "ì„¤ì •" +msgstr "ì„¤ì •:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "ì—러: í”„ë ˆìž„ 리소스를 ë¡œë“œí• ìˆ˜ 없습니다!" +msgstr "ì—러: í”„ë ˆìž„ 리소스를 불러올 수 없습니다!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" @@ -6375,7 +6292,7 @@ msgstr "(비었ìŒ)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "ì• ë‹ˆë©”ì´ì…˜" +msgstr "ì• ë‹ˆë©”ì´ì…˜(Animations)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" @@ -6443,12 +6360,11 @@ msgstr "단계:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "분리.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" -msgstr "í…ìŠ¤ì³ ì˜ì—" +msgstr "TextureRegion" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -6536,7 +6452,7 @@ msgstr "ë§Žì€" #: editor/plugins/theme_editor_plugin.cpp msgid "Has,Many,Options" -msgstr "가진다,ë§Žì€,옵션들" +msgstr "ë§Žì€,옵션,갖춤" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -6552,7 +6468,7 @@ msgstr "íƒ 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "ë°ì´íƒ€ 타입:" +msgstr "ë°ì´í„° 타입:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" @@ -6579,9 +6495,12 @@ msgid "Erase Selection" msgstr "ì„ íƒ ì§€ìš°ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì´ë¦„." +msgstr "ìž˜ëª»ëœ íƒ€ì¼ ìˆ˜ì •" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "ì„ íƒ ìž˜ë¼ë‚´ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6604,7 +6523,6 @@ msgid "Erase TileMap" msgstr "타ì¼ë§µ 지우기" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" msgstr "íƒ€ì¼ ì°¾ê¸°" @@ -6629,35 +6547,36 @@ msgid "Pick Tile" msgstr "íƒ€ì¼ ì„ íƒ" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "ì„ íƒ ì‚ì œ" +msgid "Copy Selection" +msgstr "ì„ íƒ ë³µì‚¬" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "0ë„ íšŒì „" +msgid "Rotate left" +msgstr "왼쪽으로 íšŒì „" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "90ë„ íšŒì „" +msgid "Rotate right" +msgstr "오른쪽으로 íšŒì „" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "180ë„ íšŒì „" +msgid "Flip horizontally" +msgstr "가로로 뒤집기" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "270ë„ íšŒì „" +msgid "Flip vertically" +msgstr "세로로 뒤집기" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" +msgstr "변형 지우기" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "트리ì—서 노드 추가" +msgstr "타ì¼ì…‹ì— í…ìŠ¤ì³ ì¶”ê°€" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "현재 엔트리 ì œê±°" +msgstr "현재 í…스ì³ë¥¼ 타ì¼ì…‹ì—서 ì œê±°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6677,15 +6596,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "íƒ€ì¼ ì´ë¦„ ë³´ì´ê¸° (Alt 키를 누르세요)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "ì„ íƒí•œ í…스ì³ì™€ ê·¸ê²ƒì„ ì‚¬ìš©í•˜ëŠ” ëª¨ë“ íƒ€ì¼ì„ ì‚ì œí•˜ê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "ì œê±°í• í…스ì³ë¥¼ ì„ íƒí•˜ì§€ 않았습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6696,76 +6615,76 @@ msgid "Merge from scene?" msgstr "씬으로부터 ë³‘í•©í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +msgid "%s file(s) were not added because was already on the list." +msgstr "%s 파ì¼ì´ ì´ë¯¸ 목ë¡ì— 존재하여 추가ë˜ì§€ 않습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"í•¸ë“¤ì„ ë“œëž˜ê·¸í•˜ì—¬ 사ê°í˜•ì„ íŽ¸ì§‘.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" -"좌í´ë¦: 비트 켜기를 ì„¤ì •í•©ë‹ˆë‹¤.\n" -"ìš°í´ë¦: 비트 ë„기를 ì„¤ì •í•©ë‹ˆë‹¤." +"좌í´ë¦: 비트 켜기 ì„¤ì •.\n" +"ìš°í´ë¦: 비트 ë„기 ì„¤ì •.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "현재 íŽ¸ì§‘ëœ ì„œë¸Œ íƒ€ì¼ ì„ íƒ." +msgstr "" +"현재 íŽ¸ì§‘ëœ ì„œë¸Œ íƒ€ì¼ ì„ íƒ.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" -"ì‚¬ìš©í• ì„œë¸Œ 타ì¼ì„ ì•„ì´ì½˜ìœ¼ë¡œ ì„¤ì •í•˜ì„¸ìš”, íš¨ë ¥ì—†ëŠ” ìžë™íƒ€ì¼ ë°”ì¸ë”©ì—ë„ ì‚¬ìš©ë©" -"니다." +"ì‚¬ìš©í• ì„œë¸Œ 타ì¼ì„ ì•„ì´ì½˜ìœ¼ë¡œ ì„¤ì •í•˜ì„¸ìš”, ìœ íš¨í•˜ì§€ ì•Šì€ ìžë™ íƒ€ì¼ ë°”ì¸ë”©ì—ë„ " +"사용ë©ë‹ˆë‹¤.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "서브 타ì¼ì„ ì„ íƒí•´ ìš°ì„ ìˆœìœ„ë¥¼ 바꿉니다." +msgstr "" +"서브 타ì¼ì„ ì„ íƒí•´ ìš°ì„ ìˆœìœ„ë¥¼ 바꿈.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "ì´ ìž‘ì—…ì€ ì”¬ ì—†ì´ëŠ” 불가합니다." +msgstr "ì´ ì†ì„±ì„ 바꿀 수 없습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "íƒ€ì¼ ì…‹" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "버틱스" +msgstr "버í…스" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" msgstr "프래그먼트" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "오른쪽면" +msgstr "ë¹›" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "ì…°ì´ë”" +msgstr "비주얼 ì…°ì´ë”" #: editor/project_export.cpp msgid "Runnable" @@ -6784,6 +6703,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ì—†ê±°ë‚˜ ì†ìƒë¨:" #: editor/project_export.cpp +msgid "Release" +msgstr "ë°°í¬" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "ëª¨ë‘ ë‚´ë³´ë‚´ê¸°" + +#: editor/project_export.cpp msgid "Presets" msgstr "프리셋" @@ -6792,8 +6719,12 @@ msgid "Add..." msgstr "추가..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "경로 내보내기:" + +#: editor/project_export.cpp msgid "Resources" -msgstr "리소스" +msgstr "리소스(Resources)" #: editor/project_export.cpp msgid "Export all resources in the project" @@ -6839,7 +6770,7 @@ msgstr "기능" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "커스텀 (콤마로 구분):" +msgstr "커스텀 (쉼표로 구분):" #: editor/project_export.cpp msgid "Feature List:" @@ -6850,6 +6781,14 @@ msgid "Export PCK/Zip" msgstr "PCK/Zip 내보내기" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "내보내기 모드?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "ëª¨ë‘ ë‚´ë³´ë‚´ê¸°" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ì—†ìŒ:" @@ -6862,22 +6801,21 @@ msgid "The path does not exist." msgstr "경로가 존재하지 않습니다." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "'project.godot' 파ì¼ì´ 없는 í´ë”를 ì„ íƒ í•˜ì‹ì‹œì˜¤." +msgstr "" +"ìœ íš¨í•˜ì§€ ì•Šì€ '.zip' 프로ì 트 파ì¼, 'project.godot' 파ì¼ì„ í¬í•¨í•˜ì§€ 않ìŒ." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "비어있는 í´ë”를 ì„ íƒí•˜ì„¸ìš”." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "'project.godot' 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”." +msgstr "'project.godot' íŒŒì¼ ì´ë‚˜ '.zip' 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "ë””ë ‰í† ë¦¬ì— Godot 프로ì 트가 ì´ë¯¸ 있습니다." #: editor/project_manager.cpp msgid "Imported Project" @@ -6908,8 +6846,8 @@ msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" -"프로ì 트 경로로 부터 project.godot 파ì¼ì„ 로드 í• ìˆ˜ 없습니다 (ì—러 %d). 존재" -"하지 않거나 ì†ìƒë˜ì—ˆì„ 수 있습니다." +"프로ì 트 경로로부터 project.godot 파ì¼ì„ 불러올 수 없습니다 (ì—러 %d). 존재하" +"ì§€ 않거나 ì†ìƒë˜ì—ˆì„ 수 있습니다." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -6961,16 +6899,15 @@ msgstr "프로ì 트 명:" #: editor/project_manager.cpp msgid "Create folder" -msgstr "í´ë” ìƒì„±" +msgstr "í´ë” 만들기" #: editor/project_manager.cpp msgid "Project Path:" msgstr "프로ì 트 경로:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "프로ì 트 경로:" +msgstr "프로ì 트 설치 경로:" #: editor/project_manager.cpp msgid "Browse" @@ -6994,9 +6931,9 @@ msgid "" "Please edit the project and set the main scene in \"Project Settings\" under " "the \"Application\" category." msgstr "" -"프로ì 트를 ì‹¤í–‰í• ìˆ˜ 없습니다: ë©”ì¸ì”¬ì´ ì§€ì •ë˜ì§€ 않았습니다.\n" -"프로ì 트를 편집하여 \"Application\" ì¹´í…Œê³ ë¦¬ì— \"Project Settings\"ì—서 ë©”ì¸ " -"ì”¬ì„ ì„¤ì •í•˜ì„¸ìš”." +"프로ì 트를 ì‹¤í–‰í• ìˆ˜ 없습니다: ë©”ì¸ ì”¬ì´ ì§€ì •ë˜ì§€ 않았습니다.\n" +"\"프로ì 트 ì„¤ì •\"ì˜ \"Application\" ì¹´í…Œê³ ë¦¬ì—서 ë©”ì¸ ì”¬ì„ ì„¤ì •í•˜ê³ í”„ë¡œì 트" +"를 편집하세요." #: editor/project_manager.cpp msgid "" @@ -7008,12 +6945,12 @@ msgstr "" #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" -msgstr "ë‘ê°œ ì´ìƒì˜ 프로ì 트를 ì‹¤í–‰í•˜ë ¤ëŠ” ê²ƒì´ í™•ì‹¤í•©ë‹ˆê¹Œ?" +msgstr "ë‘ ê°œ ì´ìƒì˜ 프로ì 트를 ì‹¤í–‰í•˜ë ¤ëŠ” ê²ƒì´ í™•ì‹¤í•©ë‹ˆê¹Œ?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "" -"목ë¡ì—서 프로ì 트를 ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ? (í´ë”와 파ì¼ë“¤ì€ 남아있게 ë©ë‹ˆë‹¤.)" +"목ë¡ì—서 프로ì 트를 ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ? (í´ë”ì˜ ë‚´ìš©ë¬¼ì€ ì‚¬ë¼ì§€ì§€ 않습니다)" #: editor/project_manager.cpp msgid "" @@ -7090,13 +7027,12 @@ msgid "Mouse Button" msgstr "마우스 버튼" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"ì¸ì‹í• 수 없는 ì•¡ì…˜ ì´ë¦„입니다. 공백ì´ê±°ë‚˜, '/' , ':', '=', '\\', '\"' ê°€ í¬í•¨" -"ë˜ë©´ 안 ë©ë‹ˆë‹¤." +"ìœ íš¨í•˜ì§€ ì•Šì€ ì•¡ì…˜ ì´ë¦„. 공백ì´ê±°ë‚˜, '/' , ':', '=', '\\', '\"' 를 í¬í•¨í•˜ë©´ " +"안 ë©ë‹ˆë‹¤" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7107,18 +7043,16 @@ msgid "Rename Input Action Event" msgstr "ìž…ë ¥ 앱션 ì´ë²¤íЏ ì´ë¦„ 변경" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ 변경:" +msgstr "ì•¡ì…˜ ë°ë“œ ì¡´ 변경" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ 추가" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "기기" +msgstr "ëª¨ë“ ê¸°ê¸°" #: editor/project_settings_editor.cpp msgid "Device" @@ -7126,15 +7060,15 @@ msgstr "기기" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Shift+" -msgstr "시프트+" +msgstr "Shift+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Alt+" -msgstr "알트+" +msgstr "Alt+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Control+" -msgstr "컨트롤+" +msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -7165,24 +7099,20 @@ msgid "Wheel Down Button" msgstr "íœ ì•„ëž˜ë¡œ 버튼" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "íœ ìœ„ë¡œ 버튼" +msgstr "íœ ì™¼ìª½ 버튼" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "오른쪽 버튼" +msgstr "íœ ì˜¤ë¥¸ìª½ 버튼" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "버튼 6" +msgstr "X 버튼 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "버튼 6" +msgstr "X 버튼 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7210,7 +7140,7 @@ msgstr "ì´ë²¤íЏ 추가" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "버튼" +msgstr "버튼(Button)" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -7324,17 +7254,13 @@ msgstr "프로ì 트 ì„¤ì • (project.godot)" msgid "General" msgstr "ì¼ë°˜" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "ì†ì„±:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "ìž¬ì •ì˜..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "변경 사í•ì„ ì ìš©í•˜ë ¤ë©´ ì—디터를 다시 실행해야 합니다" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7346,11 +7272,11 @@ msgstr "ì•¡ì…˜:" #: editor/project_settings_editor.cpp msgid "Action" -msgstr "ì•¡ì…˜" +msgstr "ì•¡ì…˜(Action)" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "ë°ë“œ ì¡´" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7410,7 +7336,7 @@ msgstr "로케ì¼:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "ì˜¤í† ë¡œë“œ" +msgstr "ì˜¤í† ë¡œë“œ(AutoLoad)" #: editor/property_editor.cpp msgid "Ease In" @@ -7450,7 +7376,7 @@ msgstr "노드 ì„ íƒ" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "íŒŒì¼ ë¡œë“œ ì—러: 리소스가 아닙니다!" +msgstr "íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸° ì—러: 리소스가 아닙니다!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -7460,10 +7386,6 @@ msgstr "노드 ì„ íƒ" msgid "Bit %d, val %d." msgstr "비트 %d, ê°’ %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "ì†ì„±:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "ì†ì„± ì„ íƒ" @@ -7482,100 +7404,95 @@ msgstr "PVRTC ë„구를 ì‹¤í–‰í• ìˆ˜ 없습니다:" #: editor/pvrtc_compress.cpp msgid "Can't load back converted image using PVRTC tool:" -msgstr "PVRTC ë„구를 사용하여 ë³€í™˜ëœ ì´ë¯¸ì§€ë¥¼ 다시 로드 í• ìˆ˜ 없습니다:" +msgstr "PVRTC ë„구를 사용하여 ë³€í™˜ëœ ì´ë¯¸ì§€ë¥¼ 다시 불러올 수 없습니다:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "ì´ë¦„ 변경" +msgstr "ì¼ê´„ ì´ë¦„ 변경" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "ì ‘ë‘사" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "ì ‘ë¯¸ì‚¬" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "스냅 옵션" +msgstr "ê³ ê¸‰ 옵션" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "대체" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "노드 ì´ë¦„:" +msgstr "노드 ì´ë¦„" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "ë…¸ë“œì˜ ë¶€ëª¨ ì´ë¦„ (사용 가능한 경우)" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "노드 타입 찾기" +msgstr "노드 타입" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "현재 씬" +msgstr "현재 씬 ì´ë¦„" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "루트 노드 ì´ë¦„:" +msgstr "루트 노드 ì´ë¦„" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"순차 ì •ìˆ˜ ì¹´ìš´í„°.\n" +"ì¹´ìš´í„° ì„¤ì •ê³¼ 비êµí•¨." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "수준 별 ì¹´ìš´í„°" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "ì„¤ì •í•œë‹¤ë©´ ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì— ëŒ€í•´ ì¹´ìš´í„°ê°€ 다시 시작ë©ë‹ˆë‹¤" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "ì¹´ìš´í„°ì˜ ì´ˆê¸° ê°’" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "단계:" +msgstr "단계" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "ê° ë…¸ë“œì— ëŒ€í•´ ì¹´ìš´í„°ê°€ ì¦ê°€í•˜ëŠ” ì–‘" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "패딩(Padding)" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"ì¹´ìš´í„°ì˜ ìµœì†Œ ìžë¦¿ìˆ˜.\n" +"빈 ìžë¦¬ëŠ” 0으로 채워집니다." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "í‘œí˜„ì‹ ë³€ê²½" +msgstr "ì •ê·œ 표현ì‹" #: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ìˆ˜í–‰í• ìŠ¤í¬ë¦½íЏ:" +msgstr "후 처리" #: editor/rename_dialog.cpp msgid "Keep" @@ -7583,32 +7500,29 @@ msgstr "ìœ ì§€" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "낙타 대문ìžë¥¼ 밑줄로" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "ë°‘ì¤„ì„ ë‚™íƒ€ 대문ìžë¡œ" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "문ìž" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "소문ìžë¡œ 변경" +msgstr "소문ìžë¡œ" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "대문ìžë¡œ 변경" +msgstr "대문ìžë¡œ" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "줌 리셋" +msgstr "리셋" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "ì—러" @@ -7667,6 +7581,10 @@ msgid "Instance Scene(s)" msgstr "씬 ì¸ìŠ¤í„´ìŠ¤" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "ìžì‹ 씬 추가" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "스í¬ë¦½íЏ ì œê±°" @@ -7703,41 +7621,44 @@ msgid "Save New Scene As..." msgstr "새 ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" +"\"editable_instance\"를 비활설화 하면 ë…¸ë“œì˜ ëª¨ë“ ì†ì„±ì´ 기본 값으로 ë˜ëŒì•„ê°‘" +"니다." + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "ìžì‹ë…¸ë“œ 편집 가능" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "Placeholderë¡œì¨ ë¡œë“œ" +msgstr "Placeholderë¡œì¨ ë¶ˆëŸ¬ì˜¤ê¸°" #: editor/scene_tree_dock.cpp msgid "Make Local" msgstr "로컬로 만들기" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "노드 ìƒì„±" +msgstr "루트 노드 만들기:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "씬" +msgstr "2D 씬" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "씬" +msgstr "3D 씬" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "ìƒì† 지우기" +msgstr "ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "노드 잘ë¼ë‚´ê¸°" +msgstr "커스텀 노드" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7779,6 +7700,10 @@ msgid "Clear Inheritance" msgstr "ìƒì† 지우기" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "문서 열기" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "노드 ì‚ì œ" @@ -7787,17 +7712,16 @@ msgid "Add Child Node" msgstr "ìžì‹ 노드 추가" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "ìžì‹ 씬 추가" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "타입 변경" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "스í¬ë¦½íЏ 확장" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "새로운 씬 루트" +msgstr "씬 루트 만들기" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7817,7 +7741,7 @@ msgstr "ì‚ì œ (í™•ì¸ ì—†ìŒ)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "새 노드 추가/ìƒì„±" +msgstr "새 노드 추가/만들기" #: editor/scene_tree_dock.cpp msgid "" @@ -7828,7 +7752,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "ì„ íƒëœ ë…¸ë“œì— ìƒˆë¡œìš´ 스í¬ë¦½íŠ¸ë¥¼ ìƒì„±í•˜ê±°ë‚˜ 기존 스í¬ë¦½íŠ¸ë¥¼ 로드합니다." +msgstr "ì„ íƒëœ ë…¸ë“œì— ìƒˆë¡œìš´ 스í¬ë¦½íŠ¸ë¥¼ ìƒì„±í•˜ê±°ë‚˜ 기존 스í¬ë¦½íŠ¸ë¥¼ 불러옵니다." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." @@ -7847,7 +7771,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "ìƒì†ì„ ì§€ìš°ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "ë³´ì´ê¸° í† ê¸€" @@ -7856,13 +7779,12 @@ msgid "Node configuration warning:" msgstr "노드 ë°°ì—´ ê²½ê³ :" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"노드가 커넥션과 ê·¸ë£¹ì„ ê°–ê³ ìžˆìŠµë‹ˆë‹¤.\n" -"í´ë¦í•´ì„œ ì‹œê·¸ë„ ë…ì„ ë³´ì‹ì‹œì˜¤." +"노드가 ì—°ê²°ê³¼ ê·¸ë£¹ì„ ê°–ê³ ìžˆìŠµë‹ˆë‹¤.\n" +"í´ë¦í•´ì„œ ì‹œê·¸ë„ ë…ì„ ì—¬ì„¸ìš”." #: editor/scene_tree_editor.cpp msgid "" @@ -7881,37 +7803,36 @@ msgstr "" "í´ë¦í•´ì„œ 그룹 ë…ì„ ë³´ì‹ì‹œì˜¤." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "스í¬ë¦½íЏ 열기" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "노드가 ìž ê²¨ìžˆìŠµë‹ˆë‹¤.\n" -"í´ë¦í•˜ë©´ ìž ê¸ˆ í•´ì œë©ë‹ˆë‹¤" +"í´ë¦í•˜ì—¬ ìž ê¸ˆì„ í‘¸ì„¸ìš”." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "ìžì‹ë“¤ì„ ì„ íƒí• 수 없습니다.\n" -"í´ë¦í•˜ë©´ ì„ íƒí• 수 있게 ë©ë‹ˆë‹¤" +"í´ë¦í•˜ë©´ ì„ íƒí• 수 있게 ë©ë‹ˆë‹¤." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "ë³´ì´ê¸° í† ê¸€" +msgstr "가시성 í† ê¸€" #: editor/scene_tree_editor.cpp msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayerê°€ ê³ ì •ë˜ì—ˆìŠµë‹ˆë‹¤.\n" +"í´ë¦í•´ì„œ ê³ ì •ì„ í’‰ë‹ˆë‹¤." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7935,7 +7856,7 @@ msgstr "노드 ì„ íƒ" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" -msgstr "'%s' 템플릿 로드 ì—러" +msgstr "'%s' 템플릿 불러오기 ì—러" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -7950,15 +7871,18 @@ msgid "N/A" msgstr "해당 ì—†ìŒ" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "스í¬ë¦½íЏ ì—디터 열기" +msgstr "스í¬ë¦½íЏ 열기/위치 ì„ íƒ" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "경로가 비어 있ìŒ" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì—ˆìŠµë‹ˆë‹¤" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "경로가 ë¡œì»¬ì´ ì•„ë‹˜" @@ -8012,7 +7936,7 @@ msgstr "새 스í¬ë¦½íЏ íŒŒì¼ ë§Œë“¤ê¸°" #: editor/script_create_dialog.cpp msgid "Load existing script file" -msgstr "기존 스í¬ë¦½íЏ íŒŒì¼ ë¡œë“œí•˜ê¸°" +msgstr "기존 스í¬ë¦½íЏ íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸°" #: editor/script_create_dialog.cpp msgid "Language" @@ -8047,20 +7971,8 @@ msgid "Bytes:" msgstr "ë°”ì´íЏ:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "ê²½ê³ " - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "ì—러:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "소스:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "함수:" +msgid "Stack Trace" +msgstr "ìŠ¤íƒ ì¶”ì " #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8091,18 +8003,6 @@ msgid "Stack Frames" msgstr "ìŠ¤íƒ í”„ë ˆìž„" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "변수" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "ì—러:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "ìŠ¤íƒ ì¶”ì (해당ë˜ëŠ” 경우):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "프로파ì¼ëŸ¬" @@ -8191,9 +8091,8 @@ msgid "Change Camera Size" msgstr "Camera í¬ê¸° 변경" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "알림 범위 변경" +msgstr "알림 AABB 변경" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8220,12 +8119,10 @@ msgid "Change Capsule Shape Height" msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë³€ê²½" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "ìº¡ìŠ ëª¨ì–‘ 반경 변경" +msgstr "ìº¡ìŠ ëª¨ì–‘ 반지름 변경" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë³€ê²½" @@ -8234,24 +8131,20 @@ msgid "Change Ray Shape Length" msgstr "ê´‘ì„ ëª¨ì–‘ ê¸¸ì´ ë³€ê²½" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Light 반경 변경" +msgstr "ì›ê¸°ë‘¥ 반지름 변경" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë³€ê²½" +msgstr "ì›ê¸°ë‘¥ ë†’ì´ ë³€ê²½" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "구체 모양 반경 변경" +msgstr "í† ëŸ¬ìŠ¤ ë‚´ë¶€ 반지름 변경" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Light 반경 변경" +msgstr "í† ëŸ¬ìŠ¤ 외부 반지름 변경" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8267,7 +8160,7 @@ msgstr "현재 엔트리 ì œê±°" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "ë”블 í´ë¦ìœ¼ë¡œ 새로운 엔트리를 ìƒì„±" +msgstr "ë”블 í´ë¦ìœ¼ë¡œ 새로운 엔트리를 만들기" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -8307,7 +8200,7 @@ msgstr "GD네ì´í‹°ë¸Œ" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" -msgstr "ìŠ¤í… ì¸ìžê°€ ì œë¡œìž…ë‹ˆë‹¤!" +msgstr "ìŠ¤í… ì¸ìˆ˜ê°€ ì œë¡œìž…ë‹ˆë‹¤!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -8328,7 +8221,7 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—†ìŒ)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" -"ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—서 스í¬ë¦½íŠ¸ë¥¼ ë¡œë“œí• ìˆ˜ ì—†ìŒ)" +"ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—서 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" @@ -8372,9 +8265,8 @@ msgid "GridMap Delete Selection" msgstr "그리드맵 ì„ íƒ ì‚ì œ" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "그리드맵 ì„ íƒ ì‚ì œ" +msgstr "그리드맵 채우기 ì„ íƒ" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8457,9 +8349,8 @@ msgid "Clear Selection" msgstr "ì„ íƒ ì§€ìš°ê¸°" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "ëª¨ë‘ ì„ íƒ" +msgstr "채우기 ì„ íƒ" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8523,19 +8414,15 @@ msgstr "ê²½ê³ " #: modules/mono/editor/mono_bottom_panel.cpp msgid "View log" -msgstr "ê¸°ë¡ ë³´ê¸°" +msgstr "로그 보기" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "ë‚´ë¶€ 예외 ìŠ¤íƒ ì¶”ì ì˜ ë" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "굽기!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "네비게ì´ì…˜ 메시 만들기." +msgid "Bake NavMesh" +msgstr "NavMesh ë² ì´í¬" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8624,7 +8511,7 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì‹œí€€ìŠ¤ ì¶œë ¥ì„ ë°˜í™˜í•œ 노드: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" msgstr "" -"시퀀스 비트를 발견했지만 스íƒì•ˆì˜ 노드ì—는 없습니다, 버그를 ì œë³´í•˜ì„¸ìš”!" +"시퀀스 비트를 발견했지만 ìŠ¤íƒ ì•ˆì˜ ë…¸ë“œì—는 없습니다, 버그 리í¬íŠ¸ë¥¼ 해주세요!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -8632,15 +8519,15 @@ msgstr "ìŠ¤íƒ ê¹Šì´ë¡œ 오버플로우한 스íƒ: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" -msgstr "ì‹œê·¸ë„ ì¸ìž 변경" +msgstr "ì‹œê·¸ë„ ì¸ìˆ˜ 변경" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument Type" -msgstr "ì¸ìž 타입 변경" +msgstr "ì¸ìˆ˜ 타입 변경" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument name" -msgstr "ì¸ìž ì´ë¦„ 변경" +msgstr "ì¸ìˆ˜ ì´ë¦„ 변경" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" @@ -8705,30 +8592,30 @@ msgstr "비주얼 스í¬ë¦½íЏ 노드 ë³µì œ" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"%s 를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 게터를 드ëží•©ë‹ˆë‹¤. 시프트를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ ì‹œê·¸ë‹ˆ" -"처를 드ëží•©ë‹ˆë‹¤." +"%s 를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ Getter를 드ë¡í•©ë‹ˆë‹¤. Shift를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ ì‹œê·¸" +"니처를 드ë¡í•©ë‹ˆë‹¤." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"ì»¨íŠ¸ë¡¤ì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 게터를 드ëží•©ë‹ˆë‹¤. 시프트를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ ì‹œ" -"그니처를 드ëží•©ë‹ˆë‹¤." +"Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ Getter를 드ë¡í•©ë‹ˆë‹¤. Shift를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ ì‹œê·¸" +"니처를 드ë¡í•©ë‹ˆë‹¤." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "%s 를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 ì°¸ê³ ë¥¼ ì¤ë‹ˆë‹¤." +msgstr "%s 를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 참조를 드ë¡í•©ë‹ˆë‹¤." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "ì»¨íŠ¸ë¡¤ì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 ì°¸ê³ ë¥¼ ì¤ë‹ˆë‹¤." +msgstr "Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 참조를 드ë¡í•©ë‹ˆë‹¤." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." -msgstr "%s를 ëˆ„ë¥´ê³ ìžˆë¥´ë©´ 변수 세터를 드ëží•©ë‹ˆë‹¤." +msgstr "%s를 ëˆ„ë¥´ê³ ìžˆë¥´ë©´ 변수 Setter를 드ë¡í•©ë‹ˆë‹¤." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "ì»¨íŠ¸ë¡¤ì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 변수 세터를 드ëží•©ë‹ˆë‹¤." +msgstr "Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 변수 Setter를 드ëží•©ë‹ˆë‹¤." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" @@ -8740,11 +8627,11 @@ msgstr "트리ì—서 노드 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "게터 ì†ì„± 추가" +msgstr "Getter ì†ì„± 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "세터 ì†ì„± 추가" +msgstr "Setter ì†ì„± 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" @@ -8763,14 +8650,12 @@ msgid "Connect Nodes" msgstr "노드 ì—°ê²°" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "노드 ì—°ê²°" +msgstr "노드 ë°ì´í„° ì—°ê²°" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "노드 ì—°ê²°" +msgstr "노드 시퀀스 ì—°ê²°" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8817,16 +8702,20 @@ msgid "Base Type:" msgstr "기본 타입:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "멤버:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" -msgstr "가능한 노드:" +msgstr "사용 가능한 노드:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit graph" -msgstr "그래프를 편집하기 위한 함수를 ì„ íƒí•˜ê±°ë‚˜ ìƒì„±" +msgstr "그래프를 편집하기 위한 함수를 ì„ íƒí•˜ê±°ë‚˜ 만들기" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Signal Arguments:" -msgstr "ì‹œê·¸ë„ ì¸ìž 편집:" +msgstr "ì‹œê·¸ë„ ì¸ìˆ˜ 편집:" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" @@ -8853,9 +8742,8 @@ msgid "Paste Nodes" msgstr "노드 붙여넣기" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "멤버" +msgstr "멤버 편집" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8887,11 +8775,11 @@ msgstr "노드 %s ì•ˆì— ì¸ë±ìФ ì†ì„± ì´ë¦„ '%s' 는 ìœ íš¨í•˜ì§€ 않습니 #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr ": ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìž 타입: " +msgstr ": ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìˆ˜ 타입: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " -msgstr ": ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìž: " +msgstr ": ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìˆ˜: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " @@ -8915,17 +8803,16 @@ msgstr "" "(error)ê°€ 아니면 안ë©ë‹ˆë‹¤." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "비주얼 스í¬ë¦½íЏ 노드 ì œê±°" +msgstr "비주얼 스í¬ë¦½íЏ 검색" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "얻기" +msgid "Get %s" +msgstr "Get %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Set %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8976,15 +8863,14 @@ msgstr "" "ìž‘í•˜ê³ , 나머지는 무시ë©ë‹ˆë‹¤." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì„ ê°–ëŠ” ìžì‹ 노드가 없어서, 공간ìƒì—서 ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없습니" -"다.\n" -"CollisionShape2D ë˜ëŠ” CollisionPolygon2Dì„ ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜" +"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì„ ê°–ëŠ” ìžì‹ 노드가 없습니다, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ìž‘ìš© " +"í• ìˆ˜ 없습니다.\n" +"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜" "세요." #: scene/2d/collision_polygon_2d.cpp @@ -9019,6 +8905,14 @@ msgstr "" "CollisionShape2Dê°€ ê¸°ëŠ¥ì„ í•˜ê¸° 위해서는 반드시 ëª¨ì–‘ì´ ì œê³µë˜ì–´ì•¼ 합니다. 모" "ì–‘ 리소스를 만드세요!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"CPUParticles2D ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Particles Animation\"ì´ í™œì„±í™”ëœ " +"CanvasItemMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9065,6 +8959,14 @@ msgstr "" "파티í´ì„ ì²˜ë¦¬í• ë©”í…Œë¦¬ì–¼ì´ í• ë‹¹ë˜ì§€ 않았기ì—, 아무런 í–‰ë™ë„ ì¸ì‡„ë˜ì§€ 않았습니" "다." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Particles2D ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Particles Animation\"ì´ í™œì„±í™”ëœ " +"CanvasItemMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ë…¸ë“œë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." @@ -9085,16 +8987,18 @@ msgstr "Path ì†ì„±ì€ ìœ íš¨í•œ Node2D 노드를 가리켜야 합니다." #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "ì´ Bone2D ì²´ì¸ì€ Skeleton2D 노드ì—서 ë나야 합니다." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." -msgstr "" +msgstr "Bone2D는 Skeleton2D나 다른 Bone2Dê°€ 부모 노드로 있어야만 ìž‘ë™í•©ë‹ˆë‹¤." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"ì´ ë³¸ì— ì ì ˆí•œ íœ´ì‹ ìžì„¸ê°€ 없습니다. Skeleton2D 노드로 ê°€ 휴ì‹ìœ¼ë¡œ í• ìžì„¸ë¥¼ " +"ì„¤ì •í•˜ì„¸ìš”." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9157,15 +9061,14 @@ msgid "Lighting Meshes: " msgstr "ë©”ì‹œì— ë¼ì´íŒ… 중: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì„ ê°–ëŠ” ìžì‹ 노드가 없어서, 공간ìƒì—서 ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없습니" -"다.\n" -"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜ì„¸" +"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì„ ê°–ëŠ” ìžì‹ 노드가 없습니다, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ìž‘ìš© " +"í• ìˆ˜ 없습니다.\n" +"CollisionShape ë˜ëŠ” CollisionPolygon를 ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜ì„¸" "ìš”." #: scene/3d/collision_polygon.cpp @@ -9200,6 +9103,19 @@ msgstr "" "CollisionShapeê°€ ê¸°ëŠ¥ì„ í•˜ê¸° 위해서는 ëª¨ì–‘ì´ ì œê³µë˜ì–´ì•¼ 합니다. 모양 리소스" "를 만드세요!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "ì§€ì •ëœ ë©”ì‹œê°€ 없으므로 ì•„ë¬´ê²ƒë„ ë³´ì´ì§€ 않습니다." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"CPUParticles ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Billboard Particles\"ì´ í™œì„±í™”ëœ " +"SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "메시 구분중" @@ -9223,6 +9139,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "ë©”ì‹œë“¤ì„ íŒ¨ìŠ¤ë¥¼ 그리ë„ë¡ í• ë‹¹í•˜ì§€ 않았으므로 ë³´ì´ì§€ 않습니다." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"Particles ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Billboard Particles\"ì´ í™œì„±í™”ëœ " +"SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "OrientedPathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "OrientedPathFollow는 부모 Pathì—서 벡터를 활성화해야 합니다." + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9256,18 +9192,16 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "ì´ ë°”ë””ëŠ” 메시를 ì„¤ì •í• ë•Œ 까지 무시ë©ë‹ˆë‹¤" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"(ìºë¦í„°ë‚˜ 리지드 모드ì—서) RigidBodyì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™ì•ˆ " -"í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n" -"ëŒ€ì‹ ìžì‹ ì¶©ëŒ í˜•íƒœì˜ í¬ê¸°ë¥¼ 변경해보세요." +"SoftBodyì˜ í¬ê¸° ë³€ê²½ì€ ì‹¤í–‰ ì¤‘ì— ë¬¼ë¦¬ ì—”ì§„ì— ì˜í•´ 무시ë©ë‹ˆë‹¤.\n" +"ëŒ€ì‹ ìžì‹ì˜ ì¶©ëŒ í¬ê¸°ë¥¼ 변경하세요." #: scene/3d/sprite_3d.cpp msgid "" @@ -9287,45 +9221,42 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "BlendTree 노드 '%s' ì—서, ì• ë‹ˆë©”ì´ì…˜ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ë„구" +msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "노드 '%s' ì—서, ìœ íš¨í•˜ì§€ ì•Šì€ ì• ë‹ˆë©”ì´ì…˜: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ì—러: ìœ íš¨í•˜ì§€ ì•Šì€ ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„!" +msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì• ë‹ˆë©”ì´ì…˜: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "'%s'와 '%s'ì˜ ì—°ê²° í•´ì œ" +msgstr "노드 '%s' ì˜ '%s' ìž…ë ¥ì— ì•„ë¬´ê²ƒë„ ì—°ê²°ë˜ì§€ 않ìŒ." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "ê·¸ëž˜í”„ì˜ ë£¨íŠ¸ AnimationNodeê°€ ì„¤ì •ë˜ì§€ 않았습니다." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"ì• ë‹ˆë©”ì´ì…˜ íŽ¸ì§‘ì„ ìœ„í•´ì„œëŠ” 씬 트리ì—서 AnimationPlayer를 ì„ íƒí•´ì•¼ 합니다." +"ì• ë‹ˆë©”ì´ì…˜ì„ ê°–ê³ ìžˆëŠ” AnimationPlayer ë…¸ë“œì˜ ê²½ë¡œê°€ ì„¤ì •ë˜ì§€ 않았습니다." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"AnimationPlayerì— ëŒ€í•œ 경로 ì„¤ì •ì´ AnimationPlayer 노드를 í–¥í•˜ê³ ìžˆì§€ 않습니" +"다." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 ìœ íš¨í•˜ì§€ 않습니다." +msgstr "AnimationPlayer 루트가 ìœ íš¨í•œ 노드가 아닙니다." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9343,10 +9274,6 @@ msgstr "ê²½ê³ !" msgid "Please Confirm..." msgstr "확ì¸í•´ì£¼ì„¸ìš”..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "ì´ í´ë” ì„ íƒ" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9354,7 +9281,11 @@ msgid "" "hide upon running." msgstr "" "Popupì€ popup() ë˜ëŠ” 기타 popup*() 함수를 호출하기 ì „ê¹Œì§€ëŠ” 기본ì 으로 숨겨집" -"니다. í™”ë©´ì„ íŽ¸ì§‘í•˜ëŠ” ë™ì•ˆ 보여지ë„ë¡ í• ìˆ˜ëŠ” 있으나, 실행시ì—는 숨겨집니다." +"니다. 편집하는 ë™ì•ˆ 보여지ë„ë¡ í• ìˆ˜ëŠ” 있으나, 실행 시ì—는 숨겨집니다." + +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "exp_editì´ ì°¸ì´ë¼ë©´ min_value는 반드시 > 0 ì´ì–´ì•¼ 합니다." #: scene/gui/scroll_container.cpp msgid "" @@ -9363,8 +9294,8 @@ msgid "" "minimum size manually." msgstr "" "ScrollContainer는 ë‹¨ì¼ ìžì‹ ì»¨íŠ¸ë¡¤ì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n" -"컨테ì´ë„ˆë¥¼ ìžì‹(VBox,HBox,등)으로 사용하거나, Controlì„ ìˆ˜ë™ìœ¼ë¡œ ì§€ì •í•œ 최소 " -"수치로 ì„¤ì •í•´ì„œ 사용하세요." +"컨테ì´ë„ˆë¥¼ ìžì‹ (VBox,HBox,등)으로 사용하거나, Controlì„ ìˆ˜ë™ìœ¼ë¡œ ì§€ì •í•œ 최" +"소 수치로 ì„¤ì •í•´ì„œ 사용하세요." #: scene/gui/tree.cpp msgid "(Other)" @@ -9375,8 +9306,8 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"Project Setings(ë Œë”ë§ -> 환경 -> 기본 환경)ì— ì§€ì •ëœ ê¸°ë³¸ í™˜ê²½ì€ ë¡œë“œí• ìˆ˜ " -"없습니다." +"프로ì 트 ì„¤ì • (Rendering -> Environment -> Default Environment)ì— ì§€ì •ëœ ê¸°" +"본 í™˜ê²½ì€ ë¶ˆëŸ¬ì˜¬ 수 없습니다." #: scene/main/viewport.cpp msgid "" @@ -9385,7 +9316,7 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"ë·°í¬íŠ¸ê°€ ë Œë” ëŒ€ìƒìœ¼ë¡œ ì„¤ì •ë˜ì§€ 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ìƒì— ì§ì ‘ 표" +"ë·°í¬íŠ¸ê°€ ë Œë” ëŒ€ìƒìœ¼ë¡œ ì„¤ì •ë˜ì§€ 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ ìƒì— ì§ì ‘ 표" "ì‹œí•˜ê³ ìž í• ê²½ìš°, í¬ê¸°ë¥¼ 얻기 위해서 Controlì˜ ìžì‹ 노드로 만들어야 합니다. " "ê·¸ë ‡ì§€ ì•Šì„ ê²½ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 RenderTarget으로 ì„¤ì •í•˜ê³ ë‚´ë¶€ì " "ì¸ í…스ì³ë¥¼ 다른 ë…¸ë“œì— í• ë‹¹í•´ì•¼ 합니다." @@ -9407,31 +9338,141 @@ msgid "Invalid font size." msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í°íЏ í¬ê¸°." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "ìž…ë ¥ 추가" +msgstr "ìž…ë ¥" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<ì—†ìŒ>" +msgstr "ì—†ìŒ" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ ì†ŒìŠ¤!" +msgstr "ì…°ì´ë”ì— ìœ íš¨í•˜ì§€ ì•Šì€ ì†ŒìŠ¤." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "í•¨ìˆ˜ì— ë°°ì¹˜í•¨." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "ê· ì¼í•˜ê²Œ 배치함." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Varyings는 ì˜¤ì§ ë²„í…스 함수ì—서만 ì§€ì •í• ìˆ˜ 있습니다." + +#~ msgid "Zoom:" +#~ msgstr "확대:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "\" ì—서 ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ" + +#~ msgid "Class List:" +#~ msgstr "í´ëž˜ìФ 목ë¡:" + +#~ msgid "Search Classes" +#~ msgstr "í´ëž˜ìФ 검색" + +#~ msgid "Public Methods" +#~ msgstr "공개 메서드" + +#~ msgid "Public Methods:" +#~ msgstr "공개 메서드:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI 테마 í•목" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI 테마 í•목:" + +#~ msgid "Property: " +#~ msgstr "ì†ì„±: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "í´ë”를 ì¦ê²¨ì°¾ê¸°ë¡œ ì„¤ì •." + +#~ msgid "Show current scene file." +#~ msgstr "현재 씬 파ì¼ì„ 보여줌." + +#~ msgid "Enter tree-view." +#~ msgstr "트리 보기로 가기." + +#~ msgid "Whole words" +#~ msgstr "ì „ì²´ 단어" + +#~ msgid "Match case" +#~ msgstr "ëŒ€ì†Œë¬¸ìž êµ¬ë¶„" + +#~ msgid "Filter: " +#~ msgstr "í•„í„°: " + +#~ msgid "Ok" +#~ msgstr "확ì¸" + +#~ msgid "Show In File System" +#~ msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기" + +#~ msgid "Search the class hierarchy." +#~ msgstr "í´ëž˜ìФ 계층 검색." + +#~ msgid "Search in files" +#~ msgstr "파ì¼ì—서 검색" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "내장 스í¬ë¦½íŠ¸ëŠ” 종ì†ëœ ì”¬ì´ ì—´ë¦° ìƒíƒœì—서만 íŽ¸ì§‘ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤" + +#~ msgid "Convert To Uppercase" +#~ msgstr "대문ìžë¡œ 변환" + +#~ msgid "Convert To Lowercase" +#~ msgstr "소문ìžë¡œ 변환" + +#~ msgid "Snap To Floor" +#~ msgstr "ë°”ë‹¥ì— ìŠ¤ëƒ…" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "0ë„ íšŒì „" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "90ë„ íšŒì „" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "180ë„ íšŒì „" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "270ë„ íšŒì „" + +#~ msgid "Warning" +#~ msgstr "ê²½ê³ " + +#~ msgid "Error:" +#~ msgstr "ì—러:" + +#~ msgid "Source:" +#~ msgstr "소스:" + +#~ msgid "Function:" +#~ msgstr "함수:" + +#~ msgid "Variable" +#~ msgstr "변수" + +#~ msgid "Errors:" +#~ msgstr "ì—러:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "ìŠ¤íƒ ì¶”ì (해당ë˜ëŠ” 경우):" + +#~ msgid "Bake!" +#~ msgstr "굽기!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "네비게ì´ì…˜ 메시 만들기." + +#~ msgid "Get" +#~ msgstr "Get" #~ msgid "Change Scalar Constant" #~ msgstr "Scalar ìƒìˆ˜ 변경" @@ -9455,7 +9496,7 @@ msgstr "" #~ msgstr "RGB ì—°ì‚°ìž ë³€ê²½" #~ msgid "Toggle Rot Only" -#~ msgstr "íšŒì „ë§Œ í† ê¸€" +#~ msgstr "ì˜¤ì§ íšŒì „ í† ê¸€" #~ msgid "Change Scalar Function" #~ msgstr "Scalar 함수 변경" @@ -9924,9 +9965,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "ì•„í‹€ë¼ìФ 서브 í…스ì³ë¥¼ ì €ìž¥í• ìˆ˜ 없습니다:" -#~ msgid "Exporting for %s" -#~ msgstr "%s 내보내기" - #~ msgid "Setting Up..." #~ msgstr "ì„¤ì • 중..." @@ -10025,9 +10063,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "소스 í°íЏ:" -#~ msgid "Source Font Size:" -#~ msgstr "소스 í°íЏ í¬ê¸°:" - #~ msgid "Dest Resource:" #~ msgstr "리소스 경로:" @@ -10104,9 +10139,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "시작(ì´ˆ)" -#~ msgid "Filters" -#~ msgstr "í•„í„°" - #~ msgid "Source path is empty." #~ msgstr "소스 경로가 비어있습니다." @@ -10378,15 +10410,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "ìŠ¤í…Œë ˆì˜¤" -#~ msgid "Pitch" -#~ msgstr "피치" - #~ msgid "Window" #~ msgstr "윈ë„ìš°" -#~ msgid "Move Right" -#~ msgstr "오른쪽으로 ì´ë™" - #~ msgid "Scaling to %s%%." #~ msgstr "%s%%로 í¬ê¸° 변경." @@ -10753,9 +10779,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "프로ì 트 내보내기" -#~ msgid "Export Preset:" -#~ msgstr "프리셋 내보내기:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstanceê°€ BakedLight 리소스를 ê°€ì§€ê³ ìžˆì§€ 않습니다." diff --git a/editor/translations/lt.po b/editor/translations/lt.po index f646555da2..954bd17af1 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -24,7 +24,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -389,8 +389,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -404,11 +403,11 @@ msgid "Delete Selection" msgstr "Panaikinti pasirinkimÄ…" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -511,11 +510,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -548,11 +547,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Priartinti" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linija:" @@ -585,6 +583,7 @@ msgstr "PridÄ—ti" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -664,7 +663,7 @@ msgid "Edit Connection: " msgstr "" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -719,17 +718,14 @@ msgstr "Naujausi:" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "ApraÅ¡ymas:" @@ -786,9 +782,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -818,7 +815,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -877,14 +874,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1056,8 +1045,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikuoti" @@ -1224,8 +1212,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1295,24 +1284,30 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "File Exists, Overwrite?" +msgid "Select Current Folder" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "File Exists, Overwrite?" msgstr "" +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select This Folder" +msgstr "Pasirinkite Nodus, kuriuos norite importuoti" + #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "Atidaryti" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1348,7 +1343,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1406,8 +1402,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1423,24 +1418,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1457,27 +1439,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1505,8 +1487,14 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" -msgstr "" +#, fuzzy +msgid "Class Description" +msgstr "ApraÅ¡ymas:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1520,12 +1508,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp msgid "" @@ -1534,12 +1524,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp msgid "" @@ -1547,11 +1539,54 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signalai" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstanta" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1585,6 +1620,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1639,10 +1679,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1870,6 +1920,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1910,6 +1966,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1992,7 +2053,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2021,7 +2082,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2058,6 +2119,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2165,10 +2227,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2262,21 +2320,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2416,7 +2474,7 @@ msgstr "Kadro %" msgid "Physics Frame %" msgstr "Fizikos Kadro %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "TrukmÄ—:" @@ -2441,7 +2499,7 @@ msgstr "TrukmÄ—:" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2453,7 +2511,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2461,6 +2519,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2478,10 +2550,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2490,7 +2558,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2776,6 +2845,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "MÄ—gstamiausi:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2813,7 +2887,7 @@ msgstr "Duplikuoti" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2852,27 +2926,20 @@ msgid "Duplicating folder:" msgstr "Duplikuoti" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" -msgstr "" +#, fuzzy +msgid "Add to favorites" +msgstr "MÄ—gstamiausi:" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp @@ -2883,12 +2950,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Duplikuoti" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp msgid "New Script..." msgstr "" @@ -2896,6 +2971,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2916,11 +2999,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2928,20 +3011,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2958,28 +3033,21 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "Filtrai..." #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filtrai..." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2996,6 +3064,10 @@ msgid "Cancel" msgstr "AtÅ¡aukti" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3153,17 +3225,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3404,6 +3471,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3780,10 +3852,6 @@ msgid "Amount:" msgstr "Kiekis:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4108,6 +4176,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4171,6 +4243,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "TimeScale Nodas" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4265,6 +4342,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4315,6 +4396,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4749,8 +4834,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4779,6 +4863,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4848,11 +4937,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5184,22 +5273,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5229,6 +5318,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5328,11 +5421,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5403,7 +5492,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5411,10 +5500,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5449,16 +5534,7 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +msgid "Search Results" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5471,6 +5547,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5557,11 +5637,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5578,19 +5658,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5599,15 +5671,15 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrai..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5699,6 +5771,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5863,6 +5943,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5963,10 +6047,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6366,6 +6446,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Panaikinti pasirinkimÄ…" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6411,25 +6496,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Panaikinti pasirinkimÄ…" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Animacija: Pakeisti TransformacijÄ…" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6457,7 +6547,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6473,7 +6563,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6549,6 +6639,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6557,6 +6655,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6615,6 +6717,15 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Importuoti iÅ¡ Nodo:" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7067,10 +7178,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7204,10 +7311,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7294,7 +7397,7 @@ msgid "Step" msgstr "Žingsnis(iai):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7303,7 +7406,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7344,7 +7447,7 @@ msgstr "" msgid "Reset" msgstr "Atstatyti PriartinimÄ…" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7403,6 +7506,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7439,6 +7546,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7511,15 +7624,15 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)" +msgid "Open documentation" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Add Child Node" +msgid "Delete Node(s)" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp @@ -7527,6 +7640,11 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Atidaryti Skriptų Editorių" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" msgstr "" @@ -7675,6 +7793,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7763,19 +7885,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7807,18 +7917,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8237,11 +8335,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8513,6 +8607,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8612,11 +8710,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8694,6 +8792,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8732,6 +8836,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8849,6 +8959,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8870,6 +8990,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8902,7 +9040,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8976,10 +9114,6 @@ msgstr "Ä®spÄ—jimas!" msgid "Please Confirm..." msgstr "PraÅ¡ome Patvirtinti..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8987,6 +9121,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9053,6 +9191,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Priartinti" + #~ msgid "Disabled" #~ msgstr "IÅ¡jungta" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 7dc72def39..07a4ac0444 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-28 12:39+0000\n" +"PO-Revision-Date: 2018-10-11 13:29+0000\n" "Last-Translator: Gustavs Porietis (pg829-) <porietisgustavs@gmail.com>\n" "Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/" "godot/lv/>\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 3.1.1\n" +"X-Generator: Weblate 3.2.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -23,10 +23,10 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Nepietiekams skaits baitu lai dekodÄ“tu baitus vai nepareizs formÄts." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -50,7 +50,7 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Nepareizs arguments lai konstruÄ“tu '%s'" #: core/math/expression.cpp msgid "On call to '%s':" @@ -59,11 +59,11 @@ msgstr "" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "" +msgstr "Bezmaksas" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "BalancÄ“ts" #: editor/animation_bezier_editor.cpp msgid "Mirror" @@ -129,38 +129,36 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Audio atskaņoÅ¡anas celiņs" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "" +msgstr "AnimÄcijas atskaņoÅ¡anas celiņs" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "" +msgstr "Pievienot celiņu" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" msgstr "AnimÄcijas garums (sekundÄ“s)." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "AnimÄcijas tÄlummaiņa." +msgstr "AnimÄcijas cikls." #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" -msgstr "" +msgstr "Funkcijas:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "" +msgstr "Audio klipi:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "AnimÄcijas klipi:" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." @@ -172,7 +170,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" -msgstr "" +msgstr "InterpolÄcijas režīms" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" @@ -180,32 +178,31 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Remove this track." -msgstr "" +msgstr "Noņemt Å¡o celiņu." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Solis (ļi):" +msgstr "Laiks (s): " #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "" +msgstr "NepÄrtraukti" #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "" +msgstr "DiskrÄ“ta" #: editor/animation_track_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Trigeris" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "" +msgstr "Uztvert" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "TuvÄkais" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -214,7 +211,7 @@ msgstr "LineÄrs" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Kubisks" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" @@ -227,29 +224,27 @@ msgstr "" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "Ievietot atslÄ“gievietni" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "DublikÄta IzvÄ“le" +msgstr "DublicÄ“t atslÄ“gvietnes" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "IzdzÄ“st" +msgstr "IzdzÄ“st atslÄ“gvietnes" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "Noņemt animÄcijas celiņu" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Izveidot JAUNU celiņu priekÅ¡ %s un ievietot atslÄ“gievietni?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "Izveidot %d JAUNU celiņu un ievietot atslÄ“gievietni?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_plugin_settings.cpp @@ -263,23 +258,23 @@ msgstr "Izveidot" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Anim ievietot" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer nevar animÄ“t pats sevi, tikai citi spÄ“lÄ“tÄji." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Anim izveidot un ievietot" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "Anim ievietot celiņu un atslÄ“gvietni" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "Anim ievietot atslÄ“gievietni" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." @@ -292,18 +287,22 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Audio celiņu var tikai rÄdÄ«t uz Å¡Äda tipa mezgliem:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "AnimÄcijas celiņi var norÄdÄ«t tikai uz AnimationPlayer mezgliem." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "AnimÄcijas atskaņotÄjs nevar animÄ“t pats sevi, tikai citi spÄ“lÄ“tÄji." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Nevar izveidot jaunu celiņu bez saknes" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." @@ -319,19 +318,19 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Method not found in object: " -msgstr "" +msgstr "Metode netika atrasta objektÄ: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "Anim pÄrvietot atslÄ“gievietnes" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" -msgstr "" +msgstr "Starpliktuve ir tukÅ¡a" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Anim pÄrvietot atslÄ“gievietnes" #: editor/animation_track_editor.cpp msgid "" @@ -340,21 +339,20 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "RÄdÄ«t celiņus tikai no mezgliem izvÄ“lÄ“tajÄ kokÄ." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." msgstr "" +"SagrupÄ“t celiņus atkarÄ«bÄ no mezgliem vai rÄdÄ«t tos vienkÄrÅ¡Ä sarakstÄ." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Solis (ļi):" +msgstr "Solis (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "AnimÄcijas tÄlummaiņa." +msgstr "AnimÄcijas soļa vÄ“rtÄ«ba." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -363,54 +361,53 @@ msgstr "AnimÄcijas tÄlummaiņa." #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "" +msgstr "Rediģēt" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimÄcijas tÄlummaiņa." +msgstr "AnimÄcijas Ä«pašības." #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "" +msgstr "KopÄ“t celiņus" #: editor/animation_track_editor.cpp msgid "Paste Tracks" -msgstr "" +msgstr "IelÄ«mÄ“t celiņus" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "MÄ“roga IzvÄ“le" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "Skala No Kursora" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "DublikÄta IzvÄ“le" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "DublicÄ“t transponÄ“juÅ¡Äs" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "DublikÄta IzvÄ“le" +msgstr "DzÄ“st izvÄ“lÄ“tos" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Doties uz nÄkamo soli" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Doties uz iepriekšējo soli" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "OptimizÄ“t animÄciju" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" @@ -418,7 +415,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "IzvÄ“lies mezglu, kurÄ tiks animÄ“ta:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" @@ -426,7 +423,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Anim. OptimizÄ“tÄjs" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" @@ -508,11 +505,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -545,11 +542,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "PietuvinÄt" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Rinda:" @@ -580,6 +576,7 @@ msgstr "Pievienot" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -659,7 +656,7 @@ msgid "Edit Connection: " msgstr "" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -711,17 +708,14 @@ msgstr "Nesenie:" msgid "Search:" msgstr "MeklÄ“t:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Apraksts:" @@ -778,9 +772,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -814,7 +809,7 @@ msgstr "Kļūme lÄdÄ“jot:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "Ainu nevarÄ“ja ielÄdÄ“t dēļ neatrastiem dependencÄ«em:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -874,14 +869,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "Paldies no Godot sabiedrÄ«bas!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot DzinÄ“ja ieguldÄ«tÄji" @@ -1057,8 +1044,7 @@ msgid "Bus options" msgstr "Kopnes iestatÄ«jumi" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1229,8 +1215,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nosaukums" @@ -1300,24 +1287,30 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "File Exists, Overwrite?" +msgid "Select Current Folder" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "File Exists, Overwrite?" msgstr "" +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select This Folder" +msgstr "IzvÄ“lÄ“ties Å¡o Mapi" + #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "AtvÄ“rt" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1353,7 +1346,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1411,8 +1405,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1428,24 +1421,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1462,27 +1442,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1510,8 +1490,14 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" -msgstr "" +#, fuzzy +msgid "Class Description" +msgstr "Apraksts:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Apraksts:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1525,12 +1511,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "Apraksts:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "Apraksts:" #: editor/editor_help.cpp msgid "" @@ -1539,12 +1527,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "Apraksts:" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "Apraksts:" #: editor/editor_help.cpp msgid "" @@ -1552,11 +1542,53 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "SignÄli" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1590,6 +1622,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1644,10 +1681,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1875,6 +1922,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1915,6 +1968,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1997,8 +2055,9 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" -msgstr "" +#, fuzzy +msgid "Save All Scenes" +msgstr "SaglabÄt KÄ" #: editor/editor_node.cpp msgid "Close Scene" @@ -2026,7 +2085,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2064,6 +2123,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2171,10 +2231,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2268,21 +2324,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2419,7 +2475,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2443,7 +2499,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2455,7 +2511,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2463,6 +2519,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2480,10 +2550,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2492,7 +2558,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2773,6 +2840,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "FavorÄ«ti:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2808,7 +2880,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2845,39 +2917,40 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "FavorÄ«ti:" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2889,6 +2962,14 @@ msgstr "" msgid "New Resource..." msgstr "Resurs" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2909,33 +2990,25 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "MeklÄ“t:" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "MeklÄ“t:" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2952,27 +3025,20 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "NederÄ«gs nosaukums." #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2989,6 +3055,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp #, fuzzy msgid "Replace: " msgstr "Aizvietot" @@ -3148,17 +3218,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3397,6 +3462,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3767,10 +3837,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4092,6 +4158,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4155,6 +4225,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "MÄ“roga AttiecÄ«ba:" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4249,6 +4324,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4299,6 +4378,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4733,8 +4816,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4763,6 +4845,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4832,11 +4919,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5166,22 +5253,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5211,6 +5298,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5310,11 +5401,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5385,7 +5472,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5393,10 +5480,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5431,17 +5514,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +#, fuzzy +msgid "Search Results" +msgstr "MeklÄ“t:" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -5453,6 +5528,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Izveidot Funkciju" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5539,11 +5619,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5560,36 +5640,32 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Doties uz nÄkamo soli" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Doties uz iepriekšējo soli" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Izveidot Funkciju" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "Doties uz Rindu" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5680,6 +5756,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5844,6 +5928,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5943,10 +6031,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6346,6 +6430,11 @@ msgid "Fix Invalid Tiles" msgstr "NederÄ«gs nosaukums." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "DzÄ“st izvÄ“lÄ“tos" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6391,23 +6480,27 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Noņemt IzvÄ“lÄ“to" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip vertically" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Clear transform" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6437,7 +6530,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6453,7 +6546,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6529,6 +6622,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6537,6 +6638,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6595,6 +6700,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7043,10 +7156,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7180,10 +7289,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7268,7 +7373,7 @@ msgid "Step" msgstr "Solis (ļi):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7277,7 +7382,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7318,7 +7423,7 @@ msgstr "" msgid "Reset" msgstr "AtiestatÄ«t tÄlummaiņu" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7377,6 +7482,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7413,6 +7522,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7484,6 +7599,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7492,11 +7611,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7646,6 +7765,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Starpliktuve ir tukÅ¡a" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7734,19 +7858,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7778,18 +7890,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8208,11 +8308,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8482,6 +8578,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8580,11 +8680,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8662,6 +8762,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8700,6 +8806,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8817,6 +8929,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8836,6 +8958,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8868,7 +9008,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8940,10 +9080,6 @@ msgstr "BrÄ«dinÄjums!" msgid "Please Confirm..." msgstr "LÅ«dzu Apstipriniet..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "IzvÄ“lÄ“ties Å¡o Mapi" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8951,6 +9087,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9017,6 +9157,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "PietuvinÄt:" + #~ msgid "Disabled" #~ msgstr "AtspÄ“jots" diff --git a/editor/translations/ml.po b/editor/translations/ml.po new file mode 100644 index 0000000000..4981f02aae --- /dev/null +++ b/editor/translations/ml.po @@ -0,0 +1,9073 @@ +# Malayalam translation of the Godot Engine editor +# Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) +# This file is distributed under the same license as the Godot source code. +# christy james <jkuttu@gmail.com>, 2018. +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2018-08-28 18:40+0000\n" +"Last-Translator: christy james <jkuttu@gmail.com>\n" +"Language-Team: Malayalam <https://hosted.weblate.org/projects/godot-engine/" +"godot/ml/>\n" +"Language: ml\n" +"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 3.2-dev\n" + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "ആർഗàµà´¯àµà´®àµ†à´¨àµà´±àµ ടൈപàµà´ªàµ അസാധàµà´µà´¾à´£àµ മാറàµà´±à´‚വരàµà´¤àµà´¤à´¾àµ»(), TYPE_ * à´¸àµà´¥à´¿à´°à´¾à´™àµà´•à´™àµà´™àµ¾ ഉപയോഗികàµà´•àµà´•." + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#: modules/mono/glue/gd_glue.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "തെറàµà´±à´¾à´¯ ഫോർമാറàµà´±à´¿à´™àµ à´…à´²àµà´²àµ†à´™àµà´•ിൽ ഡീകàµà´•ോഡിങàµà´™à´¿à´¨àµ ആവശàµà´¯à´¤àµà´¤à´¿à´¨àµ ബെറàµà´±àµà´•ൾ ഇലàµà´²." + +#: core/math/expression.cpp +msgid "Invalid input %i (not passed) in expression" +msgstr "à´Žà´•àµà´¸àµà´ªàµà´°àµ†à´·à´¨à´¿àµ½ അസാധàµà´µà´¾à´¯ ഇൻപàµà´Ÿàµà´Ÿàµ %i (പാസാകàµà´•ിയിടàµà´Ÿà´¿à´²àµà´²)" + +#: core/math/expression.cpp +msgid "self can't be used because instance is null (not passed)" +msgstr "സെലàµà´«àµ ഉപയോഗികàµà´•ാൻ പറàµà´±à´¿à´²àµà´² കാരണം à´† ഇൻസàµà´±àµà´±àµ»à´¸àµ ശൂനàµà´¯à´‚ ആണൠ(പാസായിടàµà´Ÿà´¿à´²àµà´²)" + +#: core/math/expression.cpp +msgid "Invalid operands to operator %s, %s and %s." +msgstr "à´ªàµà´°à´µàµ¼à´¤àµà´¤à´•നൠചെയàµà´¯à´¾àµ» കൊടàµà´¤àµà´¤ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´™àµà´™àµ¾ %s,%s,%s അസാധàµà´µà´¾à´£àµ." + +#: core/math/expression.cpp +msgid "Invalid index of type %s for base type %s" +msgstr "" + +#: core/math/expression.cpp +msgid "Invalid named index '%s' for base type %s" +msgstr "" + +#: core/math/expression.cpp +msgid "Invalid arguments to construct '%s'" +msgstr "" + +#: core/math/expression.cpp +msgid "On call to '%s':" +msgstr "" + +#: editor/animation_bezier_editor.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/animation_bezier_editor.cpp +msgid "Balanced" +msgstr "" + +#: editor/animation_bezier_editor.cpp +msgid "Mirror" +msgstr "" + +#: editor/animation_bezier_editor.cpp +msgid "Insert Key Here" +msgstr "" + +#: editor/animation_bezier_editor.cpp +msgid "Duplicate Selected Key(s)" +msgstr "" + +#: editor/animation_bezier_editor.cpp +msgid "Delete Selected Key(s)" +msgstr "" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Time" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transition" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transform" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Call" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Property Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "3D Transform Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Call Method Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Bezier Curve Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Audio Playback Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation Playback Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Add Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation Length Time (seconds)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation Looping" +msgstr "" + +#: editor/animation_track_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Audio Clips:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Clips:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Toggle this track on/off." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Update Mode (How this property is set)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Interpolation Mode" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove this track." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Time (s): " +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Continuous" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Discrete" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Trigger" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Capture" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Nearest" +msgstr "" + +#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Cubic" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clamp Loop Interp" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Wrap Loop Interp" +msgstr "" + +#: editor/animation_track_editor.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Key(s)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Delete Key(s)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove Anim Track" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: editor/animation_track_editor.cpp editor/create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp +msgid "Create" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "AnimationPlayer can't animate itself, only other players." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Transform tracks only apply to Spatial-based nodes." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "" +"Audio tracks can only point to nodes of type:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation tracks can only point to AnimationPlayer nodes." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "An animation player can't animate itself, only other players." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Not possible to add a new track without a root" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a key." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Track is not of type Spatial, can't insert key" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a method key." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Method not found in object: " +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clipboard is empty" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "" +"This option does not work for Bezier editing, as it's only a single track." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Only show tracks from nodes selected in tree." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Group tracks by node or display them as plain list." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Snap (s): " +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation step value." +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_properties.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation properties." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Copy Tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Paste Tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Delete Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Next Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Previous Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Pick the node that will be animated:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Use Bezier Curves" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Select tracks to copy:" +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_properties.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Copy" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: editor/code_editor.cpp editor/editor_help.cpp +msgid "No Matches" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replaced %d occurrence(s)." +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Match Case" +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Whole Words" +msgstr "" + +#: editor/code_editor.cpp editor/rename_dialog.cpp +msgid "Replace" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Reset Zoom" +msgstr "" + +#: editor/code_editor.cpp +msgid "Warnings:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Font Size:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "" +"Target method not found! Specify a valid method or attach a script to target " +"Node." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp +#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Add" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp +msgid "Remove" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp editor/groups_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect '%s' from '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect all from signal: '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect..." +msgstr "" + +#: editor/connections_dialog.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect Signal: " +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Edit Connection: " +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from this signal?" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect All" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Edit..." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Go To Method" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Change %s Type" +msgstr "" + +#: editor/create_dialog.cpp editor/project_settings_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Create New %s" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Matches:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Description:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Path" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_property_selector.cpp +#: scene/gui/file_dialog.cpp +msgid "Open" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp editor/export_template_manager.cpp +msgid "Cannot remove:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Load failed due to missing dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Open Anyway" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/project_export.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Key" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Value" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: editor/editor_about.cpp +msgid "Godot Engine contributors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Founders" +msgstr "" + +#: editor/editor_about.cpp +msgid "Lead Developer" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Manager " +msgstr "" + +#: editor/editor_about.cpp +msgid "Developers" +msgstr "" + +#: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "" + +#: editor/editor_about.cpp +msgid "" +"Godot Engine relies on a number of thirdparty free and open source " +"libraries, all compatible with the terms of its MIT license. The following " +"is an exhaustive list of all such thirdparty components with their " +"respective copyright statements and license terms." +msgstr "" + +#: editor/editor_about.cpp +msgid "All Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Licenses" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Error opening package file, not in zip format." +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Uncompressing Assets" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Package Installer" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Speakers" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Rename Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Change Audio Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Bypass Effects" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Select Audio Bus Send" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio Bus, Drag and Drop to rearrange." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bypass" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + +#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Master bus can't be deleted!" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Duplicate Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save Audio Bus Layout As..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Location for New Layout..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Open Audio Bus Layout" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "There is no 'res://default_bus_layout.tres' file." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Invalid file, not an audio bus layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Create a new Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/editor_properties.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Load" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load an existing Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save As" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save this Bus Layout to a file." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/import_dock.cpp +msgid "Load Default" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load the default Bus Layout." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp +#: scene/gui/file_dialog.cpp +msgid "Path:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp +msgid "Name" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: editor/editor_data.cpp +msgid "Storing local changes..." +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating scene..." +msgstr "" + +#: editor/editor_data.cpp editor/editor_properties.cpp +msgid "[empty]" +msgstr "" + +#: editor/editor_data.cpp +msgid "[unsaved]" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Please select a base directory first" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp +msgid "Name:" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: editor/editor_export.cpp +msgid "Storing File:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Packing" +msgstr "" + +#: editor/editor_export.cpp platform/javascript/export/export.cpp +msgid "Template file not found:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select This Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Open in File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +#: editor/project_manager.cpp +msgid "Show in File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "New Folder..." +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp +msgid "Save" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp +#: editor/plugins/style_box_editor_plugin.cpp +msgid "Preview:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "(Re)Importing Assets" +msgstr "" + +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class:" +msgstr "" + +#: editor/editor_help.cpp editor/scene_tree_editor.cpp +msgid "Inherits:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Theme Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Theme Properties:" +msgstr "" + +#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations:" +msgstr "" + +#: editor/editor_help.cpp +msgid "enum " +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Online Tutorials:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There are currently no tutorials for this class, you can [color=$color][url=" +"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" +"url][/color]." +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Descriptions" +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Descriptions:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Descriptions" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Descriptions:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp +msgid "Set" +msgstr "" + +#: editor/editor_inspector.cpp +msgid "Set Multiple:" +msgstr "" + +#: editor/editor_log.cpp +msgid "Output:" +msgstr "" + +#: editor/editor_log.cpp editor/editor_profiler.cpp +#: editor/editor_properties.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/property_editor.cpp editor/scene_tree_dock.cpp +#: editor/script_editor_debugger.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Clear" +msgstr "" + +#: editor/editor_log.cpp +msgid "Clear Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Error saving resource!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Save Resource As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Can't open '%s'. The file could have been moved or deleted." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a tree root." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " +"be satisfied." +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This is a remote object so changes to it will not be kept.\n" +"Please read the documentation relevant to debugging to better understand " +"this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Script..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Close" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to '%s' before closing?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "No" +msgstr "" + +#: editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a root node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a selected node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Run Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to the following scene(s) before quitting?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to enable addon plugin at: '%s' parsing of config failed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' Base type is not EditorPlugin." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s' Script is not in tool mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Scene '%s' was automatically imported, so it can't be modified.\n" +"To make changes to it, a new inherited scene can be created." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: editor/editor_node.cpp editor/import_dock.cpp +#: editor/script_create_dialog.cpp +msgid "Default" +msgstr "" + +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play This Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files or folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files" +msgstr "" + +#: editor/editor_node.cpp +msgid "Dock Position" +msgstr "" + +#: editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle distraction-free mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "Add a new scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Filter Files..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save All Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Open Recent" +msgstr "" + +#: editor/editor_node.cpp +msgid "Convert To..." +msgstr "" + +#: editor/editor_node.cpp +msgid "MeshLibrary..." +msgstr "" + +#: editor/editor_node.cpp +msgid "TileSet..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Undo" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Redo" +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: editor/editor_node.cpp +msgid "Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export" +msgstr "" + +#: editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Data Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp +msgid "Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor" +msgstr "" + +#: editor/editor_node.cpp editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle Fullscreen" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data/Settings Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Settings Folder" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Manage Export Templates" +msgstr "" + +#: editor/editor_node.cpp +msgid "Help" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/project_settings_editor.cpp editor/rename_dialog.cpp +msgid "Search" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Online Docs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Q&A" +msgstr "" + +#: editor/editor_node.cpp +msgid "Issue Tracker" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: editor/editor_node.cpp +msgid "About" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: editor/editor_node.cpp editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Changing the video driver requires restarting the editor." +msgstr "" + +#: editor/editor_node.cpp editor/project_settings_editor.cpp +#: editor/settings_config_dialog.cpp +msgid "Save & Restart" +msgstr "" + +#: editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Disable Update Spinner" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_node.cpp +msgid "Expand Bottom Panel" +msgstr "" + +#: editor/editor_node.cpp scene/resources/visual_shader.cpp +msgid "Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Don't Save" +msgstr "" + +#: editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Password:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited" +msgstr "" + +#: editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 2D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 3D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Script Editor" +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "Open Asset Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the next Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the previous Editor" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail..." +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit Plugin" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Author:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit:" +msgstr "" + +#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp +#: editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Physics Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Calls" +msgstr "" + +#: editor/editor_properties.cpp +msgid "On" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Layer" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Bit %d, value %d" +msgstr "" + +#: editor/editor_properties.cpp +msgid "[Empty]" +msgstr "" + +#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp +msgid "Assign.." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Pick a Viewport" +msgstr "" + +#: editor/editor_properties.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "New Script" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "New %s" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/editor_properties.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Paste" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/editor_properties.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Selected node is not a Viewport!" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Size: " +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Page: " +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "New Key:" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "New Value:" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Add Key/Value Pair" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "Select device from the list" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "" +"No runnable export preset found for this platform.\n" +"Please add a runnable preset in the export menu." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Re-Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Installed)" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Missing)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Current)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Retrieving mirrors, please wait..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove template version '%s'?" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Invalid version.txt format inside templates: %s." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "No version.txt found inside templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error creating path for templates:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Extracting Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Importing:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"No download links found for this version. Direct download is only available " +"for official releases." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request Failed." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Complete." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"Templates installation failed. The problematic templates archives can be " +"found at '%s'." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error requesting url: " +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connecting to Mirror..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Disconnected" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Resolving" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Resolve" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Connect" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connected" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Downloading" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connection Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "SSL Handshake Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Current Version:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Installed Versions:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Install From File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove Template" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select template file" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export Template Manager" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select mirror from list: (Shift+Click: Open in Browser)" +msgstr "" + +#: editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot navigate to '%s' as it has not been found in the file system!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Status: Import of file failed. Please fix file and reimport manually." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move/rename resources root." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move a folder into itself." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error moving:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error duplicating:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Unable to update dependencies:" +msgstr "" + +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "No name provided." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "A file or folder with this name already exists." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Open Scene(s)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Script..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Resource..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + +#: editor/filesystem_dock.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Toggle split mode" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Search files" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"Scanning Files,\n" +"Please Wait..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "There is already file or folder with the same name in this location." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Overwrite" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find in Files" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Folder:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Filters:" +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find..." +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp +msgid "Replace..." +msgstr "" + +#: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace all (no undo)" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Searching..." +msgstr "" + +#: editor/find_in_files.cpp +msgid "Search complete" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Group name already exists." +msgstr "" + +#: editor/groups_editor.cpp +msgid "invalid Group name." +msgstr "" + +#: editor/groups_editor.cpp editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes not in Group" +msgstr "" + +#: editor/groups_editor.cpp editor/scene_tree_dock.cpp +msgid "Filter nodes" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes in Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Manage Groups" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Single Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Importing Scene..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating Lightmaps" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating for Mesh: " +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Running Custom Script..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Error running post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Saving..." +msgstr "" + +#: editor/import_dock.cpp +msgid "Set as Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Clear Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid " Files" +msgstr "" + +#: editor/import_dock.cpp +msgid "Import As:" +msgstr "" + +#: editor/import_dock.cpp editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/import_dock.cpp +msgid "Reimport" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Failed to load resource." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Expand All Properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Collapse All Properties" +msgstr "" + +#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Save As..." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Params" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Paste Params" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Edit Resource Clipboard" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Resource" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Built-In" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Open in Help" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "History of recently edited objects." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Object properties." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Filter properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Edit a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Create a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Plugin Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Subfolder:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Language:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Script Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Activate now?" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Create a new polygon from scratch" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Delete points" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Load.." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "This type of node can't be used. Only root nodes are allowed." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"AnimationTree is inactive.\n" +"Activate to enable playback, check node warnings if activation fails." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Set the blending position within the space" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Select and move points, create points with RMB." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create points." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Erase points." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Open Animation Node" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Triangle already exists" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "BlendSpace2D does not belong to an AnimationTree node." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "No triangles exist, so no blending can take place." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create triangles by connecting points." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Erase points and triangles." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Generate blend triangles automatically (instead of manually)" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Filters" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Output node can't be added to the blend tree." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Unable to connect, port may be in use or connection may be invalid." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "No animation player set, so unable to retrieve track names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Player path set is invalid, so unable to retrieve track names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "" +"Animation player has no valid root node path, so unable to retrieve track " +"names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Node.." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Edit Filtered Tracks:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Enable filtering" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Delete Animation?" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Invalid animation name!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation name already exists!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to copy!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation resource on clipboard!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to edit!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Transitions..." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Open in Inspector" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Enable Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Directions" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Past" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Future" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Depth" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "1 step" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "2 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "3 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Differences Only" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Force White Modulate" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Include Gizmos (3D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pin AnimationPlayer" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "End" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Immediate" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Sync" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "At End" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Travel" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Start and end nodes are needed for a sub-transition." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "No playback resource set at path: %s." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"Select and move nodes.\n" +"RMB to add new nodes.\n" +"Shift+LMB to create connections." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Create new nodes." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Connect nodes." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Remove selected node or transition" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Toggle autoplay this animation on start, restart or seek to zero." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Set the end animation. This is useful for sub-transitions." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition: " +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "AnimationTree" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Import Animations..." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Filters..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading (%s / %s)..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "First" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Previous" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Can't determine a save path for lightmap images.\n" +"Save your scene (for images to be saved in the same dir), or pick a save " +"path from the BakedLightmap properties." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " +"Light' flag is on." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Failed creating lightmap images, make sure path is writable." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Bake Lightmaps" +msgstr "" + +#: editor/plugins/camera_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Preview" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal and vertical guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move pivot" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Resize CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom out" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom reset" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom in" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Smart snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to parent" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node center" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Custom Bone(s) from Node(s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Custom Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Layout" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Add %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Adding %s..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Cannot instantiate multiple nodes without root." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change default type" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Drag & drop + Shift : Add node as sibling\n" +"Drag & drop + Alt : Change node type" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +msgid "CPUParticles" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Mesh" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Node" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Curve Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Add point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Left linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Toggle Curve Linear Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Hold Shift to edit tangents individually" +msgstr "" + +#: editor/plugins/gi_probe_editor_plugin.cpp +msgid "Bake GI Probe" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "" +"No OccluderPolygon2D resource on this node.\n" +"Create and assign one?" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Contained Mesh is not of type ArrayMesh." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Unwrap failed, mesh may not be manifold?" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "No mesh to debug." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Model has no UV in this layer" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh..." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV1" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV2" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Unwrap UV2 for Lightmap/AO" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generating Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Can only set point into a ParticlesMaterial process material" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image..." +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generate Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Particles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generation Time (sec):" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Capture from Pixel" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Colors" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Points:" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points+Normal (Directed)" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Source: " +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "A processor material of type 'ParticlesMaterial' is required." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generating AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate Visibility AABB" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Out-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove In-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp editor/plugins/theme_editor_plugin.cpp +#: editor/project_export.cpp +msgid "Options" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Angles" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Lengths" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Out-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove In-Control Point" +msgstr "" + +#: editor/plugins/physical_bone_plugin.cpp +msgid "Move joint" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"The skeleton property of the Polygon2D does not point to a Skeleton2D node" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon & UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Split point with itself." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Split can't form an existing edge." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Split already exists." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Add Split" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Invalid Split: " +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Remove Split" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint bone weights" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Poly" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Splits" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Connect two points to make a split" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Select a split to erase it" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint weights with specified intensity" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UnPaint weights with specified intensity" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Radius:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Settings" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Configure Grid:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync Bones to Polygon" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_editor.cpp +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ResourcePreloader" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "AnimationTree has no path set to an AnimationPlayer" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Path to AnimationPlayer is invalid" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Files" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close and save changes?" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error writing TextFile:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving file!" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New TextFile..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save File As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid " Class Reference" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle alphabetical sorting of the method list." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Sort" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Up" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Down" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New TextFile" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Copy Script Path" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Other Tabs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle Scripts Panel" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +#: editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Debug with External Editor" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open Godot online documentation" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Discard" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Results" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "(ignore)" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Only resources from filesystem can be dropped." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Lookup Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Pick Color" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Convert Case" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Capitalize" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Syntax Highlighter" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Standard" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Cut" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Delete Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold/Unfold Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Unfold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Spaces" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Tabs" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Next Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Previous Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find in Files..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Line..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "Shader" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "This skeleton has no bones, create some children Bone2D nodes." +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Skeleton2D" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Make Rest Pose (From Bones)" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Bones to Rest Pose" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical bones" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Skeleton" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical skeleton" +msgstr "" + +#: editor/plugins/skeleton_ik_editor_plugin.cpp +msgid "Play IK" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translating: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Objects Drawn" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Material Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Shader Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Surface Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Draw Calls" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Vertices" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock View Rotation" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Unshaded" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Environment" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Information" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Half Resolution" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Doppler Enable" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Cinematic Preview" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Forward" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Backwards" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Up" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Down" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Speed Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Select Mode (Q)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Drag: Rotate\n" +"Alt+Drag: Move\n" +"Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Space Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Select" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Move" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Rotate" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Scale" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Freelook" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap object to floor" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite is empty!" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Can't convert a sprite using animation frames to mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't replace by mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Convert to 2D Mesh" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create 2D Mesh" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Simplification: " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Grow (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Update Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Settings:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "SpriteFrames" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Region Rect" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Sep.:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "TextureRegion" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Edit theme..." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme editing menu." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create From Current Editor Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has,Many,Options" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Style" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Fix Invalid Tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Line Draw" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket Fill" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Find Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Copy Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate right" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip horizontally" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Texture(s) to TileSet" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove current Texture from TileSet" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Display tile's names (hold Alt Key)" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "You haven't selected a texture to remove." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "%s file(s) were not added because was already on the list." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Drag handles to edit Rect.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"LMB: set bit on.\n" +"RMB: set bit off.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select current edited sub-tile.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to change its priority.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "This property can't be changed." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Tile Set" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Light" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "VisualShader" +msgstr "" + +#: editor/project_export.cpp +msgid "Runnable" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete patch '%s' from list?" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete preset '%s'?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp +msgid "Presets" +msgstr "" + +#: editor/project_export.cpp editor/project_settings_editor.cpp +msgid "Add..." +msgstr "" + +#: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: editor/project_export.cpp +msgid "Export all resources in the project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected scenes (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected resources (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources to export:" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "Patches" +msgstr "" + +#: editor/project_export.cpp +msgid "Make Patch" +msgstr "" + +#: editor/project_export.cpp +msgid "Features" +msgstr "" + +#: editor/project_export.cpp +msgid "Custom (comma-separated):" +msgstr "" + +#: editor/project_export.cpp +msgid "Feature List:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export With Debug" +msgstr "" + +#: editor/project_manager.cpp +msgid "The path does not exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose an empty folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' or '.zip' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Directory already contains a Godot project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "There is already a folder in this path with the specified name." +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Rename Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Installation Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: no main scene defined.\n" +"Please edit the project and set the main scene in \"Project Settings\" under " +"the \"Application\" category." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: Assets need to be imported.\n" +"Please edit the project to trigger the initial import." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Language changed.\n" +"The UI will update next time the editor or project manager starts." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Templates" +msgstr "" + +#: editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Restart Now" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't run project" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You don't currently have any projects.\n" +"Would you like to explore the official example projects in the Asset Library?" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Key " +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Action deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "All Devices" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Press a Key..." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 1" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 2" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Axis Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Global Property" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Select a setting item first!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "No property '%s' exists." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Setting '%s' is internal, and it can't be deleted." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Delete Item" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Error saving settings." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Settings saved OK." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override for Feature" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Remapped Path" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter Mode" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Project Settings (project.godot)" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override For..." +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Editor must be restarted for changes to take effect" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Input Map" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Localization" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resources:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locale" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show all locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show only selected locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Filter mode:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "AutoLoad" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: editor/property_editor.cpp +msgid "File..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Dir..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: editor/property_editor.cpp +msgid "Select Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp +msgid "Batch Rename" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Prefix" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Suffix" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Advanced options" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Substitute" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node's parent name, if available" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node type" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Current scene name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Root node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Sequential integer counter.\n" +"Compare counter options." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Per Level counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "If set the counter restarts for each group of child nodes" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Initial value for the counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Step" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Amount by which counter is incremented for each node" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Padding" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Minimum number of digits for the counter.\n" +"Missing digits are padded with leading zeros." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Post-Process" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Keep" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "CamelCase to under_scored" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "under_scored to CamelCase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Case" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Lowercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Uppercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Reset" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can not perform with the root node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save New Scene As..." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Create Root Node:" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "2D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "3D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "User Interface" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Custom Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Sub-Resources" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Scene Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Copy Node Path" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach a new or existing script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear a script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remote" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node configuration warning:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connection(s) and group(s).\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connections.\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is in group(s).\n" +"Click to show groups dock." +msgstr "" + +#: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp +msgid "Open Script" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is locked.\n" +"Click to unlock it." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Children are not selectable.\n" +"Click to make selectable." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visibility" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"AnimationPlayer is pinned.\n" +"Click to unpin." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node Configuration Warning!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading template '%s'" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error - Could not create script in filesystem." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading script from %s" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Open Script/Choose Location" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Wrong extension chosen" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid Path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid inherited parent name or path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script valid" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Allowed: a-z, A-Z, 0-9 and _" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in script (into scene file)" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Create new script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Load existing script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Inherits" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Class Name" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Template" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in Script" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Attach Node Script" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Remote " +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Copy Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Binding" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change AudioStreamPlayer3D Emission Angle" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Notifier AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Particles AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Probe Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Height" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Inner Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Outer Radius" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select the dynamic library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select dependencies of the library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Remove current entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Double click to create a new entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform:" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dynamic Library" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Add an architecture entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "GDNativeLibrary" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "step argument is zero!" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Object can't provide a length." +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Delete Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Grid Map" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Snap View" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Disabled" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Above" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Below" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit X Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Y Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Z Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Clear Rotation" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Exterior Connector" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Erase Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clear Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Settings" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Pick Distance:" +msgstr "" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating solution..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating C# project..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to save solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Done" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create C# project." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Mono" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Create C# solution" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Build Project" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Warnings" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Bake NavMesh" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Partitioning..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Signal Arguments" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Default Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Expression" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Duplicate VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Move Node(s)" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Data" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Sequence" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Input Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't copy the function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Clipboard is empty!" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Member" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search VisualScript" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Get %s" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Set %s" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run in Browser" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run exported HTML in the system's default browser." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not write file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not open template for export:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read custom HTML shell:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read boot splash image file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Using default boot splash image." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_object_2d.cpp +msgid "" +"This node has no shape, so it can't collide or interact with other objects.\n" +"Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " +"define its shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp scene/3d/particles.cpp +msgid "" +"A material to process the particles is not assigned, so no behavior is " +"imprinted." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/physics_body_2d.cpp +msgid "" +"Size changes to RigidBody2D (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "This Bone2D chain should end at a Skeleton2D node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "" +"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRCamera must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRController must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The controller id must not be 0 or this controller will not be bound to an " +"actual controller" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRAnchor must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The anchor id must not be 0 or this anchor will not be bound to an actual " +"anchor" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVROrigin requires an ARVRCamera child node" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Meshes: " +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Lights:" +msgstr "" + +#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp +msgid "Finishing Plot" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Lighting Meshes: " +msgstr "" + +#: scene/3d/collision_object.cpp +msgid "" +"This node has no shape, so it can't collide or interact with other objects.\n" +"Consider adding a CollisionShape or CollisionPolygon as a child to define " +"its shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "Plotting Meshes" +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Nothing is visible because meshes have not been assigned to draw passes." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + +#: scene/3d/physics_body.cpp +msgid "" +"Size changes to RigidBody (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/remote_transform.cpp +msgid "Path property must point to a valid Spatial node to work." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " +"this environment's Background Mode to Canvas (for 2D scenes)." +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "This body will be ignored until you set a mesh" +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "" +"Size changes to SoftBody will be overridden by the physics engine when " +"running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "On BlendTree node '%s', animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "Animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "In node '%s', invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Nothing connected to input '%s' of node '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "A root AnimationNode for the graph is not set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path to an AnimationPlayer node containing animations is not set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "AnimationPlayer root is not a valid node." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Raw Mode" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Add current color as a preset" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + +#: scene/gui/scroll_container.cpp +msgid "" +"ScrollContainer is intended to work with a single child control.\n" +"Use a container as child (VBox,HBox,etc), or a Control and set the custom " +"minimum size manually." +msgstr "" + +#: scene/gui/tree.cpp +msgid "(Other)" +msgstr "" + +#: scene/main/scene_tree.cpp +msgid "" +"Default Environment as specified in Project Settings (Rendering -> " +"Environment -> Default Environment) could not be loaded." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#: scene/resources/visual_shader.cpp +msgid "Input" +msgstr "" + +#: scene/resources/visual_shader.cpp +msgid "None" +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid source for shader." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to function." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to uniform." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Varyings can only be assigned in vertex function." +msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index e7e084af56..d9a769878b 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -25,7 +25,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -383,8 +383,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -398,11 +397,11 @@ msgid "Delete Selection" msgstr "Semua Pilihan" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -505,11 +504,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -542,10 +541,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -576,6 +575,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -653,7 +653,7 @@ msgid "Edit Connection: " msgstr "" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -705,17 +705,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -772,9 +769,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -804,7 +802,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -863,14 +861,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1042,8 +1032,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1210,8 +1199,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1281,11 +1271,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1293,12 +1287,12 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1334,7 +1328,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1392,8 +1387,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1409,24 +1403,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1443,27 +1424,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1491,7 +1472,11 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" msgstr "" #: editor/editor_help.cpp @@ -1506,11 +1491,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" +msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1520,11 +1505,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" +msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1533,11 +1518,52 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1571,6 +1597,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1625,10 +1656,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1856,6 +1897,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1896,6 +1943,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1977,7 +2029,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2006,7 +2058,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2043,6 +2095,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2150,10 +2203,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2247,21 +2296,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2398,7 +2447,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2422,7 +2471,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2434,7 +2483,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2442,6 +2491,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2459,10 +2522,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2471,7 +2530,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2752,6 +2812,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2787,7 +2851,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2824,39 +2888,39 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +#: editor/filesystem_dock.cpp +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2867,6 +2931,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2887,11 +2959,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2899,20 +2971,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2929,27 +2993,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2966,6 +3022,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3122,17 +3182,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3368,6 +3423,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3735,10 +3795,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4060,6 +4116,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4120,6 +4180,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4214,6 +4278,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4264,6 +4332,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4698,8 +4770,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4728,6 +4799,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4797,11 +4873,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5128,22 +5204,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5173,6 +5249,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5269,11 +5349,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5344,7 +5420,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5352,10 +5428,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5390,16 +5462,7 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +msgid "Search Results" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5411,6 +5474,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5497,11 +5564,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5518,19 +5585,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5538,15 +5597,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5638,6 +5697,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5802,6 +5869,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5901,10 +5972,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6302,6 +6369,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Semua Pilihan" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6347,25 +6419,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Semua Pilihan" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Anim Ubah Penukaran" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6393,7 +6470,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6409,7 +6486,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6485,6 +6562,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6493,6 +6578,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6551,6 +6640,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -6999,10 +7096,6 @@ msgstr "" msgid "General" msgstr "Am" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7136,10 +7229,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7224,7 +7313,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7233,7 +7322,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7273,7 +7362,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7332,6 +7421,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7368,6 +7461,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7438,6 +7537,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7446,11 +7549,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7600,6 +7703,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7688,19 +7795,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7732,18 +7827,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8162,11 +8245,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8436,6 +8515,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8534,11 +8617,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8616,6 +8699,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8654,6 +8743,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8771,6 +8866,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8790,6 +8895,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8822,7 +8945,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8891,10 +9014,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8902,6 +9021,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index fc4a1bed6e..a32f59eef6 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -11,10 +11,11 @@ # NicolaiF <nico-fre@hotmail.com>, 2017-2018. # Norwegian Disaster <stian.furu.overbye@gmail.com>, 2017. # passeride <lukas@passeride.com>, 2017. +# Byzantin <kasper-hoel@hotmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-28 14:40+0000\n" +"PO-Revision-Date: 2018-10-15 21:32+0000\n" "Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" "Language-Team: Norwegian BokmÃ¥l <https://hosted.weblate.org/projects/godot-" "engine/godot/nb/>\n" @@ -22,7 +23,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.2.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -30,18 +31,19 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Ugyldig typeargument til convert(), bruk TYPE_*-konstantene." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Ikke nok byte til dekodingsbyte, eller ugyldig format." #: core/math/expression.cpp +#, fuzzy msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ikke gyldig inndata %i (ikke bestÃ¥tt) i utrykket" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self kan ikke brukes siden instansen er lik null (ikke bestÃ¥tt)" #: core/math/expression.cpp #, fuzzy @@ -64,7 +66,7 @@ msgstr ": Ugyldig argument av type: " #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "NÃ¥r \"%s\" ble anropt:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -73,12 +75,11 @@ msgstr "Frigjør" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Balansert" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Speil X" +msgstr "Speil" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -86,14 +87,12 @@ msgid "Insert Key Here" msgstr "Sett inn Nøkkel" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Dupliser Utvalg" +msgstr "Dupliser valgte nøkler/taster" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Slett Valgte" +msgstr "Slett valgte nøkler/taster" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -407,8 +406,7 @@ msgstr "Skaler Utvalg" msgid "Scale From Cursor" msgstr "Skaler Fra Peker" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Dupliser Utvalg" @@ -422,11 +420,13 @@ msgid "Delete Selection" msgstr "Slett Valgte" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "GÃ¥ til Neste Steg" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "GÃ¥ til Forrige Steg" #: editor/animation_track_editor.cpp @@ -529,11 +529,11 @@ msgstr "Ingen Treff" msgid "Replaced %d occurrence(s)." msgstr "Erstattet %d forekomst(er)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Match Tilfelle" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Hele Ord" @@ -567,10 +567,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom Inn" +msgid "Font Size:" +msgstr "Frontvisning" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linje:" @@ -603,6 +603,7 @@ msgstr "Legg Til" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -684,7 +685,7 @@ msgstr "Tilkoblingsfeil" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "Er du sikker pÃ¥ at du vil kjøre mer enn ett prosjekt?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -739,17 +740,14 @@ msgstr "Nylige:" msgid "Search:" msgstr "Søk:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Treff:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Beskrivelse:" @@ -811,9 +809,10 @@ msgid "Search Replacement Resource:" msgstr "Søk Erstatningsressurs:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -845,7 +844,8 @@ msgid "Error loading:" msgstr "Feil ved innlasting:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Scenen kunne ikke lastes pÃ¥ grunn av manglende avhengigheter:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -906,14 +906,6 @@ msgstr "Endre Ordboksverdi" msgid "Thanks from the Godot community!" msgstr "Takk fra Godot-samfunnet!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine sine bidragsytere" @@ -1089,8 +1081,7 @@ msgid "Bus options" msgstr "Bus valg" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplisér" @@ -1260,8 +1251,9 @@ msgstr "Bane:" msgid "Node Name:" msgstr "Nodenavn:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Navn" @@ -1331,12 +1323,17 @@ msgid "Template file not found:" msgstr "Malfil ble ikke funnet:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Velg Gjeldende Mappe" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Filen finnes, overskriv?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Velg Gjeldende Mappe" +#, fuzzy +msgid "Select This Folder" +msgstr "Kutt Noder" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1344,12 +1341,13 @@ msgstr "Kopier Sti" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Vis I Filutforsker" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Vis I Filutforsker" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1385,7 +1383,8 @@ msgid "Open a File or Directory" msgstr "Ã…pne ei fil eller mappe" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Lagre" @@ -1443,8 +1442,7 @@ msgstr "Mapper og Filer:" msgid "Preview:" msgstr "ForhÃ¥ndsvisning:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Fil:" @@ -1460,24 +1458,11 @@ msgstr "SkannKilder" msgid "(Re)Importing Assets" msgstr "(Re)Importerer Assets" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Søk hjelp" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Klasseliste:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Søk i klasser" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Topp" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Klasse:" @@ -1494,28 +1479,31 @@ msgid "Brief Description:" msgstr "Kort beskrivelse:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Medlemmer" +msgid "Properties" +msgstr "Egenskaper" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Medlemmer:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Offentlige metoder" +msgid "Methods" +msgstr "Metoder" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Offentlige metoder:" +#, fuzzy +msgid "Methods:" +msgstr "Metoder" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI Tema Elementer" +#, fuzzy +msgid "Theme Properties" +msgstr "Egenskaper" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI Tema Elementer:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Egenskaper" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1542,10 +1530,16 @@ msgid "Constants:" msgstr "Konstanter:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Beskrivelse" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Beskrivelse:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Online dokumentasjon:" @@ -1560,11 +1554,13 @@ msgstr "" "$url2]be om en[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Egenskaper" +#, fuzzy +msgid "Property Descriptions" +msgstr "Egenskapsbeskrivelse:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Egenskapsbeskrivelse:" #: editor/editor_help.cpp @@ -1576,11 +1572,13 @@ msgstr "" "Ã¥ [colour=$color][url=$url]bidra med en[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metoder" +#, fuzzy +msgid "Method Descriptions" +msgstr "Metodebeskrivelse:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Metodebeskrivelse:" #: editor/editor_help.cpp @@ -1591,12 +1589,61 @@ msgstr "" "Det finnes i øyeblikket ingen beskrivelse av denne metoden. Hjelp til ved Ã¥ " "[colour=$color][url=$url]bidra med en[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Søk hjelp" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Display All" +msgstr "Erstatt Alle" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Klasser" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metoder" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signaler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstanter" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Egenskaper" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "Egenskaper" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Medlemmer" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Klasse:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "Sett" @@ -1630,6 +1677,11 @@ msgstr "Eksport av prosjektet mislyktes med feilkode %d." msgid "Error saving resource!" msgstr "Feil ved lagring av ressurs!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Lagre Ressurs Som..." @@ -1684,12 +1736,22 @@ msgstr "Denne operasjonen kan ikke gjennomføres uten en trerot." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Kunne ikke lagre scene. Sannsynligvis kunne ikke avhengigheter (instanser " "eller arvinger) oppfylles." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Kan ikke laste MeshLibrary for sammenslÃ¥ing!" @@ -1945,6 +2007,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Kan ikke laste addon-skript fra bane: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Kunne ikke laste tillegsskript fra sti: '%s' Script er ikke i verktøymodus." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1992,6 +2062,12 @@ msgstr "Slett Layout" msgid "Default" msgstr "Standard" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Vis I Filutforsker" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2075,7 +2151,8 @@ msgid "Save Scene" msgstr "Lagre Scene" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Lagre alle Scener" #: editor/editor_node.cpp @@ -2104,7 +2181,7 @@ msgid "Undo" msgstr "Angre" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Gjenta" @@ -2143,6 +2220,7 @@ msgid "Quit to Project List" msgstr "Avslutt til Prosjektliste" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Debug" @@ -2277,10 +2355,6 @@ msgstr "HÃ¥ndter Eksportmaler" msgid "Help" msgstr "Hjelp" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Klasser" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2376,24 +2450,24 @@ msgstr "Oppdater Endringer" msgid "Disable Update Spinner" msgstr "Deaktiver Oppdateringsspinner" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspektør" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importer" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "FilSystem" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspektør" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Utvid alle" @@ -2533,7 +2607,7 @@ msgstr "Frame %" msgid "Physics Frame %" msgstr "Fysikk-Frame %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tid:" @@ -2561,7 +2635,7 @@ msgstr "Tid:" msgid "Calls" msgstr "Ring" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2573,7 +2647,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2581,6 +2655,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2598,10 +2686,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2610,7 +2694,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Lim inn" @@ -2910,6 +2995,11 @@ msgstr "" "Kan ikke Ã¥pne fyle_type_cache.cch for skriving, lagrer ikke file type cache!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favoritter:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "Kan ikke navigere til '%s' for den ble ikke funnet pÃ¥ filsystemet!" @@ -2956,7 +3046,7 @@ msgstr "Feil ved innlasting:" msgid "Unable to update dependencies:" msgstr "Kan ikke oppdatere av avhengigheter:\n" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Ingen navn gitt" @@ -2995,22 +3085,6 @@ msgid "Duplicating folder:" msgstr "Ender mappenavn:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Utvid alle" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Kollaps alle" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Endre Navn..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Flytt Til..." - -#: editor/filesystem_dock.cpp #, fuzzy msgid "Open Scene(s)" msgstr "Ã…pne Scene" @@ -3020,6 +3094,16 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favoritter:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Fjern fra Gruppe" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Endre Avhengigheter..." @@ -3027,12 +3111,20 @@ msgstr "Endre Avhengigheter..." msgid "View Owners..." msgstr "Vis Eiere..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Endre Navn..." + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Duplisér" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Flytt Til..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "HurtigÃ¥pne Skript..." @@ -3042,6 +3134,16 @@ msgstr "HurtigÃ¥pne Skript..." msgid "New Resource..." msgstr "Lagre Ressurs Som..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Utvid alle" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Kollaps alle" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3063,13 +3165,13 @@ msgstr "Re-Skann Filsystem" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Vis/skjul mappestatus som Favoritt" +msgid "Toggle split mode" +msgstr "Veksle modus" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Velg Gjeldende Mappe" +msgid "Search files" +msgstr "Søk i klasser" #: editor/filesystem_dock.cpp #, fuzzy @@ -3077,15 +3179,6 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instanser den valgte scene(r) som barn av den valgte noden." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Søk i klasser" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3093,7 +3186,7 @@ msgstr "" "Skanner Filer,\n" "Vennligst Vent..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Flytt" @@ -3112,31 +3205,22 @@ msgstr "Opprett skript" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d flere filer" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Finn" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Hele Ord" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Match Tilfelle" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Lag mappe" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Lim inn Noder" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3154,6 +3238,11 @@ msgstr "Avbryt" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Finn" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Erstatt" @@ -3321,17 +3410,14 @@ msgstr "Reimporter" msgid "Failed to load resource." msgstr "Kunne ikke laste ressurs." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Utvid alle egenskaper" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Kollaps alle egenskaper" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3584,6 +3670,12 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy +msgid "Blend:" +msgstr "Blend:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3970,11 +4062,6 @@ msgid "Amount:" msgstr "Mengde:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy -msgid "Blend:" -msgstr "Blend:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Blend 0:" @@ -4314,6 +4401,11 @@ msgstr "Endre CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Endre CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Endre CanvasItem" @@ -4378,6 +4470,11 @@ msgid "Rotate Mode" msgstr "Roter Modus" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Velg Modus" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "" @@ -4479,6 +4576,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Gjenopprett objektets barn sin mulighet for Ã¥ bli valgt." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Vis Ben" @@ -4532,6 +4634,10 @@ msgid "Show Viewport" msgstr "Vis hjelpere" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy msgid "Center Selection" msgstr "Plasser Utvalg I Midten" @@ -4977,8 +5083,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5007,6 +5112,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Konverter til store versaler" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Partikler" @@ -5076,13 +5187,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Konverter til store versaler" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5431,22 +5541,22 @@ msgid "Paste Resource" msgstr "Lim inn Ressurs" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Ã…pne i Redigeringsverktøy" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instans:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Type:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Ã…pne i Redigeringsverktøy" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Last Ressurs" @@ -5483,6 +5593,11 @@ msgstr "Error ved lagring av TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Kunne ikke opprette mappe." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Kunne ikke opprette mappe." @@ -5584,12 +5699,9 @@ msgid "Copy Script Path" msgstr "Kopier Skript-Sti" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Vis I Filutforsker" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "Finn forrige" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5659,7 +5771,8 @@ msgid "Keep Debugger Open" msgstr "Hold feilretteren Ã¥pen" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Feilrett med ekstern behandler" #: editor/plugins/script_editor_plugin.cpp @@ -5667,10 +5780,6 @@ msgid "Open Godot online documentation" msgstr "Ã…pne Godots nettbaserte dokumentasjon" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Søk i klasse-hierarkiet." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Søk i referanse-dokumentasjonen." @@ -5706,19 +5815,9 @@ msgstr "Feilretter" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Søk hjelp" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Søk i klasser" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5729,6 +5828,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Fjern Funksjon" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5817,12 +5921,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "Konverter til store versaler" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "Konverter til store versaler" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5838,20 +5944,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Konverter til store versaler" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "GÃ¥ til Neste Steg" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Konverter til smÃ¥ versaler" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "GÃ¥ til tidligere redigert dokument." #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5859,16 +5959,18 @@ msgstr "Finn forrige" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrer Filer..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Fjern Funksjon" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "GÃ¥ til Linje" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5963,6 +6065,15 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Pitch" +msgstr "Bryter" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6130,6 +6241,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Vis Informasjon" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6232,11 +6348,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Snap til rutenett" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6644,6 +6755,11 @@ msgid "Fix Invalid Tiles" msgstr "Ugyldig navn." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Plasser Utvalg I Midten" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6690,24 +6806,31 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Fjern Utvalg" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Roter 0 grader" +#, fuzzy +msgid "Rotate left" +msgstr "Roter Modus" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "Roter Polygon" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Roter 90 grader" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Roter 180 grader" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Roter 270 grader" +#, fuzzy +msgid "Clear transform" +msgstr "Anim Forandre Omforming" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6738,7 +6861,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6754,7 +6877,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6834,6 +6957,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Eksporter" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6842,6 +6974,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Eksporter Prosjekt" + +#: editor/project_export.cpp msgid "Resources" msgstr "Ressurser" @@ -6900,6 +7037,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Eksporter Prosjekt" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Eksporter" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7361,10 +7508,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7501,10 +7644,6 @@ msgstr "Lim inn Noder" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7595,7 +7734,7 @@ msgid "Step" msgstr "Steg:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7604,7 +7743,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7647,7 +7786,7 @@ msgstr "Store versaler" msgid "Reset" msgstr "Nullstill Zoom" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7706,6 +7845,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7742,6 +7885,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7818,6 +7967,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Ã…pne Godots nettbaserte dokumentasjon" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7826,12 +7980,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Kjør Skript" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7986,6 +8141,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Ressurs-utklippstavle er tom!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -8076,19 +8236,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8121,18 +8269,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8569,11 +8705,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8859,6 +8991,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Medlemmer:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Tilgjengelige Noder:" @@ -8960,12 +9096,11 @@ msgid "Search VisualScript" msgstr "Lim inn Noder" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy -msgid "Get" -msgstr "Hent" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9047,6 +9182,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9085,6 +9226,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9202,6 +9349,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9221,6 +9378,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9253,7 +9428,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9327,11 +9502,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Kutt Noder" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9339,6 +9509,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9406,6 +9580,84 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom Inn" + +#~ msgid "Class List:" +#~ msgstr "Klasseliste:" + +#~ msgid "Search Classes" +#~ msgstr "Søk i klasser" + +#~ msgid "Public Methods" +#~ msgstr "Offentlige metoder" + +#~ msgid "Public Methods:" +#~ msgstr "Offentlige metoder:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI Tema Elementer" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI Tema Elementer:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Egenskaper" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Vis/skjul mappestatus som Favoritt" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Velg Gjeldende Mappe" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Hele Ord" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Match Tilfelle" + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Søk i klasse-hierarkiet." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Søk i klasser" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Konverter til store versaler" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Konverter til smÃ¥ versaler" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Snap til rutenett" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Roter 0 grader" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Roter 90 grader" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Roter 180 grader" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Roter 270 grader" + +#, fuzzy +#~ msgid "Get" +#~ msgstr "Hent" + #~ msgid "Change Comment" #~ msgstr "Endre Kommentar" @@ -9574,9 +9826,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "Sekvens" -#~ msgid "Switch" -#~ msgstr "Bryter" - #~ msgid "While" #~ msgstr "Mens" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 5c0aa6546c..e4e85160a0 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -24,18 +24,19 @@ # Wout Standaert <wout@blobkat.com>, 2017. # Zatherz <zatherz@linux.pl>, 2017. # Tahar Meijs <tntmeijs@gmail.com>, 2018. +# Laurent Windels <laurentwindels@yahoo.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-07 22:36+0000\n" -"Last-Translator: Willem <studiebolmail@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: Laurent Windels <laurentwindels@yahoo.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\n" "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 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -43,41 +44,39 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Ongeldige type argument voor convert(), gebruik TYPE_* constanten." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Niet genoeg bytes om bytes te decoderen, of ongeldig formaat." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ongeldige invoer %i (niet doorgegeven) in expressie" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" +"self kan niet gebruikt worden omdat de instantie null is (niet doorgegeven)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Ongeldige index eigenschap naam '%s' in node %s." +msgstr "Ongeldige operand voor operator %s, %s en %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Ongeldige index eigenschap naam '%s' in node %s." +msgstr "Ongeldige index in type %s voor basis-type %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Ongeldige indexnaam %s voor basis-type %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Ongeldig argument van type: " +msgstr "Ongeldig argument in constructie '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Tijdens invocatie van '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -86,27 +85,23 @@ msgstr "Vrij" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Gebalanceerd" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Spiegel X" +msgstr "Spiegel" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Voer Sleutel in" +msgstr "Hier Key invoegen" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Dupliceer Selectie" +msgstr "Kopieer Geselecteerde Key(s)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Geselecteerde Verwijderen" +msgstr "Geselecteerde Key(s) Verwijderen" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -138,44 +133,39 @@ msgstr "Anim Wijzig Aanroep" #: editor/animation_track_editor.cpp msgid "Property Track" -msgstr "" +msgstr "Eigenschap Track" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Transformatie Type" +msgstr "3D Transformatie Track" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Methode Invocatie Track" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Bezier-curve Track" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Audio Terugspelen Track" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Stop animatie opname. (S)" +msgstr "Animatie Terugspelen Track" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Anim Track Toevoegen" +msgstr "Track Toevoegen" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Animatie lengte (in seconden)." +msgstr "Animatielengte (in seconden)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Animatie zoom." +msgstr "Animatie Loopen" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -183,41 +173,37 @@ msgid "Functions:" msgstr "Functies:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Audio Luisteraar" +msgstr "Audioclips:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "Animatieclips:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Afleidingsvrije modus veranderen." +msgstr "Aan-uitschakelaar Track." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Update Modus (Setting van deze eigenschap)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Animatie Node" +msgstr "Interpolatiemodus" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" msgstr "" +"Terugloopmodus (Interpolatie tussen het begin en het einde van de loop)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Verwijder geselecteerde track." +msgstr "Verwijder deze track." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "X-Fade Tijd (en):" +msgstr "Tijd (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -232,13 +218,12 @@ msgid "Trigger" msgstr "Trigger" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Kenmerken" +msgstr "Vastleggen" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Dichtstbijzijnde" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -247,15 +232,15 @@ msgstr "Lineair" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Kubiek" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Klem loop interpolatie" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Loop Interpolatie Terug" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -263,14 +248,12 @@ msgid "Insert Key" msgstr "Voer Sleutel in" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Anim Dupliceer Keys" +msgstr "Dupliceer Key(s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Anim Verwijder Keys" +msgstr "Verwijder Key(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -300,7 +283,7 @@ msgstr "Anim Invoegen" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "Animatie-Speler kan zichzelf niet animeren, alleen andere spelers." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -317,6 +300,8 @@ msgstr "Anim Key Invoegen" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"Transformatie tracks zijn alleen te gebruiken met nodes die een dimensionale " +"oriëntatie hebben." #: editor/animation_track_editor.cpp msgid "" @@ -325,44 +310,46 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Audio tracks kunnen enkel verwijzen naar nodes van het type:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Animatie tracks kunnen enkel verwijzen naar AnimatiePlayer nodes." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "Een animatiespeler kan zichzelf niet animeren, alleen andere spelers." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Niet mogelijk om een nieuwe track toe te voegen zonder een root" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Track path is niet geldig, dus kan geen key toevoegen." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Track is niet van het type Spatial, kan geen key invoegen" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Track path is niet geldig, dus kan geen methode key toevoegen." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet niet gevonden in script: " +msgstr "Methode niet gevonden in object " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Anim Verplaats Keys" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Bronnen klembord is leeg!" +msgstr "Klembord is leeg" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -401,19 +388,16 @@ msgid "Edit" msgstr "Bewerken" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimatieBoom" +msgstr "Animatie kenmerken." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Kopieer Parameters" +msgstr "Kopieer Tracks" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Plak Parameters" +msgstr "Plak Tracks" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -423,8 +407,7 @@ msgstr "Schaal Selectie" msgid "Scale From Cursor" msgstr "Schaal Vanaf Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Dupliceer Selectie" @@ -433,16 +416,17 @@ msgid "Duplicate Transposed" msgstr "Dupliceer Getransponeerde" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Geselecteerde Verwijderen" +msgstr "Verwijder Selectie" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Ga Naar Volgende Stap" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Ga Naar Vorige Stap" #: editor/animation_track_editor.cpp @@ -455,11 +439,11 @@ msgstr "Animatie Opschonen" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Kies de node die geanimeerd zal worden:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Gebruik Bezier Curves" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -545,11 +529,11 @@ msgstr "Geen Matches" msgid "Replaced %d occurrence(s)." msgstr "%d voorgekomen waarde(s) vervangen." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Hoofdlettergevoelig" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Hele Woorden" @@ -583,10 +567,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Inzoomen" +msgid "Font Size:" +msgstr "Vooraanzicht" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Regel:" @@ -619,6 +603,7 @@ msgstr "Toevoegen" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -700,7 +685,7 @@ msgstr "Verbindingsfout" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "Weet je zeker dat je meerdere projecten wilt uitvoeren?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -755,17 +740,14 @@ msgstr "Recente:" msgid "Search:" msgstr "Zoeken:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Overeenkomsten:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Omschrijving:" @@ -826,9 +808,10 @@ msgid "Search Replacement Resource:" msgstr "Zoek Vervangende Resource:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -863,7 +846,8 @@ msgid "Error loading:" msgstr "Error bij het laden van:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Scene faalde om te laden door ontbrekende afhankelijkheden:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -922,14 +906,6 @@ msgstr "Wijzig Array Waarde" msgid "Thanks from the Godot community!" msgstr "Bedankt van de Godot gemeenschap!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Oké" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine medewerkers" @@ -1105,8 +1081,7 @@ msgid "Bus options" msgstr "Audiobusopties" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliceren" @@ -1276,8 +1251,9 @@ msgstr "Pad:" msgid "Node Name:" msgstr "Node Naam:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Naam" @@ -1347,12 +1323,17 @@ msgid "Template file not found:" msgstr "Template bestand niet gevonden:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Selecteer Huidige Map" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Bestand Bestaat, Overschrijven?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Selecteer Huidige Map" +#, fuzzy +msgid "Select This Folder" +msgstr "Selecteer Modus" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1360,12 +1341,13 @@ msgstr "Kopieer Pad" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Weergeven in Bestandsbeheer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Weergeven in Bestandsbeheer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1401,7 +1383,8 @@ msgid "Open a File or Directory" msgstr "Open een Bestand of Map" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Opslaan" @@ -1459,8 +1442,7 @@ msgstr "Mappen & Bestanden:" msgid "Preview:" msgstr "Voorbeeld:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Bestand:" @@ -1476,24 +1458,11 @@ msgstr "Scan Bronnen" msgid "(Re)Importing Assets" msgstr "Bronnen (Her)Importeren" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Zoek Hulp" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Klasse Lijst:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Zoek Klasses" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Boven" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Klasse:" @@ -1510,28 +1479,31 @@ msgid "Brief Description:" msgstr "Korte Beschrijving:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Leden" +msgid "Properties" +msgstr "Eigenschappen" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Leden:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Eigenschappen:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Publieke Methodes" +msgid "Methods" +msgstr "Methodes" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Publieke Methodes:" +#, fuzzy +msgid "Methods:" +msgstr "Methodes" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI Thema Items" +#, fuzzy +msgid "Theme Properties" +msgstr "Eigenschappen" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI Thema Items:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Eigenschappen:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1558,10 +1530,16 @@ msgid "Constants:" msgstr "Constanten:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Beschrijving" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Omschrijving:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Online Documentatie:" @@ -1576,11 +1554,13 @@ msgstr "" "$color][url=$url2]een aan te vragen[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Eigenschappen" +#, fuzzy +msgid "Property Descriptions" +msgstr "Eigenschap Beschrijving:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Eigenschap Beschrijving:" #: editor/editor_help.cpp @@ -1592,11 +1572,13 @@ msgstr "" "door [color=$color][url=$url]een toe te voegen[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Methodes" +#, fuzzy +msgid "Method Descriptions" +msgstr "Methode Beschrijving:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Methode Beschrijving:" #: editor/editor_help.cpp @@ -1607,12 +1589,61 @@ msgstr "" "Er is momenteel geen beschrijving voor deze methode. Help ons alsjeblieft " "door [color=$color][url=$url]een toe te voegen[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Zoek Hulp" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " -msgstr "Eigenschappen:" +msgid "Display All" +msgstr "Weergave Normaalvector" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Klassen" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Methodes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signalen" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Constanten" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Eigenschappen" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Eigenschappen" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Leden" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Klasse:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "Zet" @@ -1646,6 +1677,11 @@ msgstr "Project exporteren faalt door foutcode %d." msgid "Error saving resource!" msgstr "Error bij het opslaan van resource!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Oké" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Resource Opslaan Als..." @@ -1700,12 +1736,22 @@ msgstr "Deze operatie kan niet gedaan worden zonder boomwortel." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Kon de scene niet opslaan. Waarschijnlijk konden afhankelijkheden " "(instanties of erfelijkheden) niet voldaan worden." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Kan MeshLibrary niet laden om te samenvoegen!" @@ -1967,6 +2013,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Volgend script kon niet geladen worden: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Volgend script kon niet geladen worden: '%s' Script is niet in tool modus." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2015,6 +2069,12 @@ msgstr "Layout Verwijderen" msgid "Default" msgstr "Standaard" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Toon in Bestandsbeheer" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2098,7 +2158,8 @@ msgid "Save Scene" msgstr "Scene Opslaan" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Alle Scenes Opslaan" #: editor/editor_node.cpp @@ -2127,7 +2188,7 @@ msgid "Undo" msgstr "Ongedaan Maken" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Opnieuw" @@ -2165,6 +2226,7 @@ msgid "Quit to Project List" msgstr "Sluit af naar Projectlijst" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Debuggen" @@ -2294,10 +2356,6 @@ msgstr "Beheer Export Templates" msgid "Help" msgstr "Help" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Klassen" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2392,24 +2450,24 @@ msgstr "Update Veranderingen" msgid "Disable Update Spinner" msgstr "Schakel Update Draaier Uit" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspecteur" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importeren" #: editor/editor_node.cpp -msgid "Node" -msgstr "Knooppunt" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Bestandssysteem" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspecteur" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Knooppunt" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Klap alles uit" @@ -2547,7 +2605,7 @@ msgstr "Frame %" msgid "Physics Frame %" msgstr "Physics Frame %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tijd:" @@ -2571,7 +2629,7 @@ msgstr "Tijd" msgid "Calls" msgstr "Aanroepen" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2583,7 +2641,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Leeg]" @@ -2591,6 +2649,20 @@ msgstr "[Leeg]" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "Kies een Aanzicht portaal" @@ -2608,10 +2680,6 @@ msgstr "" msgid "Make Unique" msgstr "Maak Uniek" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2620,7 +2688,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Plakken" @@ -2914,6 +2983,11 @@ msgstr "" "bewaard!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favorieten:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Kan niet naar '%s' navigeren omdat het niet in het bestandssysteem gevonden " @@ -2955,7 +3029,7 @@ msgstr "Fout bij het dupliceren:" msgid "Unable to update dependencies:" msgstr "Kon afhankelijkheden niet updaten:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Geen naam opgegeven" @@ -2992,22 +3066,6 @@ msgid "Duplicating folder:" msgstr "Folder dupliceren:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Klap alles uit" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Klap alles in" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Hernoemen..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Verplaats Naar..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Scene(s) Openen" @@ -3016,6 +3074,16 @@ msgid "Instance" msgstr "Instantie" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favorieten:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Verwijderen uit Groep" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Afhankelijkheden aanpassen..." @@ -3023,11 +3091,19 @@ msgstr "Afhankelijkheden aanpassen..." msgid "View Owners..." msgstr "Bekijk eigenaren..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Hernoemen..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Dupliceren..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Verplaats Naar..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Open Script Snel..." @@ -3037,6 +3113,16 @@ msgstr "Open Script Snel..." msgid "New Resource..." msgstr "Resource Opslaan Als..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Klap alles uit" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Klap alles in" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3058,13 +3144,13 @@ msgstr "Bestandssysteem Opnieuw Scannen" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Schakel folder status als Favoriet" +msgid "Toggle split mode" +msgstr "Toggle Modus" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Selecteer zojuist bewerkte sub-tegel." +msgid "Search files" +msgstr "Zoek Klasses" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -3073,15 +3159,6 @@ msgstr "" "geselecteerde knoop." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Zoek Klasses" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3089,7 +3166,7 @@ msgstr "" "Bestanden Scannen,\n" "Wacht Alstublieft..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Verplaatsen" @@ -3108,31 +3185,22 @@ msgstr "Creëer Script" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "Vind Tegel" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Zoeken" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Hele Woorden" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Hoofdlettergevoelig" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Map Maken" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filter:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3150,6 +3218,11 @@ msgstr "Annuleer" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Zoeken" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Vervangen" @@ -3315,17 +3388,14 @@ msgstr "Herimporteer" msgid "Failed to load resource." msgstr "Mislukt om resource te laden." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Oké" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Klap alle eigenschappen uit" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Klap alle eigenschappen in" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3577,6 +3647,11 @@ msgstr "" msgid "Snap" msgstr "Snap" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Mengen:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3959,10 +4034,6 @@ msgid "Amount:" msgstr "Hoeveelheid:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Mengen:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Meng 0:" @@ -4300,6 +4371,11 @@ msgstr "CanvasItem Bewerken" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "CanvasItem Bewerken" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "CanvasItem Bewerken" @@ -4365,6 +4441,11 @@ msgid "Rotate Mode" msgstr "Rotatiemodus" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Schaalstand (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4468,6 +4549,11 @@ msgstr "" "object." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Laat Botten Zien" @@ -4519,6 +4605,10 @@ msgid "Show Viewport" msgstr "Toon Aanzicht Portaal" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centreer Selectie" @@ -4969,9 +5059,9 @@ msgid "Create Navigation Polygon" msgstr "Creëer Navigatie Polygoon" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "AABB Genereren" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Genereer Zichtbaarheid Rechthoek" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4999,6 +5089,12 @@ msgstr "Leeg Emissie Masker" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Converteer Naar Hoofdletters" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Partikels" @@ -5068,13 +5164,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Een processor materiaal of type 'PartikelMateriaal' is nodig." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Genereer AABB" +msgid "Generating AABB" +msgstr "AABB Genereren" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Converteer Naar Hoofdletters" +msgid "Generate AABB" +msgstr "Genereer AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5419,22 +5514,22 @@ msgid "Paste Resource" msgstr "Plak Bron" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Openen in Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instantie:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Type:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Openen in Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Laad Bron" @@ -5467,6 +5562,11 @@ msgstr "Error bij het opslaan van TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Map kon niet gemaakt worden." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Map kon niet gemaakt worden." @@ -5568,11 +5668,8 @@ msgid "Copy Script Path" msgstr "Kopieer Script Pad" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Toon in Bestandsbeheer" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Geschiedenis voorgaande" #: editor/plugins/script_editor_plugin.cpp @@ -5643,7 +5740,8 @@ msgid "Keep Debugger Open" msgstr "Houd Debugger Open" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Debug met externe editor" #: editor/plugins/script_editor_plugin.cpp @@ -5651,10 +5749,6 @@ msgid "Open Godot online documentation" msgstr "Open Godot online documentatie" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Zoek in de klasse hiërarchie." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Zoek in de referentie documentatie." @@ -5692,21 +5786,9 @@ msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Zoek Hulp" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Zoek Klasses" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Ingebouwde scripts kunnen alleen ge-edit worden wanneer de bijbehorende " -"scène geladen is" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5717,6 +5799,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Ga Naar Functie..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Alleen bronnen uit bestandssysteem kunnen gedropt worden." @@ -5804,11 +5891,13 @@ msgid "Trim Trailing Whitespace" msgstr "Trim Navolgende Spaties" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Converteer Indentatie Naar Spaties" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Converteer Indentatie Naar Tabs" #: editor/plugins/script_text_editor.cpp @@ -5825,36 +5914,32 @@ msgid "Remove All Breakpoints" msgstr "Verwijder Alle Breekpunten" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Ga Naar Volgende Breekpunt" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Ga Naar Vorige Breekpunt" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Converteer Naar Hoofdletters" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Converteer Naar Kleine Letters" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Vind Vorige" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Bestanden Filteren..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Ga Naar Functie..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Ga Naar Regel..." #: editor/plugins/script_text_editor.cpp @@ -5951,6 +6036,15 @@ msgid "Animation Key Inserted." msgstr "Animatie Key Ingevoegd." #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Pitch" +msgstr "Schakelaar" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objecten Getekend" @@ -6117,6 +6211,11 @@ msgid "Freelook Speed Modifier" msgstr "Vrijekijk Snelheid Modificator" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Bekijk Informatie" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm Dialoog" @@ -6221,11 +6320,6 @@ msgstr "Verschalen Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Snap To Floor" -msgstr "Uitlijnen op raster" - -#: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" msgstr "Toggle Favoriet" @@ -6634,6 +6728,11 @@ msgid "Fix Invalid Tiles" msgstr "Ongeldige naam." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Centreer Selectie" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6680,24 +6779,31 @@ msgstr "Kies Tegel" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Verwijder Selectie" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "0 Graden Roteren" +#, fuzzy +msgid "Rotate left" +msgstr "Rotatiemodus" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "Roteer Polygon" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "90 Graden Roteren" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "180 Graden Roteren" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "270 Graden Roteren" +#, fuzzy +msgid "Clear transform" +msgstr "Transformatie" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6728,7 +6834,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6744,7 +6850,7 @@ msgid "Merge from scene?" msgstr "Vervoegen vanuit scene?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6828,6 +6934,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "reeds losgelaten" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Aan het exporteren voor %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "Voorinstelling" @@ -6836,6 +6952,11 @@ msgid "Add..." msgstr "Toevoegen..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Project Exporteren" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6894,6 +7015,16 @@ msgid "Export PCK/Zip" msgstr "Exporteer PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Project Exporteren" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exporteren" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Vermiste Exportsjablonen voor dit platform:" @@ -6979,9 +7110,8 @@ msgid "Import Existing Project" msgstr "Importeer bestaand project" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Importeren" +msgstr "Importeer & Bewerk" #: editor/project_manager.cpp msgid "Create New Project" @@ -6997,9 +7127,8 @@ msgid "Install Project:" msgstr "Installeer project:" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Installeer" +msgstr "Installeer & Bewerk" #: editor/project_manager.cpp msgid "Project Name:" @@ -7015,9 +7144,8 @@ msgid "Project Path:" msgstr "Projectpad:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Projectpad:" +msgstr "Project Installatie Path:" #: editor/project_manager.cpp msgid "Browse" @@ -7028,9 +7156,8 @@ msgid "Unnamed Project" msgstr "Naamloos Project" #: editor/project_manager.cpp -#, fuzzy msgid "Can't open project" -msgstr "Verbind..." +msgstr "Kan project niet openen" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -7368,10 +7495,6 @@ msgstr "Projectinstellingen (project.godot)" msgid "General" msgstr "Algemeen" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7508,10 +7631,6 @@ msgstr "Plak Nodes" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Eigenschappen:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Selecteer Eigenschap" @@ -7602,7 +7721,7 @@ msgid "Step" msgstr "Stap(pen):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7611,7 +7730,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7655,7 +7774,7 @@ msgstr "Hoofdletters" msgid "Reset" msgstr "Reset Zoom" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Fout" @@ -7714,6 +7833,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7750,6 +7873,12 @@ msgid "Save New Scene As..." msgstr "Nieuwe Scène Opslaan Als..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7826,6 +7955,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Open Godot online documentatie" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7834,12 +7968,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Omschrijving:" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7940,7 +8075,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Toggle Zichtbaarheid" #: editor/scene_tree_editor.cpp msgid "" @@ -7954,7 +8089,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Hernoem Node" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" @@ -7966,68 +8101,67 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" +msgstr "Selecteer een Node" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Error bij het laden van lettertype." +msgstr "Error bij het laden van sjabloon '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "Map kon niet gemaakt worden." +msgstr "Fout - Kon geen script aanmaken in bestandssysteem." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "" +msgstr "Fout bij het laden script van %s" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "Niet van toepassing" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Open Script Bewerker" +msgstr "Open Script/Kies Locatie" #: editor/script_create_dialog.cpp msgid "Path is empty" -msgstr "" +msgstr "Path is leeg" + +#: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Bestandsnaam is leeg" #: editor/script_create_dialog.cpp msgid "Path is not local" -msgstr "" +msgstr "Path is niet lokaal" #: editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "" +msgstr "Ongeldig basis path" #: editor/script_create_dialog.cpp msgid "Directory of the same name exists" -msgstr "" +msgstr "Directory met dezelfde naam bestaat al" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "Bestand Bestaat, Overschrijven?" +msgstr "Bestand Bestaat, zal herbruikt worden" #: editor/script_create_dialog.cpp msgid "Invalid extension" -msgstr "" +msgstr "Ongeldige extensie" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Verkeerde extensie gekozen" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "Ongeldig Pad." +msgstr "Ongeldig Path" #: editor/script_create_dialog.cpp msgid "Invalid class name" -msgstr "" +msgstr "Ongeldige klassenaam" #: editor/script_create_dialog.cpp #, fuzzy @@ -8036,47 +8170,43 @@ msgstr "Ongeldige index eigenschap naam." #: editor/script_create_dialog.cpp msgid "Script valid" -msgstr "" +msgstr "Script geldig" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Toegestaan: a-z, A-Z, 0-9 en _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Ingebouwd script (in scene bestand)" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" -msgstr "Subscriptie Maken" +msgstr "Maak nieuw script bestand" #: editor/script_create_dialog.cpp msgid "Load existing script file" -msgstr "" +msgstr "Laad bestaand script" #: editor/script_create_dialog.cpp msgid "Language" -msgstr "" +msgstr "Taal" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "Erft:" +msgstr "Erft" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "Klasse:" +msgstr "Klasse Naam" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Verwijder Selectie" +msgstr "Sjabloon" #: editor/script_create_dialog.cpp msgid "Built-in Script" -msgstr "" +msgstr "Ingebouwd Script" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -8092,19 +8222,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8113,42 +8231,29 @@ msgstr "" #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" -msgstr "" +msgstr "Fouten" #: editor/script_editor_debugger.cpp msgid "Child Process Connected" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Laadfouten" +msgstr "Kopieer Fout" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "" +msgstr "Inspecteer vorige instantie" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "" +msgstr "Inspecteer Volgende Instantie" #: editor/script_editor_debugger.cpp msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8170,7 +8275,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Total:" -msgstr "" +msgstr "Totaal:" #: editor/script_editor_debugger.cpp msgid "Video Mem" @@ -8182,7 +8287,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Type" -msgstr "" +msgstr "Type" #: editor/script_editor_debugger.cpp msgid "Format" @@ -8190,7 +8295,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Usage" -msgstr "" +msgstr "Gebruik" #: editor/script_editor_debugger.cpp msgid "Misc" @@ -8214,7 +8319,7 @@ msgstr "" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Snelkoppelingen" #: editor/settings_config_dialog.cpp msgid "Binding" @@ -8230,7 +8335,7 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" -msgstr "" +msgstr "Wijzig Camera FOV" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" @@ -8250,7 +8355,7 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "" +msgstr "Wijzig Sphere Vorm Straal" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" @@ -8258,11 +8363,11 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Wijzig Capsule Vorm Straal" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Wijzig Capsule Vorm Hoogte" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Radius" @@ -8274,43 +8379,39 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "" +msgstr "Wijzig Ray Vorm Lengte" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Wijzig Meng Tijd" +msgstr "Wijzig Cylinder Straal" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Wijzig Meng Tijd" +msgstr "Wijzig Cylinder Hoogte" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Wijzig Ankers en Marges" +msgstr "Wijzig Torus Binnenste Straal" #: modules/csg/csg_gizmos.cpp msgid "Change Torus Outer Radius" -msgstr "" +msgstr "Wijzig Torus Buitenste Straal" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Selecteer de dynamische bibliotheek voor deze ingave" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "" +msgstr "Selecteer afhankelijkheden van de bibliotheek voor deze ingave" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Verwijder Signaal" +msgstr "Verwijder huidige ingave" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "" +msgstr "Dubbelklikken om een nieuwe ingave te creëren" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -8330,23 +8431,23 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "" +msgstr "GDInheemsBibliotheek" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" -msgstr "" +msgstr "Bibliotheek" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" -msgstr "" +msgstr "Status" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "" +msgstr "Bibliotheken: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDInheems" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" @@ -8450,27 +8551,27 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Bewerk X As" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Bewerk Y As" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Bewerk Z As" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "" +msgstr "Cursor Roteer X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "" +msgstr "Cursor Roteer Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "" +msgstr "Cursor Roteer Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" @@ -8586,12 +8687,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Bakken!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Bak de navigatie mesh." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8891,6 +8988,10 @@ msgid "Base Type:" msgstr "Basis Type:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Leden:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Beschikbare Nodes:" @@ -8994,11 +9095,11 @@ msgid "Search VisualScript" msgstr "Verwijder Variabele" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Krijg" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9097,6 +9198,12 @@ msgstr "" "Een vorm moet voorzien worden om CollisionShape2D te laten functioneren. " "Creëer hiervoor alsjeblieft een vorm resource!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9147,6 +9254,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D werkt alleen wanneer het een kind van een Path2D node is." @@ -9275,6 +9388,16 @@ msgstr "" "Een vorm moet gegeven worden om CollisionShape te laten werken. Maak " "alsjeblieft een vorm resource voor deze!" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9298,6 +9421,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D werkt alleen wanneer het een kind van een Path2D node is." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D werkt alleen wanneer het een kind van een Path2D node is." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9333,7 +9476,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9410,11 +9553,6 @@ msgstr "Alarm!" msgid "Please Confirm..." msgstr "Bevestig Alsjeblieft..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Selecteer Modus" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9425,6 +9563,10 @@ msgstr "" "popup*() functies. Ze zichtbaar maken om te bewerken is prima, maar ze " "zullen zich verbergen bij het uitvoeren." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9500,6 +9642,96 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Inzoomen" + +#~ msgid "Class List:" +#~ msgstr "Klasse Lijst:" + +#~ msgid "Search Classes" +#~ msgstr "Zoek Klasses" + +#~ msgid "Public Methods" +#~ msgstr "Publieke Methodes" + +#~ msgid "Public Methods:" +#~ msgstr "Publieke Methodes:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI Thema Items" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI Thema Items:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Eigenschappen:" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Schakel folder status als Favoriet" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Selecteer zojuist bewerkte sub-tegel." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Hele Woorden" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Hoofdlettergevoelig" + +#~ msgid "Ok" +#~ msgstr "Oké" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Zoek in de klasse hiërarchie." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Zoek Klasses" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Ingebouwde scripts kunnen alleen ge-edit worden wanneer de bijbehorende " +#~ "scène geladen is" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Converteer Naar Hoofdletters" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Converteer Naar Kleine Letters" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Uitlijnen op raster" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "0 Graden Roteren" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "90 Graden Roteren" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "180 Graden Roteren" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "270 Graden Roteren" + +#~ msgid "Bake!" +#~ msgstr "Bakken!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Bak de navigatie mesh." + +#~ msgid "Get" +#~ msgstr "Krijg" + #~ msgid "Change Scalar Constant" #~ msgstr "Verander Shalar Constante" @@ -9781,9 +10013,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "Sequentie" -#~ msgid "Switch" -#~ msgstr "Schakelaar" - #~ msgid "Iterator" #~ msgstr "Iterator" @@ -9903,9 +10132,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Kon atlas subtexture niet opslaan:" -#~ msgid "Exporting for %s" -#~ msgstr "Aan het exporteren voor %s" - #~ msgid "Setting Up..." #~ msgstr "Aan Het Opzetten..." @@ -9922,9 +10148,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "reeds ingedrukt" -#~ msgid "just released" -#~ msgstr "reeds losgelaten" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 3a74f61167..47f8918039 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -24,11 +24,14 @@ # Sebastian Pasich <sebastian.pasich@gmail.com>, 2017. # siatek papieros <sbigneu@gmail.com>, 2016. # Zatherz <zatherz@linux.pl>, 2017. +# Tomek <kobewi4e@gmail.com>, 2018. +# Wojcieh Er Zet <wojcieh.rzepecki@gmail.com>, 2018. +# Dariusz Siek <dariuszynski@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-14 08:42+0000\n" -"Last-Translator: RM <synaptykq@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -36,7 +39,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -44,7 +47,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Niepoprawny typ argumentu funkcji convert(), użyj staÅ‚ych TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -52,63 +55,57 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "NiewÅ‚aÅ›ciwe wejÅ›cie %i (nie podano) w wyrażeniu" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" +"self nie może zostać użyte ponieważ obiekt ma wartość null (nie podano)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "NieprawidÅ‚owy indeks we wÅ‚aÅ›ciwoÅ›ci '%s' wÄ™zÅ‚a %s." +msgstr "NieprawidÅ‚owe operandy dla operatora %s, %s i %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "NieprawidÅ‚owy indeks we wÅ‚aÅ›ciwoÅ›ci '%s' wÄ™zÅ‚a %s." +msgstr "NieprawidÅ‚owy indeks we wÅ‚aÅ›ciwoÅ›ci '%s' wÄ™zÅ‚a %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Niepoprawny nazwany indeks '%s' dla bazowego typu %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ":nieprawidÅ‚owy argument typu: " +msgstr "Niepoprawne argumenty do utworzenia '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Przy wywoÅ‚aniu '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" -msgstr "Darmowy" +msgstr "Wolny" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Zrównoważony" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Odbij X" +msgstr "Odbij" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Wstaw Klucz" +msgstr "Wstaw klucz tutaj" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplikuj zaznaczone" +msgstr "Duplikuj klucz(e)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "UsuÅ„ zaznaczone" +msgstr "UsuÅ„ klucz(e)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -139,46 +136,40 @@ msgid "Anim Change Call" msgstr "Animacja - wywoÅ‚anie funkcji" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "WÅ‚aÅ›ciwość:" +msgstr "Åšcieżka wÅ‚aÅ›ciwoÅ›ci" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Typ przeksztaÅ‚cenia" +msgstr "Åšcieżka przeksztaÅ‚cenia 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Åšcieżka wywoÅ‚ania metody" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Åšcieżka krzywej Béziera" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Åšcieżka audio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Zatrzymaj animacjÄ™ (S)" +msgstr "Åšcieżka animacji" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Dodaj Å›cieżkÄ™ animacji" +msgstr "Dodaj Å›cieżkÄ™" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "DÅ‚ugość animacji (w sekundach)." +msgstr "DÅ‚ugość animacji (sekundy)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "PowiÄ™kszenie animacji." +msgstr "ZapÄ™tlenie animacji" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -186,42 +177,36 @@ msgid "Functions:" msgstr "Funkcje:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "NasÅ‚uchiwacz dźwiÄ™ku" +msgstr "Klipy dźwiÄ™kowe:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Klipy" +msgstr "Klipy animacji:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Tryb bez rozproszeÅ„." +msgstr "Włącz/wyłącz tÄ™ Å›cieżkÄ™." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Sposób odÅ›wieżania (jak ta wÅ‚aÅ›ciwość jest ustawiana)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "WÄ™zeÅ‚ animacji" +msgstr "Sposób interpolacji" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Zawijanie pÄ™tli (interpolacja pomiÄ™dzy koÅ„cem a poczÄ…tkiem)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "UsuÅ„ wybranÄ… Å›cieżkÄ™." +msgstr "UsuÅ„ tÄ™ Å›cieżkÄ™." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Czas X-Fade (s):" +msgstr "Czas (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -236,45 +221,42 @@ msgid "Trigger" msgstr "Wyzwalacz" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Funkcje" +msgstr "Przechwyć" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Najbliższy" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "Liniowe" +msgstr "Liniowy" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "SzeÅ›cienny" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Przytnij" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "ZawiÅ„" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Wstaw Klucz" +msgstr "Wstaw klucz" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplikuj wÄ™zeÅ‚(y)" +msgstr "Duplikuj klucz(e)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "UsuÅ„ wÄ™zeÅ‚ (wÄ™zÅ‚y)" +msgstr "UsuÅ„ klucz(e)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -282,11 +264,11 @@ msgstr "UsuÅ„ Å›cieżkÄ™ animacji" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Stworzyć NOWÄ„ Å›cieżkÄ™ dla %s i wstawić klatkÄ™ kluczowÄ…?" +msgstr "Utworzyć NOWÄ„ Å›cieżkÄ™ dla %s i wstawić klucz?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "Utworzyć NOWÄ„ Å›cieżkÄ™ i dodać klatkÄ™ kluczowÄ…?" +msgstr "Utworzyć %d NOWYCH Å›cieżek i wstawić klucze?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_plugin_settings.cpp @@ -305,6 +287,7 @@ msgstr "Wstaw animacjÄ™" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" +"AnimationPlayer nie może animować sam siebie, tylko inne wÄ™zÅ‚y tego typu." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -320,7 +303,7 @@ msgstr "Wstaw klatkÄ™ kluczowÄ…" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Åšcieżki przeksztaÅ‚ceÅ„ dziaÅ‚ajÄ… tylko z wÄ™zÅ‚ami bazujÄ…cymi na Spatial." #: editor/animation_track_editor.cpp msgid "" @@ -329,44 +312,47 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Åšcieżki audio mogÄ… wskazywać tylko na wÄ™zÅ‚y tych typów:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Åšcieżki animacji mogÄ… wskazywać tylko na wÄ™zÅ‚y AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"AnimationPlayer nie może animować sam siebie, tylko inne wÄ™zÅ‚y tego typu." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Nie da siÄ™ dodać nowej Å›cieżki bez korzenia" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Åšcieżka jest nieprawidÅ‚owa, wiÄ™c nie można wstawić klucza." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Åšcieżka nie jest typu Spatial, nie można wstawić klucza" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Åšcieżka jest nieprawidÅ‚owa, wiÄ™c nie można wstawić klucza metody." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "Nie znaleziono VariableGet w skrypcie: " +msgstr "Metoda nie znaleziona w obiekcie: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "PrzemieÅ› klatki kluczowe" +msgstr "Przemieść klucze animacji" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Schowek jest pusty!" +msgstr "Schowek jest pusty" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -376,24 +362,23 @@ msgstr "Przeskaluj klatki kluczowe" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Ta opcja nie dziaÅ‚a dla edycji Beziera, ponieważ jest to tylko jedna Å›cieżka." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Pokaż tylko Å›cieżki z wÄ™złów zaznaczonych w drzewie." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Grupuj Å›cieżki po wÄ™zÅ‚ach lub wyÅ›wietl je jako prostÄ… listÄ™." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "PrzyciÄ…ganie (piksele):" +msgstr "PrzyciÄ…ganie (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Drzewo animacji jest poprawne." +msgstr "Wartość kroku animacji." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -405,19 +390,16 @@ msgid "Edit" msgstr "Edycja" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Drzewo animacji" +msgstr "WÅ‚aÅ›ciwoÅ›ci animacji." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Kopiuj parametry" +msgstr "Kopiuj Å›cieżki" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Wklej parametry" +msgstr "Wklej Å›cieżki" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -427,8 +409,7 @@ msgstr "Skaluj zaznaczone" msgid "Scale From Cursor" msgstr "Skaluj od kursora" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplikuj zaznaczone" @@ -437,16 +418,15 @@ msgid "Duplicate Transposed" msgstr "Duplikuj transponowane" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" msgstr "UsuÅ„ zaznaczone" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "Przejdź do nastÄ™pnego kroku" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "Przejdź do poprzedniego kroku" #: editor/animation_track_editor.cpp @@ -459,11 +439,11 @@ msgstr "Wyczyść animacjÄ™" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Wybierz wÄ™zeÅ‚, który bÄ™dzie animowany:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Użyj krzywych Beziera" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -511,7 +491,7 @@ msgstr "Współczynnik skali:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Wybierz Å›cieżki do skopiowania:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -549,11 +529,11 @@ msgstr "Nie znaleziono" msgid "Replaced %d occurrence(s)." msgstr "ZastÄ…piono %d wystÄ…pieÅ„." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "UwzglÄ™dnij wielkość liter" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "CaÅ‚e sÅ‚owa" @@ -582,16 +562,15 @@ msgid "Reset Zoom" msgstr "Wyzeruj przybliżenie" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Ostrzeżenia" +msgstr "Ostrzeżenia:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "PowiÄ™kszenie (%):" +msgid "Font Size:" +msgstr "Wielkość oryginalna fontu:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linia:" @@ -624,6 +603,7 @@ msgstr "Dodaj" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -680,9 +660,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Rozłącz '%s' z '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Rozłącz '%s' z '%s'" +msgstr "Rozłącz wszystko z sygnaÅ‚u: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -694,19 +673,16 @@ msgid "Disconnect" msgstr "Rozłącz" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Połączony sygnaÅ‚:" +msgstr "Połącz sygnaÅ‚: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Edytuj Połączenia" +msgstr "Edytuj połączenie: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Czy jesteÅ› pewny że chcesz uruchomić wiÄ™cej niż jeden projekt?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Na pewno chcesz usunąć wszystkie połączenia z sygnaÅ‚u \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -714,22 +690,19 @@ msgstr "SygnaÅ‚y" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Na pewno chcesz usunąć wszystkie połączenia z tego sygnaÅ‚u?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Rozłącz" +msgstr "Rozłącz wszystkie" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Edycja" +msgstr "Edytuj..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Metody" +msgstr "Idź do metody" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -760,17 +733,14 @@ msgstr "Ostatnie:" msgid "Search:" msgstr "Szukaj:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "PasujÄ…ce:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Opis:" @@ -831,9 +801,10 @@ msgid "Search Replacement Resource:" msgstr "Szukaj zastÄ™pczego zasobu:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -865,8 +836,8 @@ msgid "Error loading:" msgstr "Błąd Å‚adowania:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "Scena nie zostaÅ‚a wczytana z powodu brakujÄ…cych zależnoÅ›ci:" +msgid "Load failed due to missing dependencies:" +msgstr "Wczytywanie nieudane z powodu brakujÄ…cych zależnoÅ›ci:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -924,14 +895,6 @@ msgstr "ZmieÅ„ wartość sÅ‚ownika" msgid "Thanks from the Godot community!" msgstr "PodziÄ™kowania od spoÅ‚ecznoÅ›ci Godota!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Współtwórcy Godot Engine" @@ -1071,8 +1034,9 @@ msgid "Toggle Audio Bus Bypass Effects" msgstr "Przełącz ominiÄ™cie efektów w magistrali audio" #: editor/editor_audio_buses.cpp +#, fuzzy msgid "Select Audio Bus Send" -msgstr "" +msgstr "Wybierz szynÄ™ wysyÅ‚ki audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -1107,8 +1071,7 @@ msgid "Bus options" msgstr "Opcje magistrali" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikuj" @@ -1276,8 +1239,9 @@ msgstr "Åšcieżka:" msgid "Node Name:" msgstr "Nazwa wÄ™zÅ‚a:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nazwa" @@ -1347,26 +1311,29 @@ msgid "Template file not found:" msgstr "Nie znaleziono pliku szablonu:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Wybierz bieżący katalog" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Plik istnieje, nadpisać?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Wybierz bieżący katalog" +msgid "Select This Folder" +msgstr "Wybierz ten folder" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Skopiuj ÅšcieżkÄ™" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Pokaż w menadżerze plików" +msgid "Open in File Manager" +msgstr "Otwórz w menedżerze plików" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "Pokaż w menadżerze plików" +msgid "Show in File Manager" +msgstr "Pokaż w menedżerze plików" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1401,7 +1368,8 @@ msgid "Open a File or Directory" msgstr "Otwórz plik lub katalog" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Zapisz" @@ -1459,8 +1427,7 @@ msgstr "Katalogi i pliki:" msgid "Preview:" msgstr "PodglÄ…d:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Plik:" @@ -1476,24 +1443,11 @@ msgstr "Przeszukaj źródÅ‚a" msgid "(Re)Importing Assets" msgstr "(Ponowne) importowanie zasobów" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Wyszukaj w Pomocy" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Lista klas:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Przeszukaj klasy" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Góra" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Klasa:" @@ -1510,28 +1464,28 @@ msgid "Brief Description:" msgstr "Krótki opis:" #: editor/editor_help.cpp -msgid "Members" -msgstr "CzÅ‚onkowie" +msgid "Properties" +msgstr "WÅ‚aÅ›ciwoÅ›ci" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "CzÅ‚onkowie:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "WÅ‚aÅ›ciwoÅ›ci:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Metody publiczne" +msgid "Methods" +msgstr "Metody" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Metody publiczne:" +msgid "Methods:" +msgstr "Metody:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Elementy motywu interfejsu" +msgid "Theme Properties" +msgstr "WÅ‚aÅ›ciwoÅ›ci motywu" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Elementy motywu GUI:" +msgid "Theme Properties:" +msgstr "WÅ‚aÅ›ciwoÅ›ci motywu:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1558,31 +1512,34 @@ msgid "Constants:" msgstr "StaÅ‚e:" #: editor/editor_help.cpp -msgid "Description" -msgstr "Opis" +msgid "Class Description" +msgstr "Opis klasy" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "Opis klasy:" #: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Poradniki online:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" "Obecnie nie ma żadnych samouczków dla tej klasy, możesz [color=$color][url=" -"$url]dodać jeden[/url][/kolor] lub [color=$color] [url=$url2]poprosić o " -"jeden[/url][/barl]." +"$url]dodać jeden[/url][/color] lub [color=$color] [url=$url2]poprosić o " +"jakiÅ›[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "WÅ‚aÅ›ciwoÅ›ci" +msgid "Property Descriptions" +msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "Opis wÅ‚aÅ›ciwoÅ›ci:" +msgid "Property Descriptions:" +msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci:" #: editor/editor_help.cpp msgid "" @@ -1593,12 +1550,12 @@ msgstr "" "$url]wysyÅ‚ajÄ…c jÄ…[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metody" +msgid "Method Descriptions" +msgstr "Opisy metod" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "Opis metody:" +msgid "Method Descriptions:" +msgstr "Opisy metod:" #: editor/editor_help.cpp msgid "" @@ -1608,18 +1565,58 @@ msgstr "" "Obecnie nie ma opisu dla tej metody. Pomóż nam, [color=$color][url=" "$url]wysyÅ‚ajÄ…c jÄ…[/url][/color]!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Wyszukaj w Pomocy" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Pokaż wszystko" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Tylko klasy" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Tylko metody" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Tylko sygnaÅ‚y" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Tylko staÅ‚e" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Tylko wÅ‚aÅ›ciwoÅ›ci" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Tylko wÅ‚aÅ›ciwoÅ›ci motywu" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Typ czÅ‚onka" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "Klasa" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "WÅ‚aÅ›ciwość:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Ustaw" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Ustaw wiele:" #: editor/editor_log.cpp msgid "Output:" @@ -1647,6 +1644,11 @@ msgstr "Eksport projektu nie powiódÅ‚ siÄ™, kod błędu to %d." msgid "Error saving resource!" msgstr "Błąd podczas zapisu zasobu!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Zapisz zasób jako..." @@ -1665,7 +1667,7 @@ msgstr "Błąd podczas zapisywania." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "Nie można otworzyć '%s'. Plik mógÅ‚ zostać przeniesiony lub usuniÄ™ty." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1701,12 +1703,22 @@ msgstr "Ta operacja nie może zostać wykonana bez sceny." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Nie udaÅ‚o siÄ™ zapisać sceny. Najprawdopodobniej pewne zależnoÅ›ci " "(instancjonowanie lub dziedziczenie) nie sÄ… speÅ‚nione." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Nie można nadpisać sceny, która wciąż jest otwarta!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Nie udaÅ‚o siÄ™ wczytać MeshLibrary do połączenia!" @@ -1962,6 +1974,14 @@ msgstr "Nie można zaÅ‚adować skryptu dodatku z Å›cieżki: '%s'." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Nie można zaÅ‚adować skryptu dodatku ze Å›cieżki: '%s' W kodzie znajduje siÄ™ " +"błąd, sprawdź skÅ‚adniÄ™." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Nie można wczytać skryptu dodatku ze Å›cieżki: '%s' Skrypt nie dziedziczy po " @@ -2012,15 +2032,18 @@ msgstr "UsuÅ„ ukÅ‚ad" msgid "Default" msgstr "DomyÅ›lny" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Pokaż w systemie plików" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Odtwórz scenÄ™" +msgstr "Odtwórz tÄ™ scenÄ™" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Zamknij inne karty" +msgstr "Zamknij kartÄ™" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2095,7 +2118,7 @@ msgid "Save Scene" msgstr "Zapisz scenÄ™" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Zapisz wszystkie sceny" #: editor/editor_node.cpp @@ -2124,7 +2147,7 @@ msgid "Undo" msgstr "Cofnij" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Ponów" @@ -2153,15 +2176,15 @@ msgid "Tools" msgstr "NarzÄ™dzia" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Otworzyć menadżera projektów?" +msgstr "Otwórz folder danych projektu" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Wyjdź do Listy Projektów" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Debugowanie" @@ -2266,18 +2289,16 @@ msgid "Toggle Fullscreen" msgstr "PeÅ‚ny ekran" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Ustawienia edytora" +msgstr "Otwórz folder ustawieÅ„/danych edytora" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Otwórz folder danych edytora" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Ustawienia edytora" +msgstr "Otwórz folder ustawieÅ„ edytora" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2287,10 +2308,6 @@ msgstr "ZarzÄ…dzanie szablonami eksportu" msgid "Help" msgstr "Pomoc" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Klasy" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2361,13 +2378,12 @@ msgstr "Uruchom niestandardowÄ… scenÄ™" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Zmiana sterownika grafiki wymaga restartu edytora." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Zapisz i importuj ponownie" +msgstr "Zapisz i zrestartuj" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2385,27 +2401,26 @@ msgstr "OdÅ›wież Zmiany" msgid "Disable Update Spinner" msgstr "Wyłącz wiatraczek aktualizacji" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspektor" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importuj" #: editor/editor_node.cpp -msgid "Node" -msgstr "WÄ™zeÅ‚" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "System plików" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspektor" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "WÄ™zeÅ‚" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "RozwiÅ„ foldery" +msgstr "RozwiÅ„ panel dolny" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2484,9 +2499,8 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Edytuj wielokÄ…t" +msgstr "Edytuj wtyczkÄ™" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2510,15 +2524,13 @@ msgid "Status:" msgstr "Status:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Edycja" +msgstr "Edytuj:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Start!" +msgstr "Start" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2540,7 +2552,7 @@ msgstr "Klatka %" msgid "Physics Frame %" msgstr "Klatki Fizyki %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Czas:" @@ -2564,27 +2576,45 @@ msgstr "Czas" msgid "Calls" msgstr "WywoÅ‚ania" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Włącz" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Warstwa" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, wartość %d." +msgstr "Bit %d, wartość %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Pusty]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Przypisz" +msgstr "Przypisz..." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Nie można utworzyć ViewportTexture na zasobach zapisanych jako plik.\n" +"Zasób musi należeć do sceny." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"Nie można utworzyć ViewportTexture na tym zasobie, ponieważ nie jest " +"ustawiony jako lokalny dla sceny.\n" +"Włącz mu wÅ‚aÅ›ciwość \"lokalny dla sceny\" (i wszystkim zasobom, które go " +"zawierajÄ…, aż do wÄ™zÅ‚a)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2600,13 +2630,8 @@ msgid "New %s" msgstr "Nowy %s" #: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy msgid "Make Unique" -msgstr "Utwórz unikatowy zasób" - -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Pokaż w systemie plików" +msgstr "Zrób unikalny" #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -2616,7 +2641,8 @@ msgstr "Pokaż w systemie plików" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Wklej" @@ -2629,36 +2655,32 @@ msgstr "Konwersja do %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Otwórz w edytorze" +msgstr "Otwórz edytor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Wybrany wÄ™zeÅ‚ to nie Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Rozmiar komórki:" +msgstr "Rozmiar: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Strona: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Nowa nazwa:" +msgstr "Nowy klucz:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Nowa nazwa:" +msgstr "Nowa wartość:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Dodaj parÄ™ klucz/wartość" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2752,9 +2774,8 @@ msgid "Can't open export templates zip." msgstr "Nie można otworzyć pliku zip szablonów eksportu." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "NieprawidÅ‚owy format pliku version.txt w szablonach." +msgstr "NieprawidÅ‚owy format pliku version.txt w szablonach: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2819,6 +2840,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Instalacja szablonów siÄ™ nie udaÅ‚a. Problematyczne archiwa szablonów mogÄ… " +"być znalezione w '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2899,9 +2922,8 @@ msgid "Download Templates" msgstr "Pobierz szablony eksportu" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Wybierz serwer z listy: " +msgstr "Wybierz serwer z listy: (Shift+Klik: Otwórz w przeglÄ…darce)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2910,18 +2932,20 @@ msgstr "" "typu plików nie bÄ™dzie zapisana!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Ulubione" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "Nie można przejść do '%s' - nie znaleziono w tym systemie plików!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "WyÅ›wietlanie elementów jako siatkÄ™ miniatur" +msgstr "WyÅ›wietl elementy jako siatkÄ™ miniatur." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "WyÅ›wietlanie elementów jako listÄ™" +msgstr "WyÅ›wietl elementy jako listÄ™." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2949,7 +2973,7 @@ msgstr "Błąd duplikacji:" msgid "Unable to update dependencies:" msgstr "Nie można zaktualizować zależnoÅ›ci:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nie podano nazwy" @@ -2986,22 +3010,6 @@ msgid "Duplicating folder:" msgstr "Duplikowanie Folderu:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "RozwiÅ„ foldery" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "ZwiÅ„ foldery" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "ZmieÅ„ nazwÄ™..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "PrzenieÅ› Do..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Otwórz ScenÄ™/y" @@ -3010,6 +3018,14 @@ msgid "Instance" msgstr "Instancja" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Dodaj do ulubionych" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "UsuÅ„ z ulubionych" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Edytuj ZależnoÅ›ci..." @@ -3017,19 +3033,33 @@ msgstr "Edytuj ZależnoÅ›ci..." msgid "View Owners..." msgstr "Pokaż wÅ‚aÅ›cicieli..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "ZmieÅ„ nazwÄ™..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplikuj..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "PrzenieÅ› Do..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Nowy skrypt" +msgstr "Nowy skrypt..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Zapisz zasób jako..." +msgstr "Nowy zasób..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "RozwiÅ„ wszystko" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "ZwiÅ„ wszystko" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3051,27 +3081,16 @@ msgid "Re-Scan Filesystem" msgstr "Przeskanuj system plików ponownie" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Ustaw folder jako ulubiony" +msgid "Toggle split mode" +msgstr "Przełącz tryb podziaÅ‚u" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Wybierz aktualnie edytowany sub-tile." +msgid "Search files" +msgstr "Przeszukaj pliki" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Utwórz instancje wybranej sceny/scen jako dziecko wybranego wÄ™zÅ‚a." - -#: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Przeszukaj klasy" +msgstr "Utwórz instancjÄ™ wybranej sceny/scen jako dziecko wybranego wÄ™zÅ‚a." #: editor/filesystem_dock.cpp msgid "" @@ -3081,51 +3100,37 @@ msgstr "" "Skanowanie plików,\n" "ProszÄ™ czekać..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "PrzenieÅ›" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Folder o podanej nazwie istnieje już w tej lokalizacji." +msgstr "W tej lokalizacji istnieje już plik lub folder o podanej nazwie." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Nadpisz" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "Utwórz Skrypt" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Znajdź tile" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Szukaj" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "CaÅ‚e sÅ‚owa" +msgid "Find in Files" +msgstr "Znajdź w plikach" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "UwzglÄ™dnij wielkość liter" +msgid "Find:" +msgstr "Znajdź:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Folder:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Filtr:" +msgid "Filters:" +msgstr "Filtry:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3141,52 +3146,48 @@ msgid "Cancel" msgstr "Anuluj" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Znajdź: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "ZastÄ…p" +msgstr "ZastÄ…p: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "ZastÄ…p wszystkie" +msgstr "ZastÄ…p wszystkie (nie można cofnąć)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Zapisywanie..." +msgstr "Wyszukiwanie..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Wyszukaj w tekÅ›cie" +msgstr "Wyszukiwanie zakoÅ„czone" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "BÅÄ„D: animacja o takiej nazwie już istnieje!" +msgstr "Nazwa grupy już istnieje." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "NiewÅ‚aÅ›ciwa nazwa." +msgstr "niewÅ‚aÅ›ciwa nazwa grupy." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupy" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Dodaj do Grupy" +msgstr "WÄ™zÅ‚y nie w grupie" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Filtruj wÄ™zÅ‚y" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Edytuj grupy" +msgstr "WÄ™zÅ‚y w grupie" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3197,9 +3198,8 @@ msgid "Remove from Group" msgstr "UsuÅ„ z Grupy" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Grupy obrazków" +msgstr "ZarzÄ…dzaj grupami" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3308,17 +3308,12 @@ msgstr "Importuj ponownie" msgid "Failed to load resource." msgstr "Nie udaÅ‚o siÄ™ wczytać zasobu." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "RozwiÅ„ wszystkie wÅ‚aÅ›ciwoÅ›ci" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "ZwiÅ„ wszystkie wÅ‚aÅ›ciwoÅ›ci" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3335,9 +3330,8 @@ msgid "Paste Params" msgstr "Wklej parametry" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Schowka zasobów jest pusty!" +msgstr "Edytuj schowek zasobów" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3380,9 +3374,8 @@ msgid "Object properties." msgstr "WÅ‚aÅ›ciwoÅ›ci obiektu." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtruj wÄ™zÅ‚y" +msgstr "Filtruj wÅ‚aÅ›ciwoÅ›ci" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3397,37 +3390,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Wybierz wÄ™zeÅ‚ do edycji sygnałów i grup." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Edytuj wielokÄ…t" +msgstr "Edytuj wtyczkÄ™" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Utwórz solucjÄ™ C#" +msgstr "Utwórz wtyczkÄ™" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Wtyczki" +msgstr "Nazwa wtyczki:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Podfolder:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "JÄ™zyk" +msgstr "JÄ™zyk:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Skrypt prawidÅ‚owy" +msgstr "Nazwa skryptu:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Aktywować teraz?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3456,7 +3444,7 @@ msgstr "Usuń wielokÄ…t i punkt" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" -msgstr "Utwórz nowy wielokÄ…t" +msgstr "Utwórz nowy wielokÄ…t od zera" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -3486,15 +3474,15 @@ msgstr "Dodaj animacjÄ™" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Wczytaj" +msgstr "Wczytaj..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Ten typ wÄ™zÅ‚a nie może zostać użyty. Tylko wÄ™zÅ‚y korzenia sÄ… dozwolone." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3504,66 +3492,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree jest nieaktywne.\n" +"Aktywuj, by umożliwić odtwarzanie. Sprawdź ostrzeżenia wÄ™zÅ‚a, jeÅ›li " +"aktywacja siÄ™ nie powiedzie." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Wybierz pozycjÄ™ mieszania w przestrzeni" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Wybierz i przesuÅ„ punkty, utwórz punkty używajÄ…c PPM." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Usuwanie punktów" +msgstr "Utwórz punkty." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "RMB: Wymaż Punkt." +msgstr "UsuÅ„ punkty." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "PrzesuÅ„ Punkt" +msgstr "Punkt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "WÄ™zeÅ‚ animacji" +msgstr "Otwórz wÄ™zeÅ‚ animacji" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Akcja %s już istnieje!" +msgstr "TrójkÄ…t już istnieje" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D nie należy do wÄ™zÅ‚a AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Nie ma żadnego trójkÄ…ta, wiÄ™c nie może zajść mieszanie." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Utwórz trójkÄ…ty poprzez łączenie punktów." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." -msgstr "" +msgstr "UsuÅ„ punkty i trójkÄ…ty." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Wygeneruj trójkÄ…ty mieszania automatycznie (zamiast rÄ™cznie)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3571,6 +3557,11 @@ msgstr "" msgid "Snap" msgstr "PrzyciÄ…gaj" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Mieszanie:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3578,20 +3569,24 @@ msgstr "Edytuj filtry" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "WÄ™zeÅ‚ wyjÅ›ciowy nie może być dodany do drzewa mieszania." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Nie można połączyć, port może być w użyciu lub połączenie może być " +"nieprawidÅ‚owe." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Nie ustawiono odtwarzacza animacji, wiÄ™c nie można uzyskać nazw Å›cieżek." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Åšcieżka odtwarzacza jest nieprawidÅ‚owa, wiÄ™c nie można uzyskać nazw Å›cieżek." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3599,23 +3594,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Odtwarzacz animacji nie ma prawidÅ‚owej Å›cieżki korzenia, wiÄ™c nie można " +"uzyskać nazw Å›cieżek." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Dodaj wÄ™zeÅ‚" +msgstr "Dodaj wÄ™zeÅ‚..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Edytuj filtry" +msgstr "Edytuj filtrowane Å›cieżki:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Edytowalne dzieci" +msgstr "Włącz filtrowanie" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3635,7 +3629,7 @@ msgstr "ZmieÅ„ nazwÄ™ animacji:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" -msgstr "Usunąć animacje?" +msgstr "Usunąć animacjÄ™?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3643,14 +3637,12 @@ msgid "Remove Animation" msgstr "UsuÅ„ animacjÄ™" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "BÅÄ„D: błędna nazwa animacji!" +msgstr "NieprawidÅ‚owa nazwa animacji!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "BÅÄ„D: animacja o takiej nazwie już istnieje!" +msgstr "Nazwa animacji już istnieje!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3660,7 +3652,7 @@ msgstr "ZmieÅ„ nazwÄ™ animacji" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Blend Next Changed" -msgstr "Zmienione nastÄ™pne przejÅ›cie animacji" +msgstr "Mieszaj nastÄ™pnÄ… zmienionÄ…" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" @@ -3672,17 +3664,15 @@ msgstr "Wczytaj animacjÄ™" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "Duplikuj animacje" +msgstr "Duplikuj animacjÄ™" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "BÅÄ„D: Brak animacji do skopiowania!" +msgstr "Brak animacji do skopiowania!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "BÅÄ„D: Brak zasobu animacji w schowku!" +msgstr "Brak zasobu animacji w schowku!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3693,9 +3683,8 @@ msgid "Paste Animation" msgstr "Wklej animacjÄ™" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "BÅÄ„D: Brak animacji do edycji!" +msgstr "Brak animacji do edycji!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3739,14 +3728,12 @@ msgid "New" msgstr "Nowy" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "PrzejÅ›cia" +msgstr "Edytuj przejÅ›cia..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Otwórz w edytorze" +msgstr "Otwórz w inspektorze" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3759,7 +3746,7 @@ msgstr "Auto odtwarzanie po zaÅ‚adowaniu" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Onion Skinning" -msgstr "Tryb Å‚usek cebuli" +msgstr "Tryb warstw cebuli" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -3799,18 +3786,16 @@ msgid "Differences Only" msgstr "Tylko różnice" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Force White Modulate" -msgstr "WymuÅ› BiaÅ‚e Cieniowanie" +msgstr "WymuÅ› biaÅ‚e cieniowanie" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" msgstr "Dołącz Gizmo (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Wklej animacjÄ™" +msgstr "Przypnij AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3838,37 +3823,35 @@ msgstr "NastÄ™pny (automatyczna kolejka):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "Czas PrzejÅ›cia MiÄ™dzy Animacjami" +msgstr "Czasy przejÅ›cia pomiÄ™dzy animacjami" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" msgstr "Koniec" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "PoÅ›redni" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Synchronizuj" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Na koÅ„cu" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Przejdź" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "PoczÄ…tkowy i koÅ„cowy wÄ™zeÅ‚ sÄ… potrzebne do podprzejÅ›cia." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Nie znaleziono w Å›cieżce zasobów." +msgstr "Nie znaleziono zasobu do odtworzenia w Å›cieżce: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3876,34 +3859,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Wybierz i przesuÅ„ wÄ™zÅ‚y.\n" +"PPM, by dodać nowe wÄ™zÅ‚y.\n" +"Shift+LPM, by utworzyć połączenia." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Utwórz nowy %s" +msgstr "Utwórz nowe wÄ™zÅ‚y." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Podłącz wÄ™zÅ‚y" +msgstr "Połącz wÄ™zÅ‚y." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "UsuÅ„ wybranÄ… Å›cieżkÄ™." +msgstr "UsuÅ„ wybrany wÄ™zeÅ‚ lub przejÅ›cie." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Przełącz autoodtwarzanie tej animacji na starcie, restart lub przewiniÄ™cie " +"do zera." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Ustaw koniec animacji. To jest przydatne dla podprzejść." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "PrzejÅ›cie" +msgstr "PrzejÅ›cie: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3957,10 +3941,6 @@ msgid "Amount:" msgstr "IloÅ›c:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Mieszanie:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Mieszanie 0:" @@ -3981,14 +3961,12 @@ msgid "Add Input" msgstr "Dodaj WejÅ›cie" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Clear Auto-Advance" -msgstr "Wyczyść Auto-Progres" +msgstr "Wyczyść autopostÄ™p" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Set Auto-Advance" -msgstr "Ustaw Auto-Progres" +msgstr "Ustaw autopostÄ™p" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" @@ -4032,7 +4010,7 @@ msgstr "WÄ™zeÅ‚ Skalowania Czasu" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "WÄ™zeÅ‚ TimeSeek" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" @@ -4105,14 +4083,12 @@ msgid "Asset Download Error:" msgstr "Błąd Podczas Pobierania Zasobu:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Pobieranie" +msgstr "Pobieranie (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Pobieranie" +msgstr "Pobieranie..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4139,22 +4115,20 @@ msgid "Download for this asset is already in progress!" msgstr "Pobieranie tego zasobu jest już w toku!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "pierwszy" +msgstr "PoczÄ…tek" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Poprzednia zakÅ‚adka" +msgstr "Wstecz" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" -msgstr "NastÄ™pny" +msgstr "Dalej" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Koniec" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4281,29 +4255,28 @@ msgid "Create new horizontal and vertical guides" msgstr "Utwórz nowe poziome i pionowe prowadnice" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "PrzesuÅ„ pivot" +msgstr "PrzesuÅ„ oÅ›" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Edytuj CanvasItem" +msgstr "Obróć CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "PrzesuÅ„ DziaÅ‚anie" +msgstr "PrzesuÅ„ zakotwiczenie" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Edytuj CanvasItem" +msgstr "ZmieÅ„ rozmiar CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "Skaluj CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "Edytuj CanvasItem" +msgstr "PrzesuÅ„ CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4322,19 +4295,16 @@ msgid "Paste Pose" msgstr "Wklej pozÄ™" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "Oddal" +msgstr "Pomniejsz" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "Wyzeruj przybliżenie" +msgstr "Wyzeruj powiÄ™kszenie" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Przybliż" +msgstr "PowiÄ™ksz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4367,6 +4337,10 @@ msgid "Rotate Mode" msgstr "Tryb Rotacji" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Tryb skalowania" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4384,16 +4358,14 @@ msgid "Pan Mode" msgstr "Tryb przesuwania" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "PrzyciÄ…ganie" +msgstr "Przełącz przyciÄ…ganie." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "Użyj przyciÄ…gania" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "Opcje przyciÄ…gania" @@ -4435,9 +4407,8 @@ msgid "Snap to node sides" msgstr "PrzyciÄ…gaj do boków wÄ™zÅ‚a" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "PrzyciÄ…gaj do kotwicy wÄ™zÅ‚a" +msgstr "PrzyciÄ…gaj do Å›rodka wÄ™zÅ‚a" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4466,6 +4437,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "Odblokuj selekcjÄ™ wÄ™złów podrzÄ™dnych." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "Opcje szkieletu" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Pokaż koÅ›ci" @@ -4479,12 +4454,11 @@ msgstr "Wyczyść ÅaÅ„cuch IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Utwórz wÅ‚asne koÅ›ci z wÄ™złów" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Wyczyść KoÅ›ci" +msgstr "Wyczyść wÅ‚asne koÅ›ci" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4517,6 +4491,10 @@ msgid "Show Viewport" msgstr "Pokaż widok" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Pokaż ikony grup i blokady" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "WyÅ›rodkowywanie na zaznaczeniu" @@ -4529,9 +4507,8 @@ msgid "Layout" msgstr "UkÅ‚ad" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Wstaw Klucze" +msgstr "Wstaw klucze." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4596,9 +4573,8 @@ msgid "Set Handle" msgstr "Ustaw Uchwyt" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "CzÄ…steczki" +msgstr "CzÄ…steczki CPU" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4620,11 +4596,11 @@ msgstr "Flat1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" -msgstr "Ease in" +msgstr "Åagodne wejÅ›cie" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "Ease out" +msgstr "Åagodne wyjÅ›cie" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" @@ -4635,9 +4611,8 @@ msgid "Modify Curve Point" msgstr "Zmodyfikuj punkt krzywej" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Modify Curve Tangent" -msgstr "Zamknij krzywÄ…" +msgstr "Modyfikuj stycznÄ… krzywej" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" @@ -4652,14 +4627,12 @@ msgid "Remove point" msgstr "UsuÅ„ punkt" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left linear" -msgstr "Liniowe" +msgstr "Lewe liniowe" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right linear" -msgstr "Widok z prawej" +msgstr "Prawe liniowe" #: editor/plugins/curve_editor_plugin.cpp msgid "Load preset" @@ -4671,7 +4644,7 @@ msgstr "UsuÅ„ punkt krzywej" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Przełącz stycznÄ… liniowÄ… krzywej" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" @@ -4679,7 +4652,7 @@ msgstr "Przytrzymaj Shift aby edytować styczne indywidualnie" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "Wypal sondÄ™ GI" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -4707,7 +4680,7 @@ msgstr "Stwórz Occluder Polygon" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." -msgstr "Utwórz nowy wielokÄ…t." +msgstr "Utwórz nowy wielokÄ…t od zera." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit existing polygon:" @@ -4743,7 +4716,7 @@ msgstr "Nie dziaÅ‚a na głównym węźle sceny!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Utwórz ksztaÅ‚t trójsiatki" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" @@ -4775,13 +4748,12 @@ msgid "MeshInstance lacks a Mesh!" msgstr "MeshInstance nie posiada siatki!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has not surface to create outlines from!" -msgstr "Siatka nie posiada powierzchni z której można utworzyć zarys!" +msgstr "Siatka nie posiada powierzchni, z której można by utworzyć obrysy!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Typ prymitywu siatki jest inny niż PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4797,19 +4769,20 @@ msgstr "Siatka" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "" +msgstr "Utwórz statyczne ciaÅ‚o trójsiatki" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" msgstr "Utwórz statyczne ciaÅ‚o wypukÅ‚e" #: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Utwórz trójsiatkÄ™ sÄ…siednich kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "" +msgstr "Utwórz wypukÅ‚ego sÄ…siada kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -4858,11 +4831,11 @@ msgstr "Aktualizuj ze sceny" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "" +msgstr "Nie ustawiono źródÅ‚a siatki (i nie ma MultiMesh ustawionego w węźle)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "" +msgstr "Nie ustawiono źródÅ‚a siatki (a MultiMesh nie posiada siatki)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." @@ -4870,25 +4843,23 @@ msgstr "ŹródÅ‚o siatki jest niepoprawne (nieprawidÅ‚owa Å›cieżka)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "" +msgstr "ŹródÅ‚o siatki jest nieprawidÅ‚owe (nie jest MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "" +msgstr "ŹródÅ‚o siatki jest nieprawidÅ‚owe (nie zawiera zasobu Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." msgstr "Nie ustawiono źródÅ‚a pÅ‚aszczyzny." #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Surface source is invalid (invalid path)." -msgstr "PÅ‚aszczyzna jest niepoprawna(nieprawidÅ‚owa Å›cieżka)" +msgstr "ŹródÅ‚o powierzchni jest niepoprawne (nieprawidÅ‚owa Å›cieżka)." #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Surface source is invalid (no geometry)." -msgstr "PÅ‚aszczyzna jest niepoprawna (brak geometrii)" +msgstr "ŹródÅ‚o powierzchni jest niepoprawne (brak geometrii)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." @@ -4896,24 +4867,21 @@ msgstr "PÅ‚aszczyzna jest niepoprawna (brak Å›cian)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." -msgstr "" +msgstr "Rodzic nie ma staÅ‚ych powierzchni do zapeÅ‚nienia." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Couldn't map area." msgstr "Nie można zmapować obszaru." #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Select a Source Mesh:" -msgstr "Wybierz źródÅ‚o siatki" +msgstr "Wybierz siatkÄ™ źródÅ‚owÄ…:" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Select a Target Surface:" -msgstr "Wybierz docelowÄ… przestrzeÅ„" +msgstr "Wybierz docelowÄ… pÅ‚aszczyznÄ™:" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Populate Surface" msgstr "ZapeÅ‚nij powierzchniÄ™" @@ -4922,9 +4890,8 @@ msgid "Populate MultiMesh" msgstr "ZapeÅ‚nij MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Target Surface:" -msgstr "Docelowa przestrzeÅ„" +msgstr "Docelowa powierzchnia:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" @@ -4943,7 +4910,6 @@ msgid "Z-Axis" msgstr "OÅ›-Z" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Mesh Up Axis:" msgstr "OÅ› \"do góry\" siatki:" @@ -4960,7 +4926,6 @@ msgid "Random Scale:" msgstr "Losowa skala:" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Populate" msgstr "ZapeÅ‚nij" @@ -4969,13 +4934,13 @@ msgid "Create Navigation Polygon" msgstr "Utwórz wielokÄ…t nawigacyjny" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Generowanie AABB" +msgid "Generating Visibility Rect" +msgstr "Generowanie prostokÄ…ta widzialnoÅ›ci" #: editor/plugins/particles_2d_editor_plugin.cpp +#, fuzzy msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "Punkt można wstawić tylko w materiaÅ‚ obróbki ParticlesMaterial" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" @@ -4986,9 +4951,8 @@ msgid "No pixels with transparency > 128 in image..." msgstr "Brak pikseli z przeźroczystoÅ›ciÄ… > 128 w obrazie..." #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility Rect" -msgstr "Wygeneruj widzialność prostokÄ…ta" +msgstr "Wygeneruj prostokÄ…ta widzialnoÅ›ci" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" @@ -5000,6 +4964,11 @@ msgstr "UsuÅ„ maskÄ™ emisji" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Przekonwertuj na czÄ…steczki CPU" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "CzÄ…steczki" @@ -5053,9 +5022,8 @@ msgid "Surface Points" msgstr "Punkty powierzchni" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Surface Points+Normal (Directed)" -msgstr "Punkty powierzchni+Normalne (Skierowane)" +msgstr "Punkty powierzchni+normalna (skierowane)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" @@ -5071,13 +5039,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "MateriaÅ‚ przetwarzajÄ…cy typu 'ParticlesMaterial' jest wymagany." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Generuj AABB" +msgid "Generating AABB" +msgstr "Generowanie AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Wielkie litery" +msgid "Generate AABB" +msgstr "Generuj AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5167,12 +5134,12 @@ msgstr "Opcje" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Odbij kÄ…ty uchwytów" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Odbij dÅ‚ugość uchwytów" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5211,56 +5178,49 @@ msgid "Remove In-Control Point" msgstr "UsuÅ„ punkt Å›cieżki" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "PrzesuÅ„ Punkt" +msgstr "PrzesuÅ„ złącze" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "WÅ‚aÅ›ciwość skeleton wÄ™zÅ‚a Polygon2D nie wskazuje na wÄ™zeÅ‚ Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Pokaż koÅ›ci" +msgstr "Synchronizuj koÅ›ci" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Utwórz MapÄ™ UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Utwórz Polygon" +msgstr "Utwórz wielokÄ…t i UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Podziel punkt ze sobÄ…." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "PodziaÅ‚ nie może uformować istniejÄ…cej krawÄ™dzi." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "Akcja %s już istnieje!" +msgstr "PodziaÅ‚ już istnieje." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Dodaj punkt" +msgstr "Dodaj podziaÅ‚" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Niepoprawna Å›cieżka!" +msgstr "Niepoprawny podziaÅ‚: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "UsuÅ„ punkt" +msgstr "UsuÅ„ podziaÅ‚" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5268,7 +5228,7 @@ msgstr "Przekształć MapÄ™ UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Maluj wagi koÅ›ci" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5276,27 +5236,23 @@ msgstr "WielokÄ…t 2D UV Edytor" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Edytuj wielokÄ…t" +msgstr "WielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Podziel ÅšcieżkÄ™" +msgstr "PodziaÅ‚y" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Utwórz KoÅ›ci" +msgstr "KoÅ›ci" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "Utwórz Polygon" +msgstr "Utwórz wielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -5328,24 +5284,23 @@ msgstr "Skaluj WielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Połącz dwa punkty, by utworzyć podziaÅ‚" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Wybierz podziaÅ‚, by go usunąć" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Maluj wagi z podanÄ… intensywnoÅ›ciÄ…" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Odmaluj wagi z podanÄ… intensywnoÅ›ciÄ…" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "PromieÅ„:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5360,9 +5315,8 @@ msgid "Clear UV" msgstr "Wyczyść UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Ustawienia GridMap" +msgstr "Ustawienia siatki" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5373,34 +5327,28 @@ msgid "Grid" msgstr "Siatka" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Konfiguruj przyciÄ…ganie" +msgstr "Konfiguruj siatkÄ™:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Offset siatki:" +msgstr "PrzesuniÄ™cie X siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Offset siatki:" +msgstr "PrzesuniÄ™cie Y siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Krok siatki:" +msgstr "Krok X siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Krok siatki:" +msgstr "Krok Y siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Skaluj WielokÄ…t" +msgstr "Synchronizuj koÅ›ci z wielokÄ…tem" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5428,39 +5376,37 @@ msgid "Paste Resource" msgstr "Wklej zasób" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Otwórz w edytorze" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instancja:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Typ:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Otwórz w edytorze" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Wczytaj Zasób" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Åšcieżka zasobu" +msgstr "WstÄ™pny Å‚adowacz zasobów" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "WÄ™zeÅ‚ AnimationTree nie ma ustawionej Å›cieżki do AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Drzewo animacji jest wadliwe." +msgstr "Åšcieżka do AnimationPlayer jest nieprawidÅ‚owa" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5471,19 +5417,20 @@ msgid "Close and save changes?" msgstr "Zamknąć i zapisać zmiany?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Błąd wczytywania obrazu:" +msgstr "Błąd pisania pliku tekstowego:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Błąd: nie udaÅ‚o siÄ™ wczytać pliku." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Nie można wczytać obrazu" +msgstr "Błąd nie udaÅ‚o siÄ™ wczytać pliku." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Błąd podczas zapisywania TileSet!" +msgstr "Błąd zapisywania pliku!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5502,19 +5449,16 @@ msgid "Error importing" msgstr "Błąd importowania" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Utwórz katalog..." +msgstr "Nowy plik tekstowy..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "Otwórz plik" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Zapisz jako..." +msgstr "Zapisz plik jako..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5531,12 +5475,11 @@ msgstr " Referencja klas" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Przełącz alfabetyczne sortowanie listy metod." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" -msgstr "Sortuj:" +msgstr "Sortuj" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp @@ -5563,9 +5506,8 @@ msgid "File" msgstr "Plik" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Pokaż pliki" +msgstr "Nowy plik tekstowy" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5580,11 +5522,7 @@ msgid "Copy Script Path" msgstr "Skopiuj Å›cieżkÄ™ skryptu" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Pokaż w systemie plików" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "Poprzedni plik" #: editor/plugins/script_editor_plugin.cpp @@ -5655,18 +5593,14 @@ msgid "Keep Debugger Open" msgstr "Pozostaw Debugger otwarty" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "Debugowanie z zewnÄ™trznego edytora" +msgid "Debug with External Editor" +msgstr "Debugowanie z zewnÄ™trznym edytorem" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "Otwórz dokumentacjÄ™ online" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Szukaj w hierarchii klas." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Poszukaj w dokumentacji referencyjnej." @@ -5703,39 +5637,28 @@ msgid "Debugger" msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Wyszukaj w Pomocy" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Przeszukaj klasy" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Wbudowany skrypty mogÄ… być edytowane tylko, po zaÅ‚adowaniu sceny do której " -"należą" +msgid "Search Results" +msgstr "Wyniki wyszukiwania" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Linia:" +msgstr "Linia" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignoruj)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Przejdź do funkcji" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Jedynie zasoby z systemu plików mogÄ… zostać tu upuszczone." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "UzupeÅ‚nij symbol" +msgstr "Podejrzyj symbol" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5759,11 +5682,11 @@ msgstr "Wielkie litery na poczÄ…tku słów" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "PodÅ›wietlacz skÅ‚adni" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Standardowy" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5816,11 +5739,11 @@ msgid "Trim Trailing Whitespace" msgstr "Przytnij koÅ„cowe spacje" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "ZamieÅ„ wciÄ™cia na spacje" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "ZamieÅ„ wciÄ™cia na tabulatory" #: editor/plugins/script_text_editor.cpp @@ -5830,44 +5753,34 @@ msgstr "Automatyczne wciÄ™cie" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "Przełącz puÅ‚apkÄ™" +msgstr "Przełącz punkt wstrzymania" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "UsuÅ„ wszystkie puÅ‚apki" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "Przejdź do nastÄ™pnej puÅ‚apki" +msgstr "UsuÅ„ wszystkie punkty wstrzymania" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "Przejdź do poprzedniej puÅ‚apki" +msgid "Go to Next Breakpoint" +msgstr "Przejdź do nastÄ™pnego punktu wstrzymania" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Convert To Uppercase" -msgstr "Wielkie litery" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "MaÅ‚e litery" +msgid "Go to Previous Breakpoint" +msgstr "Przejdź do poprzedniego punktu wstrzymania" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Znajdź poprzedni" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Filtrowanie plików..." +msgid "Find in Files..." +msgstr "Znajdź w plikach..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Przejdź do funkcji..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "Przejdź do linii..." #: editor/plugins/script_text_editor.cpp @@ -5880,40 +5793,35 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Ten szkielet nie ma koÅ›ci. Stwórz jakieÅ› wÄ™zÅ‚y potomne Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Szkielet..." +msgstr "Szkielet 2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Utwórz pozÄ™ spoczynkowÄ… (z koÅ›ci)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Ustaw koÅ›ci do pozy spoczynkowej" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Utwórz siatkÄ™ nawigacyjnÄ… (Navigation Mesh)" +msgstr "Utwórz fizyczne koÅ›ci" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Szkielet..." +msgstr "Szkielet" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Utwórz solucjÄ™ C#" +msgstr "Utwórz fizyczny szkielet" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Uruchom" +msgstr "Odtwórz IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5941,39 +5849,41 @@ msgstr "Transformacja osi Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Pokaż transformacjÄ™ pÅ‚aszczyzny." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling: " -msgstr "Skala:" +msgstr "Skalowanie: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "TÅ‚umaczenia:" +msgstr "Przesuwanie: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Obracanie o %s stopni." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Keying is disabled (no key inserted)." msgstr "Kluczowanie jest wyłączone (nie wstawiono klucza)." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Animation Key Inserted." msgstr "Wstawiono klucz animacji." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy +msgid "Pitch" +msgstr "Wysokość" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "Odchylenie" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Narysowane obiekty" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" msgstr "Zmiany materiaÅ‚u" @@ -5982,9 +5892,8 @@ msgid "Shader Changes" msgstr "Zmiany Shadera" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes" -msgstr "OdÅ›wież Zmiany" +msgstr "Zmiany powierzchni" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" @@ -6055,9 +5964,8 @@ msgid "This operation requires a single selected node." msgstr "Ta operacja wymaga pojedynczego wybranego wÄ™zÅ‚a." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "WyÅ›wietlaj informacje" +msgstr "Zablokuj obrót widoku" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6082,7 +5990,7 @@ msgstr "WyÅ›wietlaj Å›rodowisko" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "View Gizmos" -msgstr "WyÅ›wietlaj uchwyty" +msgstr "Pokaż uchwyty" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" @@ -6097,18 +6005,16 @@ msgid "Half Resolution" msgstr "PoÅ‚owa rozdzielczoÅ›ci" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Audio Listener" -msgstr "NasÅ‚uchiwacz dźwiÄ™ku" +msgstr "SÅ‚uchacz dźwiÄ™ku" #: editor/plugins/spatial_editor_plugin.cpp msgid "Doppler Enable" msgstr "Efekt Dopplera" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Tworzenie podglÄ…du Mesh" +msgstr "PodglÄ…d kinowy" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6139,6 +6045,10 @@ msgid "Freelook Speed Modifier" msgstr "Zmiennik prÄ™dkoÅ›ci \"Wolnego widoku\"" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "Obroty widoku zablokowane" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Okno dialogowe XForm" @@ -6170,7 +6080,7 @@ msgstr "Tryb skalowania (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Local Coords" +msgstr "Lokalne koordynaty" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -6225,29 +6135,20 @@ msgid "Align Selection With View" msgstr "Dopasuj zaznaczenie do widoku" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Wybierz narzÄ™dzie" +msgstr "NarzÄ™dzie wyboru" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" -msgstr "PrzenieÅ›" +msgstr "NarzÄ™dzie poruszania" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "NarzÄ™dzie Obracanie" +msgstr "NarzÄ™dzie obracania" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "NarzÄ™dzia Skala" - -#: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "PrzyciÄ…gaj do siatki" +msgstr "NarzÄ™dzie skalowania" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -6259,7 +6160,7 @@ msgstr "PrzeksztaÅ‚canie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "PrzyciÄ…gnij obiekt do podÅ‚ogi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6290,9 +6191,8 @@ msgid "4 Viewports" msgstr "4 widoki" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "WyÅ›wietlaj uchwyty" +msgstr "Uchwyty" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6370,51 +6270,45 @@ msgid "Post" msgstr "Po" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Åšcieżka zapisu jest pusta!" +msgstr "Sprite jest pusty!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." msgstr "" +"Nie można przekonwertować sprite'a używajÄ…cego klatek animacji na siatkÄ™." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "NieprawidÅ‚owa geometria, nie można zastÄ…pić przez siatkÄ™." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Konwersja do %s" +msgstr "Konwertuj do siatki 2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Utwórz siatkÄ™ zarysu" +msgstr "Utwórz siatkÄ™ 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Uproszczenie: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "PrzyciÄ…ganie (piksele):" +msgstr "Wzrost (piksele): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "PodglÄ…d" +msgstr "OdÅ›wież podglÄ…d" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Ustawienia" +msgstr "Ustawienia:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6518,10 +6412,9 @@ msgstr "Krok:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Sep.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Obszar tekstury" @@ -6550,9 +6443,8 @@ msgid "Edit theme..." msgstr "Edytuj motyw interfejsu..." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme editing menu." -msgstr "Menu zmiany wyglÄ…du programu." +msgstr "Menu edycji motywu." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" @@ -6587,23 +6479,20 @@ msgid "Item" msgstr "Element" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Check Item" -msgstr "Sprawdź element" +msgstr "Element wyboru" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "Zaznaczony element" +msgstr "Zaznaczony element wyboru" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Dodaj element" +msgstr "Element opcji" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Zaznaczony element" +msgstr "Zaznaczony element opcji" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -6614,17 +6503,14 @@ msgid "Many" msgstr "Wiele" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Has,Many,Options" -msgstr "Ma,Wiele,Różnych,Opcji!" +msgstr "Ma,Wiele,Opcji" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Tab 1" msgstr "ZakÅ‚adka 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Tab 2" msgstr "ZakÅ‚adka 2" @@ -6633,9 +6519,8 @@ msgid "Tab 3" msgstr "ZakÅ‚adka 3" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Data Type:" -msgstr "Rodzaj Daty:" +msgstr "Typ danych:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" @@ -6662,9 +6547,12 @@ msgid "Erase Selection" msgstr "UsuÅ„ zaznaczenie" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "NiewÅ‚aÅ›ciwa nazwa." +msgstr "Napraw niewÅ‚aÅ›ciwe kafelki" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Wytnij zaznaczenie" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6676,7 +6564,7 @@ msgstr "Rysuj LiniÄ™" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Malowanie prostokÄ…tne" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" @@ -6687,9 +6575,8 @@ msgid "Erase TileMap" msgstr "Wyczyść TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Znajdź tile" +msgstr "Znajdź kafelek" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6705,42 +6592,43 @@ msgstr "Odbij Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "Maluj Tile" +msgstr "Maluj kafelek" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Wybierz tile" +msgstr "Wybierz kafelek" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "UsuÅ„ zaznaczone" +msgid "Copy Selection" +msgstr "Kopiuj zaznaczenie" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate left" +msgstr "Obróć w lewo" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Obróć o 0 stopni" +msgid "Rotate right" +msgstr "Obróć w prawo" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Obróć o 90 stopni" +msgid "Flip horizontally" +msgstr "Odbij poziomo" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Obróć o 180 stopni" +msgid "Flip vertically" +msgstr "Odbij pionowo" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Obróć o 270 stopni" +msgid "Clear transform" +msgstr "Wyczyść przeksztaÅ‚cenie" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "Dodaj wÄ™zeÅ‚(y) z drzewa" +msgstr "Dodaj teksturÄ™ do TileSetu" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "UsuÅ„ punkt krzywej" +msgstr "UsuÅ„ aktualnÄ… teksturÄ™ z TileSetu" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6755,18 +6643,20 @@ msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings." msgstr "" +"Wybierz pod-kafelek do użycia jako ikona. Zostanie on użyty również do " +"niewÅ‚aÅ›ciwych ustawieÅ„ autokafelków." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Pokaż nazwy kafelków (przytrzymaj Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Usunąć wybranÄ… teksturÄ™ i WSZYSTKIE KAFELKI, które jej używajÄ…?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Nie wybrano tekstury do usuniÄ™cia." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6777,14 +6667,16 @@ msgid "Merge from scene?" msgstr "Połącz ze sceny?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +msgid "%s file(s) were not added because was already on the list." +msgstr "%s plik(ów) nie zostaÅ‚o dodane, bo byÅ‚(y) już na liÅ›cie." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"PrzeciÄ…gnij uchwyty, by edytować prostokÄ…t.\n" +"Kliknij na inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6792,13 +6684,17 @@ msgid "" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" +"LPM: włącz bit.\n" +"PPM: wyłącz bit.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Wybierz aktualnie edytowany sub-tile." +msgstr "" +"Wybierz aktualnie edytowany pod-kafelek.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6806,42 +6702,41 @@ msgid "" "bindings.\n" "Click on another Tile to edit it." msgstr "" +"Wybierz pod-kafelek do użycia jako ikona. Zostanie on również użyty do " +"niewÅ‚aÅ›ciwych ustawieÅ„ autokafelków.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" +"Wybierz pod-kafelek, by zmienić jego priorytet.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Ta operacja nie może zostać wykonana bez sceny." +msgstr "Ta wÅ‚aÅ›ciwość nie może zostać zmieniona." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tile Set" -msgstr "TileSet..." +msgstr "Zbiór kafelków" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "WierzchoÅ‚ki" +msgstr "WierzchoÅ‚ek" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Fragment" -msgstr "Argumenty:" +msgstr "Fragmenty" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Prawa" +msgstr "ÅšwiatÅ‚o" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "Shader wizualny" #: editor/project_export.cpp msgid "Runnable" @@ -6860,6 +6755,14 @@ 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 "Release" +msgstr "Wydanie" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "Eksportowanie wszystkiego" + +#: editor/project_export.cpp msgid "Presets" msgstr "Profile eksportu" @@ -6868,6 +6771,10 @@ msgid "Add..." msgstr "Dodaj..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "Åšcieżka eksportu:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Zasoby" @@ -6930,6 +6837,14 @@ msgid "Export PCK/Zip" msgstr "Eksport PCK/Zip" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "Tryb eksportu?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "Eksportuj wszystko" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Brakuje eksportu szablonów dla tej platformy:" @@ -6942,32 +6857,29 @@ msgid "The path does not exist." msgstr "Åšcieżka nie istnieje." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "ProszÄ™ wybrać folder nie zawierajÄ…cy pliku 'project.godot'." +msgstr "" +"NiewÅ‚aÅ›ciwy projekt pliku \".zip\", nie zawiera pliku \"project.godot\"." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "ProszÄ™ wybrać plik 'project.godot'." +msgstr "ProszÄ™ wybrać pusty folder." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "ProszÄ™ wybrać plik 'project.godot'." +msgstr "ProszÄ™ wybrać plik \"project.godot\" lub \".zip\"." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "Folder już zawiera projekt Godota." #: editor/project_manager.cpp msgid "Imported Project" msgstr "Zaimportowano projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid Project Name." -msgstr "Nazwa projektu:" +msgstr "NieprawidÅ‚owa nazwa projektu." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -6986,11 +6898,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Niepoprawna Å›cieżka projektu (zmienić cokolwiek?)." #: editor/project_manager.cpp -#, fuzzy msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." -msgstr "Nie można byÅ‚o edytować engine.cfg w Å›cieżce projektu." +msgstr "" +"Nie udaÅ‚o siÄ™ wczytać project.godot w Å›cieżce projektu (błąd %d). Może go " +"brakować lub być uszkodzony." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -7049,9 +6962,8 @@ msgid "Project Path:" msgstr "Åšcieżka do projektu:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Åšcieżka do projektu:" +msgstr "Åšcieżka instalacji projektu:" #: editor/project_manager.cpp msgid "Browse" @@ -7171,13 +7083,12 @@ msgid "Mouse Button" msgstr "Przycisk myszy" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"Niepoprawna nazwa akcji. Nazwa nie może być pusta ani zawierać znaki takie " -"jak: '/', ':', '=', '\\' lub '\"'" +"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać '/', ':', '=', '\\' " +"lub '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7188,18 +7099,16 @@ msgid "Rename Input Action Event" msgstr "ZmieÅ„ nazwÄ™ zdarzenia akcji wejÅ›cia" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "ZmieÅ„ nazwÄ™ animacji:" +msgstr "ZmieÅ„ martwÄ… strefÄ™ akcji" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Dodaj zdarzenie akcji wejÅ›cia" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "UrzÄ…dzenie" +msgstr "Wszystkie urzÄ…dzenia" #: editor/project_settings_editor.cpp msgid "Device" @@ -7246,24 +7155,20 @@ msgid "Wheel Down Button" msgstr "Kółko myszy w dół" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Kółko myszy w górÄ™" +msgstr "Kółko w lewo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Prawy guzik" +msgstr "Kółko w prawo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Przycisk 6" +msgstr "Przycisk X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Przycisk 6" +msgstr "Przycisk X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7291,7 +7196,7 @@ msgstr "Dodaj zdarzenie" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Button" +msgstr "Przycisk" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -7334,13 +7239,12 @@ msgid "Delete Item" msgstr "UsuÅ„ element" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" -"Niepoprawna nazwa akcji. Nazwa nie może być pusta ani zawierać znaki takie " -"jak: '/', ':', '=', '\\' lub '\"'" +"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać '/', ':', '=', '\\' " +"lub '\"'." #: editor/project_settings_editor.cpp msgid "Already existing" @@ -7360,7 +7264,7 @@ msgstr "Ustawienia zapisane pomyÅ›lnie." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Nadpisanie dla cechy" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -7376,7 +7280,7 @@ msgstr "Dodaj zmapowanÄ… Å›cieżkÄ™" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Dodaj mapowanie zasobu" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -7406,17 +7310,13 @@ msgstr "Ustawienia projektu (project.godot)" msgid "General" msgstr "Ogólne" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "WÅ‚aÅ›ciwość:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Nadpisz dla..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Edytor musi zostać zrestartowany, by zmiany miaÅ‚y efekt" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7432,7 +7332,7 @@ msgstr "Akcja" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Martwa strefa" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7539,14 +7439,9 @@ msgid "Pick a Node" msgstr "Wybierz wÄ™zeÅ‚" #: editor/property_editor.cpp -#, fuzzy msgid "Bit %d, val %d." msgstr "Bit %d, wartość %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "WÅ‚aÅ›ciwoÅ›ci:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Wybierz wÅ‚aÅ›ciwość" @@ -7575,44 +7470,39 @@ msgstr "ZmieÅ„ nazwÄ™" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Przedrostek" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Przyrostek" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Opcje przyciÄ…gania" +msgstr "Opcje zaawansowane" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Substytut" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nazwa wÄ™zÅ‚a:" +msgstr "Nazwa wÄ™zÅ‚a" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nazwa rodzica wÄ™zÅ‚a, jeÅ›li dostÄ™pna" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Znajdź typ wÄ™zÅ‚a" +msgstr "Typ wÄ™zÅ‚a" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Aktualna scena" +msgstr "Nazwa aktualnej sceny" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nazwa wÄ™zÅ‚a:" +msgstr "Nazwa korzenia" #: editor/rename_dialog.cpp msgid "" @@ -7626,35 +7516,35 @@ msgstr "" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Gdy ustawione, licznik restartuje dla każdej grupy wÄ™złów potomnych" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "PoczÄ…tkowa wartość dla licznika" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Krok:" +msgstr "Krok" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "Liczba, o którÄ… licznik jest zwiÄ™kszany dla każdego wÄ™zÅ‚a" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Wyrównanie" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Minimalna liczba cyfr dla licznika.\n" +"BrakujÄ…ce cyfry sÄ… wyrównywane zerami poprzedzajÄ…cymi." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "ZmieÅ„ wyrażenie" +msgstr "Wyrażenia regularne" #: editor/rename_dialog.cpp #, fuzzy @@ -7667,32 +7557,29 @@ msgstr "Bez zmian" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase na under_scored" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_scored na CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Notacja" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "MaÅ‚e Litery" +msgstr "Na maÅ‚e litery" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Wielkie Litery" +msgstr "Na wielkie litery" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Wyzeruj przybliżenie" +msgstr "Resetuj" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Błąd" @@ -7748,9 +7635,12 @@ msgstr "" "Nie można utworzyć sceny '%s' ponieważ obecna scena jest jednym z jej wezłów." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Instance Scene(s)" -msgstr "Instancja Scen(y)" +msgstr "Dodaj instancjÄ™ sceny" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Dodaj instancjÄ™ sceny" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -7761,12 +7651,10 @@ msgid "This operation can't be done on the tree root." msgstr "Nie można wykonać tej operacji na głównym węźle drzewa." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Node In Parent" -msgstr "PrzenieÅ› wÄ™zeÅ‚ w nadrzÄ™dny" +msgstr "PrzenieÅ› wÄ™zeÅ‚ w nadrzÄ™dnym" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Nodes In Parent" msgstr "PrzenieÅ› wÄ™zÅ‚y w nadrzÄ™dnym" @@ -7791,6 +7679,14 @@ msgid "Save New Scene As..." msgstr "Zapisz nowÄ… scenÄ™ jako ..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" +"Wyłączenie \"edytowalnej instancji\" sprawi, że wszystkie wÅ‚aÅ›ciwoÅ›ci wÄ™zÅ‚a " +"zostanÄ… przywrócone do domyÅ›lnych." + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Edytowalne dzieci" @@ -7799,34 +7695,28 @@ msgid "Load As Placeholder" msgstr "Wczytaj jako zastÄ™pczy" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "UczyÅ„ lokalnym" +msgstr "Zrób lokalne" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Utwórz wÄ™zeÅ‚" +msgstr "Utwórz korzeÅ„:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Scena" +msgstr "Scena 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Scena" +msgstr "Scena 3D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Wyczyść dziedziczenie" +msgstr "Interfejs użytkownika" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Wytnij WÄ™zÅ‚y" +msgstr "Inny wÄ™zeÅ‚" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7869,6 +7759,10 @@ msgid "Clear Inheritance" msgstr "Wyczyść dziedziczenie" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "Otwórz dokumentacjÄ™" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "UsuÅ„ wÄ™zeÅ‚ (wÄ™zÅ‚y)" @@ -7877,17 +7771,16 @@ msgid "Add Child Node" msgstr "Dodaj wÄ™zeÅ‚" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Dodaj instancje sceny" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "ZmieÅ„ typ" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "Rozszerz skrypt" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "To ma sens!" +msgstr "ZmieÅ„ na korzeÅ„ sceny" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7914,7 +7807,7 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"Stwórz instancję sceny jako wÄ™zeÅ‚. Tworzy dziedziczÄ…cÄ… scenÄ™ jeÅ›li wÄ™zeÅ‚ " +"Dodaj instancję sceny jako wÄ™zeÅ‚. Tworzy dziedziczÄ…cÄ… scenÄ™ jeÅ›li wÄ™zeÅ‚ " "główny nie istnieje." #: editor/scene_tree_dock.cpp @@ -7938,7 +7831,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "WyczyÅ›cić dziedziczenie? (Nie można cofnąć!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Przełącz widoczność" @@ -7947,12 +7839,11 @@ msgid "Node configuration warning:" msgstr "Ostrzeżenie konfiguracji wÄ™zÅ‚a:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"WÄ™zeÅ‚ posiada połączenia i grupy\n" +"WÄ™zeÅ‚ posiada połączenie(a) i grupÄ™(y).\n" "Kliknij, aby wyÅ›wietlić panel sygnałów." #: editor/scene_tree_editor.cpp @@ -7972,27 +7863,24 @@ msgstr "" "Kliknij, aby wyÅ›wietlić panel grup." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Otwórz skrypt" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "WÄ™zeÅ‚ jest zablokowany.\n" -"Kliknij by odblokować" +"Kliknij, by go odblokować." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"Dziecko nie jest możliwe do zaznaczenia.\n" -"Kliknij by móc zaznaczyć" +"Dzieci nie sÄ… możliwe do zaznaczenia.\n" +"Kliknij, by móc zaznaczyć." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -8003,6 +7891,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer jest przypiÄ™ty.\n" +"Kliknij, by odpiąć." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -8041,15 +7931,18 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Otwórz edytor skryptów" +msgstr "Otwórz skrypt/Wybierz lokacjÄ™" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Åšcieżka jest pusta" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Nazwa pliku jest pusta" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Åšcieżka nie jest lokalna" @@ -8138,20 +8031,8 @@ msgid "Bytes:" msgstr "Bajty:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Ostrzeżenie" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Błąd:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "ŹródÅ‚o:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Funkcja:" +msgid "Stack Trace" +msgstr "Åšlad stosu" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8182,18 +8063,6 @@ msgid "Stack Frames" msgstr "Ramki stosu" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Zmienna" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Błędy:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Åšledzenie stosu (jeÅ›li dotyczy):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profiler" @@ -8203,7 +8072,7 @@ msgstr "Monitor" #: editor/script_editor_debugger.cpp msgid "Value" -msgstr "Value" +msgstr "Wartość" #: editor/script_editor_debugger.cpp msgid "Monitors" @@ -8251,7 +8120,7 @@ msgstr "Typ klikniÄ™tej kontrolki:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "KorzeÅ„ edycji:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" @@ -8271,7 +8140,7 @@ msgstr "ZmieÅ„ promień światÅ‚a" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "ZmieÅ„ kÄ…t emisji wÄ™zÅ‚a AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -8283,11 +8152,11 @@ msgstr "ZmieÅ„ rozmiar kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" -msgstr "" +msgstr "ZmieÅ„ AABB powiadamiacza" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "ZmieÅ„ AABB czÄ…steczek" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" @@ -8310,38 +8179,32 @@ msgid "Change Capsule Shape Height" msgstr "ZmieÅ„ wysokość ksztaÅ‚tu kapsuÅ‚y" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "ZmieÅ„ Å›rednicÄ™ Capsule Shape" +msgstr "ZmieÅ„ promieÅ„ ksztaÅ‚tu cylindra" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "ZmieÅ„ wysokość ksztaÅ‚tu kapsuÅ‚y" +msgstr "ZmieÅ„ wysokość ksztaÅ‚tu cylindra" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Zmień dÅ‚ugość Ray Shape" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "ZmieÅ„ promień światÅ‚a" +msgstr "ZmieÅ„ promień cylindra" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "ZmieÅ„ wysokość ksztaÅ‚tu kapsuÅ‚y" +msgstr "ZmieÅ„ wysokość cylindra" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "ZmieÅ„ promieÅ„ Sphere Shape" +msgstr "ZmieÅ„ wewnÄ™trzny promieÅ„ torusa" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "ZmieÅ„ promień światÅ‚a" +msgstr "ZmieÅ„ zewnÄ™trzny promień torusa" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8352,9 +8215,8 @@ msgid "Select dependencies of the library for this entry" msgstr "Zaznacz zależnoÅ›ci biblioteki dla tego pola" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "UsuÅ„ punkt krzywej" +msgstr "UsuÅ„ aktualny wpis" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -8431,21 +8293,19 @@ msgstr "Niepoprawna instancja sÅ‚ownika (niepoprawne podklasy)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Obiekt nie może podać dÅ‚ugoÅ›ci." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "NastÄ™pna zakÅ‚adka" +msgstr "NastÄ™pna pÅ‚aszczyzna" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Poprzednia zakÅ‚adka" +msgstr "Poprzednia pÅ‚aszczyzna" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "PÅ‚aszczyzna:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" @@ -8464,9 +8324,8 @@ msgid "GridMap Delete Selection" msgstr "GridMap UsuÅ„ zaznaczenie" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "GridMap UsuÅ„ zaznaczenie" +msgstr "GridMap WypeÅ‚nij zaznaczenie" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8521,44 +8380,39 @@ msgstr "Kursor Obróć Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Kursor Obróć w tyÅ‚ X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Kursor Obróć w tyÅ‚ Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Kursor Obróć w tyÅ‚ Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Kursor Wyczyść obrót" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Tworzenie obszaru" +msgstr "Utwórz obszar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Utwórz nowy projekt" +msgstr "Utwórz łącznik zewnÄ™trzny" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" msgstr "Usuń obszar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Wyczyść zaznaczenie" +msgstr "Wyczyść zaznaczone" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Wszystkie zaznaczenia" +msgstr "WypeÅ‚nij zaznaczone" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8630,14 +8484,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -#, fuzzy -msgid "Bake!" -msgstr "NanieÅ›!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -#, fuzzy -msgid "Bake the navigation mesh." -msgstr "NanieÅ› siatkÄ™ nawigacji.\n" +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8875,9 +8723,8 @@ msgid "Change Input Value" msgstr "ZmieÅ„ wartość wejÅ›ciowÄ…" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "Nie można skopiować funkcji wÄ™zÅ‚a." +msgstr "Nie można skopiować wÄ™zÅ‚a funkcji." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" @@ -8912,6 +8759,10 @@ msgid "Base Type:" msgstr "Typ bazowy:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "CzÅ‚onkowie:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "DostÄ™pne wÄ™zÅ‚y:" @@ -8948,9 +8799,8 @@ msgid "Paste Nodes" msgstr "Wklej wÄ™zÅ‚y" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "CzÅ‚onkowie" +msgstr "Edytuj czÅ‚onka" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8965,9 +8815,8 @@ msgid "Iterator became invalid: " msgstr "Iterator staÅ‚ siÄ™ nieprawidÅ‚owy: " #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Invalid index property name." -msgstr "NieprawidÅ‚owa nazwa klasy bazowej" +msgstr "NieprawidÅ‚owa nazwa wÅ‚aÅ›ciwoÅ›ci indeksowej." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" @@ -9011,18 +8860,16 @@ msgstr "" "caÅ‚kowitÄ… (seq out), lub tekstowÄ… (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "UsuÅ„ wÄ™zeÅ‚ VisualScript" +msgstr "Przeszukaj VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy -msgid "Get" -msgstr "Pobierz" +msgid "Get %s" +msgstr "Przyjmij %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Ustaw %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9075,16 +8922,15 @@ msgstr "" "przy czym pozostaÅ‚e zostanÄ… zignorowane." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Ten wÄ™zeÅ‚ nie posiada podwezÅ‚a, który definiowaÅ‚ by jego ksztaÅ‚t, wiÄ™c nie " -"może wchodzić w interakcje.\n" -"PowinieneÅ› dodać wÄ™zeÅ‚ \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " -"podwÄ™zeÅ‚ aby zdefiniować ksztaÅ‚t." +"Ten wÄ™zeÅ‚ nie posiada ksztaÅ‚tu, wiÄ™c nie może kolidować, czy wchodzić w " +"interakcje z innymi obiektami.\n" +"Rozważ dodanie wÄ™zÅ‚a CollisionShape2D lub CollisionPolygon2D jako podrzÄ™dny, " +"aby zdefiniować ksztaÅ‚t." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -9118,6 +8964,14 @@ msgstr "" "Zasób shape jest niezbÄ™dny do dziaÅ‚ania CollisionPolygon2D. ProszÄ™ utworzyć " "zasób shape!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Animacja CPUParticles2D wymaga użycia CanvasItemMaterial z włączonym " +"\"Particles Animation\"." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9167,6 +9021,14 @@ msgstr "" "Nie przypisano materiaÅ‚u do przetwarzania czÄ…steczek, wiÄ™c zmiany nie bÄ™dÄ… " "widoczne." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Animacja Particles2D wymaga użycia CanvasItemMaterial z włączonym " +"\"Particles Animation\"." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D zadziaÅ‚a tylko wtedy, gdy bÄ™dzie dzieckiem wÄ™zeÅ‚ Path2D." @@ -9188,16 +9050,20 @@ msgstr "Å»eby zadziaÅ‚aÅ‚o, pole Path musi wskazywać na istniejÄ…cy wÄ™zeÅ‚ Nod #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Ten Å‚aÅ„cuch koÅ›ci 2D powinien siÄ™ koÅ„czyć na węźle Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"WÄ™zeÅ‚ Bone2D dziaÅ‚a tylko z wÄ™zÅ‚em Skeleton2D lub innym Bone2D jako " +"nadrzÄ™dnym wÄ™zÅ‚em." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Tej koÅ›ci brakuje odpowiedniej pozy spoczynkowej. Pójdź do wÄ™zÅ‚a Skeleton2D " +"i ustaw jÄ…." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9212,9 +9078,8 @@ msgid "ARVRCamera must have an ARVROrigin node as its parent" msgstr "ARVRCamera musi dziedziczyć po węźle ARVROrigin" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "ARVRController musi posiadać wÄ™zeÅ‚ ARVROrigin jako rodzica" +msgstr "ARVRController musi posiadać wÄ™zeÅ‚ ARVROrigin jako nadrzÄ™dny" #: scene/3d/arvr_nodes.cpp msgid "" @@ -9225,15 +9090,16 @@ msgstr "" "przypisany do żadnego rzeczywistego kontrolera" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "ARVRAnchor musi posiadać wÄ™zeÅ‚ ARVROrigin jako rodzica" +msgstr "ARVRAnchor musi posiadać wÄ™zeÅ‚ ARVROrigin jako nadrzÄ™dny" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"ID kotwicy nie może być 0, bo inaczej ta kotwica nie bÄ™dzie przypisana do " +"rzeczywistej kotwicy" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" @@ -9265,16 +9131,15 @@ msgid "Lighting Meshes: " msgstr "OÅ›wietlanie siatek: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Ten wÄ™zeÅ‚ nie posiada podwezÅ‚a, który definiowaÅ‚by jego ksztaÅ‚t, wiÄ™c nie " -"może wchodzić w interakcje z przestrzeniÄ….\n" -"PowinieneÅ› dodać wÄ™zeÅ‚ \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " -"jego podwÄ™zeÅ‚ aby zdefiniować jego ksztaÅ‚t." +"Ten wÄ™zeÅ‚ nie posiada ksztaÅ‚tu, wiÄ™c nie może kolidować, czy wchodzić w " +"interakcje z innymi obiektami.\n" +"Rozważ dodanie wÄ™zÅ‚a CollisionShape lub CollisionPolygon jako podrzÄ™dny, aby " +"zdefiniować ksztaÅ‚t." #: scene/3d/collision_polygon.cpp msgid "" @@ -9308,6 +9173,19 @@ msgstr "" "KsztaÅ‚t musi być okreÅ›lony dla CollisionShape, aby speÅ‚niaÅ‚ swoje zadanie. " "Utwórz zasób typu CollisionShape w odpowiednim polu obiektu!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nic nie jest widoczne, bo nie zostaÅ‚a przypisana żadna siatka." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"Animacja CPUParticles wymaga użycia SpatialMaterial z włączonym \"Billboard " +"Particles\"." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9330,6 +9208,28 @@ msgstr "" msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Nic nie jest widoczne, bo siatki nie zostaÅ‚y przypisane do kolejki rysowania." + +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"Animacja Particles wymaga użycia SpatialMaterial z włączonym \"Billboard " +"Particles\"." + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow dziaÅ‚a tylko, gdy jest wÄ™zÅ‚em podrzÄ™dnym Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "OrientedPathFollow dziaÅ‚a tylko, gdy jest wÄ™zÅ‚em podrzÄ™dnym Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" +"OrientedPathFollow wymaga włączonych wektorów w górÄ™ w jego nadrzÄ™dnym Path." #: scene/3d/physics_body.cpp #, fuzzy @@ -9348,7 +9248,7 @@ msgstr "Pole Path musi wskazywać na wÄ™zeÅ‚ Spatial." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment wymaga zasobu Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -9362,20 +9262,21 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Ten WorldEnvironment jest ignorowany. Dodaj Camera (dla scen 3D) lub ustaw " +"Background Mode tego Å›rodowiska na Canvas (dla scen 2D)." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "To ciaÅ‚o bÄ™dzie ignorowane, dopóki nie ustawisz siatki" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Zmiany rozmiaru w RigidBody (w trybach character i rigid) zostanÄ… nadpisane " -"przez silnik fizyki podczas dziaÅ‚ania.\n" +"Zmiany rozmiaru dla SoftBody zostanÄ… nadpisane przez silnik fizyki podczas " +"dziaÅ‚ania.\n" "Zamiast tego, zmieÅ„ rozmiary ksztaÅ‚tów kolizji w wÄ™zÅ‚ach podrzÄ™dnych." #: scene/3d/sprite_3d.cpp @@ -9396,44 +9297,41 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "W węźle BlendTree '%s', animacja nie znaleziona: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "NarzÄ™dzia do animacji" +msgstr "Animacja nie znaleziona: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "W węźle '%s', nieprawidÅ‚owa animacja: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "BÅÄ„D: błędna nazwa animacji!" +msgstr "NieprawidÅ‚owa animacja: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Rozłącz '%s' z '%s'" +msgstr "Nic nie podłączono do wejÅ›cia '%s' wÄ™zÅ‚a '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "KorzeÅ„ dla grafu AnimationNode nie jest ustawiony." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Zaznacz wÄ™zeÅ‚ AnimationPlayer w drzewie sceny aby edytować animacje." +msgstr "" +"Åšcieżka do wÄ™zÅ‚a AnimationPlayer zawierajÄ…cego animacje nie jest ustawiona." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"Åšcieżka do wÄ™zÅ‚a AnimationPlayer nie prowadzi do wÄ™zÅ‚a AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Drzewo animacji jest wadliwe." +msgstr "KorzeÅ„ AnimationPlayer nie jest poprawnym wÄ™zÅ‚em." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9451,10 +9349,6 @@ msgstr "Alarm!" msgid "Please Confirm..." msgstr "ProszÄ™ potwierdzić..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Wybierz ten Folder" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9465,6 +9359,10 @@ msgstr "" "dowolnej funkcji popup*(). Ustawienie ich jako widocznych jest przydatne do " "edycji, ale zostanÄ… ukryte po uruchomieniu." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9481,13 +9379,12 @@ msgid "(Other)" msgstr "Inne" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"DomyÅ›lne Åšrodowisko okreÅ›lone w Ustawieniach Projektu (Renderowanie -> " -"Viewport -> DomyÅ›lne Åšrodowisko) nie mogÅ‚o zostać zaÅ‚adowane." +"DomyÅ›lne Å›rodowisko okreÅ›lone w Ustawieniach Projektu (Renderowanie -> " +"Environment -> Default Environment) nie mogÅ‚o zostać zaÅ‚adowane." #: scene/main/viewport.cpp msgid "" @@ -9518,31 +9415,149 @@ msgid "Invalid font size." msgstr "Niepoprawny rozmiar fonta." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Dodaj WejÅ›cie" +msgstr "WejÅ›cie" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<żaden>" +msgstr "Brak" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Wadliwe źródÅ‚o!" +msgstr "NiewÅ‚aÅ›ciwe źródÅ‚o dla shadera." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Przypisanie do funkcji." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Przypisanie do uniformu." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Varying może być przypisane tylko w funkcji wierzchoÅ‚ków." + +#~ msgid "Zoom:" +#~ msgstr "PowiÄ™kszenie:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Na pewno chcesz usunąć wszystkie połączenia z \"" + +#~ msgid "Class List:" +#~ msgstr "Lista klas:" + +#~ msgid "Search Classes" +#~ msgstr "Przeszukaj klasy" + +#~ msgid "Public Methods" +#~ msgstr "Metody publiczne" + +#~ msgid "Public Methods:" +#~ msgstr "Metody publiczne:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Elementy motywu interfejsu" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Elementy motywu GUI:" + +#~ msgid "Property: " +#~ msgstr "WÅ‚aÅ›ciwość: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Ustaw status folderu jako Ulubiony." + +#~ msgid "Show current scene file." +#~ msgstr "Pokaż plik aktualnej sceny." + +#~ msgid "Enter tree-view." +#~ msgstr "Wejdź w widok drzewa." + +#~ msgid "Whole words" +#~ msgstr "CaÅ‚e wyrazy" + +#~ msgid "Match case" +#~ msgstr "UwzglÄ™dnij wielkość liter" + +#~ msgid "Filter: " +#~ msgstr "Filtr: " + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Pokaż w systemie plików" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Szukaj w hierarchii klas." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Przeszukaj klasy" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Wbudowane skrypty mogÄ… być edytowane tylko po zaÅ‚adowaniu sceny, do " +#~ "której należą" + +#, fuzzy +#~ msgid "Convert To Uppercase" +#~ msgstr "Wielkie litery" + +#~ msgid "Convert To Lowercase" +#~ msgstr "MaÅ‚e litery" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "PrzyciÄ…gaj do siatki" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Obróć o 0 stopni" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Obróć o 90 stopni" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Obróć o 180 stopni" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Obróć o 270 stopni" + +#~ msgid "Warning" +#~ msgstr "Ostrzeżenie" + +#~ msgid "Error:" +#~ msgstr "Błąd:" + +#~ msgid "Source:" +#~ msgstr "ŹródÅ‚o:" + +#~ msgid "Function:" +#~ msgstr "Funkcja:" + +#~ msgid "Variable" +#~ msgstr "Zmienna" + +#~ msgid "Errors:" +#~ msgstr "Błędy:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Åšledzenie stosu (jeÅ›li dotyczy):" + +#, fuzzy +#~ msgid "Bake!" +#~ msgstr "NanieÅ›!" + +#, fuzzy +#~ msgid "Bake the navigation mesh." +#~ msgstr "NanieÅ› siatkÄ™ nawigacji.\n" + +#, fuzzy +#~ msgid "Get" +#~ msgstr "Pobierz" #~ msgid "Change Scalar Constant" #~ msgstr "ZmieÅ„ wartość staÅ‚ej skalarnej" @@ -10003,9 +10018,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Nie udaÅ‚o siÄ™ zapisać tekstury atlasu:" -#~ msgid "Exporting for %s" -#~ msgstr "Exportowanie do %s" - #~ msgid "Setting Up..." #~ msgstr "Konfigurowanie ..." @@ -10108,9 +10120,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ŹródÅ‚o fontu:" -#~ msgid "Source Font Size:" -#~ msgstr "Wielkość oryginalna fontu:" - #~ msgid "Dest Resource:" #~ msgstr "Zasób docelowy:" @@ -10186,9 +10195,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Start" -#~ msgid "Filters" -#~ msgstr "Filtry" - #~ msgid "Source path is empty." #~ msgstr "Åšcieżka źródÅ‚owa jest pusta." @@ -10440,15 +10446,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Stereo" -#~ msgid "Pitch" -#~ msgstr "Wysokość" - #~ msgid "Window" #~ msgstr "Okno" -#~ msgid "Move Right" -#~ msgstr "PrzesuÅ„ w prawo" - #~ msgid "Scaling to %s%%." #~ msgstr "Skalowanie do %s%%." @@ -10734,9 +10734,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Eksport projektu" -#~ msgid "Export Preset:" -#~ msgstr "Szablon eksportu:" - #~ msgid "Global" #~ msgstr "Globalne" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 1ea7dca649..482ea49196 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -27,7 +27,7 @@ msgstr "" "constants!" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Nah enough bytes fer decodin' bytes, or ye got th' wrong ship." @@ -395,8 +395,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -410,11 +409,11 @@ msgid "Delete Selection" msgstr "Yar, Blow th' Selected Down!" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -517,11 +516,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -554,10 +553,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -588,6 +587,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -667,7 +667,7 @@ msgid "Edit Connection: " msgstr "Slit th' Node" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -721,17 +721,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -788,9 +785,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -820,7 +818,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -879,14 +877,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1061,8 +1051,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1230,8 +1219,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1301,12 +1291,17 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "Slit th' Node" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "Slit th' Node" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1314,12 +1309,12 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1355,7 +1350,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1413,8 +1409,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1430,24 +1425,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1464,29 +1446,30 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -#, fuzzy -msgid "Members" -msgstr "th' Members:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "th' Members:" +msgid "Properties" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "Paste yer Node" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Theme Properties:" +msgstr "Paste yer Node" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1515,8 +1498,14 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" -msgstr "" +#, fuzzy +msgid "Class Description" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Yar, Blow th' Selected Down!" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1530,11 +1519,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" +msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1544,11 +1533,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" +msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1557,11 +1546,54 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Yer signals:" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "th' Members:" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Set" @@ -1595,6 +1627,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1651,10 +1688,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1882,6 +1929,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1922,6 +1975,12 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Rename Variable" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -2004,7 +2063,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2033,7 +2092,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2071,6 +2130,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2179,10 +2239,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2276,21 +2332,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2429,7 +2485,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2454,7 +2510,7 @@ msgstr "" msgid "Calls" msgstr "Call" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2466,7 +2522,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2474,6 +2530,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2491,10 +2561,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2503,7 +2569,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2792,6 +2859,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2829,7 +2900,7 @@ msgstr "Rename Variable" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2868,39 +2939,40 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +#: editor/filesystem_dock.cpp +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "" +#, fuzzy +msgid "Remove from favorites" +msgstr "Discharge ye' Signal" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2911,6 +2983,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2931,24 +3011,16 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." -msgstr "" - -#: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Slit th' Node" - -#: editor/filesystem_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" +msgid "Toggle split mode" +msgstr "Toggle ye Breakpoint" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp -msgid "Search files" +msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp @@ -2957,7 +3029,7 @@ msgid "" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2974,28 +3046,21 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "Find ye Node Type" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Paste yer Node" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3012,6 +3077,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3170,18 +3239,15 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" -msgstr "" +#, fuzzy +msgid "Expand All Properties" +msgstr "Add yer Getter Property" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "Paste yer Node" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3420,6 +3486,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -3791,10 +3862,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4119,6 +4186,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4179,6 +4250,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Slit th' Node" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4274,6 +4350,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4324,6 +4405,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4761,8 +4846,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4791,6 +4875,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4860,11 +4949,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5199,22 +5288,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5244,6 +5333,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5342,11 +5435,7 @@ msgid "Copy Script Path" msgstr "Forge yer Node!" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5417,7 +5506,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5425,10 +5514,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5463,18 +5548,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search in files" -msgstr "Rename Variable" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +msgid "Search Results" +msgstr "Discharge ye' Variable" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5485,6 +5561,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Add Function" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5573,11 +5654,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5594,35 +5675,31 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Toggle ye Breakpoint" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Toggle ye Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." -msgstr "" +#, fuzzy +msgid "Find in Files..." +msgstr "Find ye Node Type" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Discharge ye' Function" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5714,6 +5791,15 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Pitch" +msgstr "Switch" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5879,6 +5965,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5980,10 +6070,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Toggle Freelook" msgstr "Toggle ye Breakpoint" @@ -6385,6 +6471,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6431,25 +6522,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Change yer Anim Transform" + #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Add Texture(s) to TileSet" @@ -6479,7 +6575,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6495,7 +6591,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6572,6 +6668,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "just released" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6580,6 +6685,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6638,6 +6747,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7091,10 +7208,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7231,10 +7344,6 @@ msgstr "Paste yer Node" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7319,7 +7428,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7328,7 +7437,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7369,7 +7478,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7428,6 +7537,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7464,6 +7577,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7535,6 +7654,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Yer functions:" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7543,11 +7667,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7701,6 +7825,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7793,19 +7921,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7838,18 +7954,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8274,11 +8378,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8574,6 +8674,10 @@ msgid "Base Type:" msgstr "th' Base Type:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "th' Members:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "yer Nodes doing nothin':" @@ -8676,11 +8780,11 @@ msgid "Search VisualScript" msgstr "Discharge ye' Variable" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Get" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8759,6 +8863,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8797,6 +8907,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8914,6 +9030,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8933,6 +9059,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8965,7 +9109,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9035,11 +9179,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Slit th' Node" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9047,6 +9186,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9113,6 +9256,13 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Slit th' Node" + +#~ msgid "Get" +#~ msgstr "Get" + #~ msgid "Disabled" #~ msgstr "Cursed" @@ -9126,9 +9276,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "Sequence" -#~ msgid "Switch" -#~ msgstr "Switch" - #~ msgid "Iterator" #~ msgstr "Iterator" @@ -9151,9 +9298,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "just smashed" -#~ msgid "just released" -#~ msgstr "just released" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index c88dc3ea2c..eb6a625e3e 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -25,12 +25,26 @@ # Tiago Almeida <thyagoeap@gmail.com>, 2017. # Mauricio Luan Carneiro deSouza <newmailmlcs@gmail.com>, 2018. # Emerson Guerra <guerraemerson@gmail.com>, 2018. +# Michel G. Souza <Michelgomesdes@hotmail.com>, 2018. +# Caio Northfleet <caio.northfleet@gmail.com>, 2018. +# Henrique Combochi <henrique.combochi@gmail.com>, 2018. +# Gabriel Carvalho <billlmaster@gmail.com>, 2018. +# miketangogamer <miketangogamer@gmail.com>, 2018. +# Eduardo Abreu <eduo.abreu@gmail.com>, 2018. +# Bruno Miranda Da Silva <brunofreezee@gmail.com>, 2018. +# Marcos Roberto Rodrigues Marques <contato.mroberto@gmail.com>, 2018. +# Dyefferson Azevedo <gamecanalbrasil@gmail.com>, 2018. +# LucasSouza6 <lucasosouza66@gmail.com>, 2018. +# Pedro Pacheco <pedroxixipa@hotmail.com>, 2018. +# Bruno Henrique <nimbusdroid@gmail.com>, 2018. +# Luciano Scilletta <lucianoscilletta@gmail.com>, 2018. +# Julio Yagami <juliohenrique31501234@hotmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2018-07-31 19:35+0000\n" -"Last-Translator: Emerson Guerra <guerraemerson@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Julio Yagami <juliohenrique31501234@hotmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -38,7 +52,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 3.1.1\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -46,41 +60,38 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Argumento de tipo inválido para convert(), use constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Não há bytes suficientes para decodificar, ou o formato é inválido." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Entrada inválida %i (não passou) na expressão" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self não pode ser usado porque a instancia é nul0o (não passou)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Nome de propriedade '%s' inválido no nó %s." +msgstr "Operandos inválidos para operador %s, %s e %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Nome de propriedade '%s' inválido no nó %s." +msgstr "Ãndice de tipo %s inválido para tipo base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Nome inválido de Ãndice '%s' para base tipo %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argumento inválido do tipo: " +msgstr "Argumento inválido do tipo '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Na chamada para '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -89,27 +100,23 @@ msgstr "Livre" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Equilibrado" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Espelhar X" +msgstr "Espelhar" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Inserir Chave" +msgstr "Inserir Chave Aqui" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplicar Seleção" +msgstr "Duplicar Chave(s) Selecionada(s)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Excluir Selecionados" +msgstr "Excluir Chave(s) Selecionada(s)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -142,44 +149,39 @@ msgstr "Alterar Chamada da Anim" #: editor/animation_track_editor.cpp #, fuzzy msgid "Property Track" -msgstr "Propriedade:" +msgstr "Propriedade da Trilha:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Tipo de Transformação" +msgstr "Trilha de transformação 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Trilha do método de chamada" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Caminho da Curva de Bezier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Faixa de reprodução de áudio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Parar reprodução da animação. (S)" +msgstr "Faixa de Reprodução de Animação" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Adicionar Trilha na Anim" +msgstr "Adicionar Trilha" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Duração da animação (em segundos)." +msgstr "Duração da Animação (em segundos)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Zoom da animação." +msgstr "Loop da Animação" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -187,42 +189,36 @@ msgid "Functions:" msgstr "Funções:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Ouvinte de Ãudio" +msgstr "Clipes de Audio:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Clipes" +msgstr "Clipes de Animação:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Alternar modo sem-distrações." +msgstr "Ligar/desligar esta trilha." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Modo de Atualização (Como esta propriedade é setada)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Nó Animation" +msgstr "Modo de Interpolação" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Modo Loop Enrolado (Interpolar fim com inÃcio no loop)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Remover trilha selecionada." +msgstr "Remover esta trilha." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Tempo do X-Fade (s):" +msgstr "Tempo (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -237,13 +233,12 @@ msgid "Trigger" msgstr "Gatilho" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "Funcionalidades" +msgstr "Capturar" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Mais próximo" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -252,16 +247,15 @@ msgstr "Linear" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cúbico" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" msgstr "Mudar Interpolação do Loop da Animação" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "envolver interpolação de loop" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -269,14 +263,12 @@ msgid "Insert Key" msgstr "Inserir Chave" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplicar Nó(s)" +msgstr "Duplicar Chave(s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Excluir Nó(s)" +msgstr "Deletar Chave(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -306,7 +298,7 @@ msgstr "Inserir Anim" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer não pode animar a si mesmo, apenas outros jogadores." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -323,6 +315,7 @@ msgstr "Inserir Chave na Anim" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"As faixas de transformação aplicam-se apenas aos nós baseados no espaço." #: editor/animation_track_editor.cpp msgid "" @@ -331,44 +324,48 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Faixas de áudio só podem apontar para nós do tipo:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Faixas de animação só podem apontar para nós AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Um tocador de animação não pode animar a si mesmo, apenas outros tocadores." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Não é possÃvel adicionar uma nova trilha sem uma raiz" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Caminho da trilha é inválido,então não pode adicionar uma chave." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Trilha não é do tipo Espacial,não pode inserir chave" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" +"Caminho da trilha é inválido,então não pode adicionar uma chave de método." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet não encontrada no script: " +msgstr "Método não encontrado no objeto: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Mover Chaves da Anim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Ãrea de transferência vazia!" +msgstr "Ãrea de transferência vazia" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -378,24 +375,23 @@ msgstr "Alterar Escala das Chaves na Anim" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Essa opção não funciona para edição por Bezier,pois é apenas uma faixa única." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Apenas mostrar trilhas de nós selecionados na árvore." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Agrupe as trilhas pelo nó ou exiba-as como lista simples." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Snap (Pixels):" +msgstr "Snap (Pixels): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Ãrvore de Animação é válida." +msgstr "Valor do passo de animação." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -407,48 +403,43 @@ msgid "Edit" msgstr "Editar" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimationTree" +msgstr "Propriedades de animação." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Copiar Parâmetros" +msgstr "Copiar Trilhas" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Colar Params" +msgstr "Colar Trilhas" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "Mudar Escala da Seleção" +msgstr "Selecionar Escala" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "Mudar Escala a partir do Cursor" +msgstr "Escalar a partir do Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplicar Seleção" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "Duplicar Transposto" +msgstr "Duplicar Transposta" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Excluir Selecionados" +msgstr "Deletar Seleção" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "Ir ao Próximo Passo" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "Ir ao Passo Anterior" #: editor/animation_track_editor.cpp @@ -461,11 +452,11 @@ msgstr "Limpar Animação" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Escolher o nó que será animado:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Usar Curvas de Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -481,7 +472,7 @@ msgstr "Erro Angular Max.:" #: editor/animation_track_editor.cpp msgid "Max Optimizable Angle:" -msgstr "Angulo Máximo otimizável:" +msgstr "Ângulo Máximo Otimizável:" #: editor/animation_track_editor.cpp msgid "Optimize" @@ -489,7 +480,7 @@ msgstr "Otimizar" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "Remover Chaves Invalidas" +msgstr "Remover chaves inválidas" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" @@ -513,7 +504,7 @@ msgstr "Proporção de Escala:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Selecionar trilhas para copiar:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -551,11 +542,11 @@ msgstr "Sem Correspondências" msgid "Replaced %d occurrence(s)." msgstr "%d ocorrência(s) substituÃda(s)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Corresponder Caixa" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Palavras Inteiras" @@ -573,27 +564,26 @@ msgstr "Apenas na Seleção" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Zoom In" -msgstr "Ampliar Mais" +msgstr "Ampliar" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Zoom Out" -msgstr "Ampliar Menos" +msgstr "Reduzir" #: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Reset Zoom" msgstr "Redefinir Ampliação" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Avisos" +msgstr "Avisos:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Ampliação (%):" +msgid "Font Size:" +msgstr "Tamanho da Fonte de Origem:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linha:" @@ -626,6 +616,7 @@ msgstr "Adicionar" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -641,7 +632,7 @@ msgstr "Argumentos de Chamada Extras:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "Caminho para o nó:" +msgstr "Caminho para o Nó:" #: editor/connections_dialog.cpp msgid "Make Function" @@ -682,9 +673,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' do '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Desconectar '%s' do '%s'" +msgstr "Desconectar todos do sinal : '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -696,19 +686,16 @@ msgid "Disconnect" msgstr "Desconectar" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Conectando Sinal:" +msgstr "Conectar Sinal: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Editar Conexões" +msgstr "Editar Conexão: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Tem certeza de que quer executar mais de um projeto?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Tem certeza que quer remover todas as conexões do sinal \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -716,22 +703,19 @@ msgstr "Sinais" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Tem certeza que quer remover todas conexões desse sinal?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Desconectar" +msgstr "Desconectar Tudo" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Editar" +msgstr "Editar..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Métodos" +msgstr "Ir ao Método" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -762,17 +746,14 @@ msgstr "Recente:" msgid "Search:" msgstr "Pesquisar:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Combinações:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descrição:" @@ -790,16 +771,16 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" -"A cena \"%s\" está sendo editada atualmente.\n" -"As alterações não terão efeito a menos que seja recarregada." +"Cena \"%s\" está sendo editada atualmente.\n" +"Alterações não terão efeito a menos que seja recarregada." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" -"O recurso \"%s\" está em uso.\n" -"As alterações não terão efeito a menos que seja recarregado." +"Recurso \"%s\" está em uso.\n" +"Alterações terão efeito ao recarregar." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -833,9 +814,10 @@ msgid "Search Replacement Resource:" msgstr "Buscar Recurso para Substituição:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -847,7 +829,7 @@ msgstr "Donos De:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "Remover os arquivos selecionados do projeto? (impossÃvel desfazer)" +msgstr "Remover arquivos selecionados do projeto? (irreversÃvel)" #: editor/dependency_editor.cpp msgid "" @@ -855,20 +837,21 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" -"Os arquivos a serem removidos são requeridos por outros recursos para que " +"Os arquivos sendo removidos são requeridos por outros recursos para que " "funcionem.\n" "Removê-los mesmo assim? (irreversÃvel)" #: editor/dependency_editor.cpp editor/export_template_manager.cpp msgid "Cannot remove:" -msgstr "ImpossÃvel remover:" +msgstr "Não pode remover:" #: editor/dependency_editor.cpp msgid "Error loading:" msgstr "Erro ao carregar:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "A cena não pôde ser carregada por causa de dependências ausentes:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -905,7 +888,7 @@ msgstr "Explorador de Recursos Órfãos" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "Excluir os arquivos selecionados?" +msgstr "Excluir arquivos selecionados?" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -927,14 +910,6 @@ msgstr "Alterar Valor do Dicionário" msgid "Thanks from the Godot community!" msgstr "Agradecimentos da comunidade Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Contribuidores da Godot Engine" @@ -1009,7 +984,7 @@ msgstr "" #: editor/editor_about.cpp msgid "All Components" -msgstr "Todos os Componentes" +msgstr "Todos Componentes" #: editor/editor_about.cpp msgid "Components" @@ -1051,7 +1026,7 @@ msgstr "Caixas de Som" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "Ad. Efeito" +msgstr "Adicionar Efeito" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" @@ -1110,8 +1085,7 @@ msgid "Bus options" msgstr "Opções da pista" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -1281,8 +1255,9 @@ msgstr "Caminho:" msgid "Node Name:" msgstr "Nome do nó:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nome" @@ -1352,25 +1327,30 @@ msgid "Template file not found:" msgstr "Arquivo de modelo não encontrado:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Selecione a Pasta Atual" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "O arquivo existe. Sobrescrever?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Selecione a Pasta Atual" +#, fuzzy +msgid "Select This Folder" +msgstr "Selecionar esta Pasta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Copiar Caminho" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Mostrar no Gerenciador de Arquivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Mostrar no Gerenciador de Arquivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1406,7 +1386,8 @@ msgid "Open a File or Directory" msgstr "Abrir Arquivo ou Diretório" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Salvar" @@ -1464,8 +1445,7 @@ msgstr "Diretórios & Arquivos:" msgid "Preview:" msgstr "Previsualização:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Arquivo:" @@ -1481,24 +1461,11 @@ msgstr "BuscarFontes" msgid "(Re)Importing Assets" msgstr "(Re)Importando Assets" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Pesquisar Ajuda" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Lista de Classes:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Pesquisar Classes" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Cima" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Classe:" @@ -1515,28 +1482,30 @@ msgid "Brief Description:" msgstr "Descrição breve:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Membros" +msgid "Properties" +msgstr "Propriedades" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Membros:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Propriedades:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Métodos Públicos" +msgid "Methods" +msgstr "Métodos" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Métodos Públicos:" +msgid "Methods:" +msgstr "Métodos:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Itens do Tema de GUI" +#, fuzzy +msgid "Theme Properties" +msgstr "Propriedades" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Itens do Tema de GUI:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Propriedades:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1563,10 +1532,16 @@ msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Descrição" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Descrição:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Tutoriais Online:" @@ -1581,11 +1556,13 @@ msgstr "" "$url2]solicitar[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Propriedades" +#, fuzzy +msgid "Property Descriptions" +msgstr "Descrição da Propriedade:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Descrição da Propriedade:" #: editor/editor_help.cpp @@ -1597,11 +1574,13 @@ msgstr "" "[color=$color][url=$url]contribuindo uma[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Métodos" +#, fuzzy +msgid "Method Descriptions" +msgstr "Descrição do Método:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Descrição do Método:" #: editor/editor_help.cpp @@ -1612,18 +1591,67 @@ msgstr "" "Atualmente não existe descrição para este método. Por favor nos ajude [color=" "$color][url=$url]contribuindo uma[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Pesquisar Ajuda" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Exibição Normal" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Classes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Métodos" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Sinais" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Constantes" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Propriedades" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Theme Properties Only" +msgstr "Propriedades" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Membros" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Classe:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Propriedade:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Set" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Definir Múltiplos:" #: editor/editor_log.cpp msgid "Output:" @@ -1651,6 +1679,11 @@ msgstr "Falha na exportação do projeto com código de erro %d." msgid "Error saving resource!" msgstr "Erro ao salvar Recurso!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Salvar Recuso como..." @@ -1670,6 +1703,7 @@ msgstr "Erro ao salvar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" +"Não foi possÃvel abrir '%s'. O arquivo pode ter sido movido ou deletado." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1705,12 +1739,23 @@ msgstr "Essa operação não pode ser realizada sem uma raiz da cena." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Não se pôde salvar a cena. É provável que dependências (instâncias ou " "herança) não foram satisfeitas." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Can't overwrite scene that is still open!" +msgstr "Não é possÃvel sobrescrever cena que ainda está aberta!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Não se pôde carregar MeshLibrary para fusão!" @@ -1968,6 +2013,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Não foi possÃvel carregar o script complementar do caminho: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Não foi possÃvel carregar o script complementar do caminho: '%s' Script não " +"está em modo ferramenta." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2017,15 +2071,19 @@ msgstr "Excluir Layout" msgid "Default" msgstr "Padrão" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "Mostrar em Arquivos" + +#: editor/editor_node.cpp msgid "Play This Scene" msgstr "Rodar Cena" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Fechas as outras abas" +msgstr "Fechar aba" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2100,7 +2158,8 @@ msgid "Save Scene" msgstr "Salvar Cena" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Salvar todas as Cenas" #: editor/editor_node.cpp @@ -2129,7 +2188,7 @@ msgid "Undo" msgstr "Desfazer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refazer" @@ -2158,15 +2217,15 @@ msgid "Tools" msgstr "Ferramentas" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Abrir Gerenciador de Projetos?" +msgstr "Abrir pasta do projeto" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Sair para a Lista de Projetos" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Depurar" @@ -2274,18 +2333,16 @@ msgid "Toggle Fullscreen" msgstr "Alternar Tela-Cheia" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Configurações do Editor" +msgstr "Abrir editor/Configurações de pasta" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Abrir a pasta de data do Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Configurações do Editor" +msgstr "abrir configurações do editor" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2295,10 +2352,6 @@ msgstr "Gerenciar Modelos de Exportação" msgid "Help" msgstr "Ajuda" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Classes" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2369,13 +2422,12 @@ msgstr "Rodar outra cena" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Mudar o driver de vÃdeo necessita reinicializar o editor." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Salvar e Re-Importar" +msgstr "Salvar e Reinicar" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2393,27 +2445,26 @@ msgstr "Atualizar Alterações" msgid "Disable Update Spinner" msgstr "Desabilitar Spinner de Atualização" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspetor" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importar" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nó" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Arquivos" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspetor" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Nó" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Expandir tudo" +msgstr "Expandir Painel Inferior" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2492,9 +2543,8 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Editar PolÃgono" +msgstr "Editar Plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2518,15 +2568,13 @@ msgid "Status:" msgstr "Status:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Editar" +msgstr "Editar:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Iniciar!" +msgstr "Iniciar" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2548,7 +2596,7 @@ msgstr "% de Quadro" msgid "Physics Frame %" msgstr "Quadro FÃsico %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tempo:" @@ -2572,27 +2620,47 @@ msgstr "Tempo" msgid "Calls" msgstr "Chamadas" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Ativo" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Camada" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, val %d." +msgstr "Bit %d, valor %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Vazio]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Atribuir" +msgstr "Atribuir.." + +#: editor/editor_properties.cpp +#, fuzzy +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Não é possÃvel criar uma ViewportTexture nos recursos salvos como um " +"arquivo.\n" +"Recursos precisam pertencer à cena." + +#: editor/editor_properties.cpp +#, fuzzy +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"Não é possÃvel criar uma ViewportTexture nesse recurso porque não está " +"definido como uma cena local.\n" +"Por favor troque na 'local para cena' propriedade" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2611,10 +2679,6 @@ msgstr "Novo %s" msgid "Make Unique" msgstr "Tornar Único" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Mostrar em Arquivos" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2623,7 +2687,8 @@ msgstr "Mostrar em Arquivos" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Colar" @@ -2636,36 +2701,32 @@ msgstr "Converter Para %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Abrir no Editor" +msgstr "Abrir Editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "O nó selecionado não é uma Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Tamanho da Célula:" +msgstr "Tamanho: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Página: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Novo nome:" +msgstr "Nova Chave:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Novo nome:" +msgstr "Novo Valor:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Adicionar Par de Chave/Valor" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2759,9 +2820,8 @@ msgid "Can't open export templates zip." msgstr "Não se pôde abrir zip dos modelos de exportação." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Formato do version.txt dentro dos modelos é inválido." +msgstr "Formato do version.txt inválido dentro de templates: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2826,6 +2886,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Instalação de templates falhou. Os arquivos problemáticos podem ser achados " +"em '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2906,9 +2968,8 @@ msgid "Download Templates" msgstr "Baixar modelos" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Selecione uma fonte da lista: " +msgstr "Selecione um espelho da lista: (Shift+Click: Abrir no Navegador)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2917,18 +2978,21 @@ msgstr "" "não salvo!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favoritos:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "ImpossÃvel navegar até '%s' pois não existe no sistema de arquivos!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Visualizar itens como uma grade de miniaturas" +msgstr "Visualizar itens como grade de miniaturas." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Visualizar itens como uma lista" +msgstr "Visualizar itens como uma lista." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2956,7 +3020,7 @@ msgstr "Erro ao duplicar:" msgid "Unable to update dependencies:" msgstr "Não foi possÃvel atualizar dependências:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nenhum nome fornecido" @@ -2993,22 +3057,6 @@ msgid "Duplicating folder:" msgstr "Duplicando pasta:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Expandir tudo" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Recolher tudo" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renomear..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Mover Para..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Abrir Cena(s)" @@ -3017,6 +3065,16 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favoritos:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Remover do Grupo" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Editar Dependências..." @@ -3024,19 +3082,35 @@ msgstr "Editar Dependências..." msgid "View Owners..." msgstr "Visualizar Proprietários..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renomear..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Mover Para..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Novo Script" +msgstr "Novo Script..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Salvar Recuso como..." +msgstr "Novo Recurso..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Expandir tudo" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Recolher tudo" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3059,28 +3133,18 @@ msgstr "Re-escanear Sistema de Arquivos" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Alternar status da pasta como Favorito" +msgid "Toggle split mode" +msgstr "Alternar Modo" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Selecione o sub-tile editado atual." +msgid "Search files" +msgstr "Pesquisar arquivos" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instanciar a(s) cena(s) selecionada como filho do nó selecionado." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Pesquisar Classes" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3088,18 +3152,17 @@ msgstr "" "Escaneando arquivos,\n" "Por favor aguarde..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Já há uma pasta neste caminho com o nome especificado." +msgstr "Já há uma pasta ou arquivo neste caminho com o nome especificado." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Sobrescrever" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3107,32 +3170,23 @@ msgstr "Criar Script" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" -msgstr "Localizar tile" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Localizar" +msgid "Find in Files" +msgstr "Localizar em arquivos" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Palavras Inteiras" +msgid "Find:" +msgstr "Encontrar: " #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Corresponder Caixa" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Pasta: " #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " -msgstr "Filtro:" +msgid "Filters:" +msgstr "Filtros" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3148,24 +3202,24 @@ msgid "Cancel" msgstr "Cancelar" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Encontrar: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Substituir" +msgstr "Substituir: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Substituir Tudo" +msgstr "Substituir Tudo (sem desfazer)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Salvando..." +msgstr "Procurando..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Pesquisar Texto" +msgstr "Pesquisa concluÃda" #: editor/groups_editor.cpp #, fuzzy @@ -3173,18 +3227,16 @@ msgid "Group name already exists." msgstr "ERRO: Nome da animação já existe!" #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Nome Inválido." +msgstr "Nome de Grupo Inválido." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Grupo(s) do Nó" +msgstr "Nós fora de Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" @@ -3193,7 +3245,7 @@ msgstr "Filtrar nós" #: editor/groups_editor.cpp #, fuzzy msgid "Nodes in Group" -msgstr "Grupo(s) do Nó" +msgstr "Nós no Grupo" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3204,9 +3256,8 @@ msgid "Remove from Group" msgstr "Remover do Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Grupos de Imagens" +msgstr "Gerenciar Grupos" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3313,17 +3364,14 @@ msgstr "Reimportar" msgid "Failed to load resource." msgstr "Falha ao carregar recurso." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Expandir todas as propriedades" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Recolher todas as propriedades" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3402,37 +3450,33 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Selecione um nó para editar Sinais e Grupos." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Editar PolÃgono" +msgstr "Editar um Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Criar solução C#" +msgstr "Criar um Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Lista de Plugins:" +msgstr "Nome do Plugin:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Subpasta:" #: editor/plugin_config_dialog.cpp #, fuzzy msgid "Language:" -msgstr "Linguagem" +msgstr "Linguagem:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Script válido" +msgstr "Nome do script:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Ativar agora?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3493,43 +3537,49 @@ msgstr "Adicionar Animação" #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Load.." -msgstr "Carregar" +msgstr "Carregar.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Esse tipo de nó não pode ser utilizado. Apenas nós raÃzes são permitidos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp +#, fuzzy msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"A árvore de animação está inativa.\n" +"Ative para permitir a reprodução, cheque os avisos de nodes se a ativação " +"falhou." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Definir posição de mescla dentro do espaço" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp +#, fuzzy msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Selecionar e mover pontos, criar pontos com RMB." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #, fuzzy msgid "Create points." -msgstr "Excluir Pontos" +msgstr "Criar Pontos" #: editor/plugins/animation_blend_space_1d_editor.cpp #, fuzzy msgid "Erase points." -msgstr "RMB: Apagar Ponto." +msgstr "RMB: Apagar Pontos" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3577,6 +3627,11 @@ msgstr "" msgid "Snap" msgstr "Snap" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Misturar:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3588,8 +3643,10 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Incapaz de conectar, a porta pode estar em uso ou a conexão ser inválida." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." @@ -3846,9 +3903,8 @@ msgid "Cross-Animation Blend Times" msgstr "Tempos de Mistura de Animação Cruzada" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "Fim(ns)" +msgstr "Fim" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" @@ -3962,10 +4018,6 @@ msgid "Amount:" msgstr "Quantidade:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Misturar:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Misturar 0:" @@ -4303,6 +4355,11 @@ msgstr "Editar CanvaItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Editar CanvaItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Editar CanvaItem" @@ -4368,6 +4425,11 @@ msgid "Rotate Mode" msgstr "Modo Rotacionar" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Modo Escala (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4467,6 +4529,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaura a habilidade dos filhos do objeto de serem selecionados." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Esqueleto..." + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Mostrar Ossos" @@ -4518,6 +4585,10 @@ msgid "Show Viewport" msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centralizar Seleção" @@ -4960,9 +5031,9 @@ msgid "Create Navigation Polygon" msgstr "Criar PolÃgono de Navegação" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Gerando AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Gerar Retângulo de Visibilidade" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4991,6 +5062,12 @@ msgstr "Limpar Máscara de Emissão" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Converter para MaÃusculo" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "PartÃculas" @@ -5060,13 +5137,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Um material processador do tipo 'ParticlesMaterial' é necessário." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Gerar AABB" +msgid "Generating AABB" +msgstr "Gerando AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Converter para MaÃusculo" +msgid "Generate AABB" +msgstr "Gerar AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5411,22 +5487,22 @@ msgid "Paste Resource" msgstr "Colar Recurso" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir no Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instância:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir no Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carregar Recurso" @@ -5459,8 +5535,12 @@ msgstr "Erro ao mover arquivo:\n" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Não pôde carregar o arquivo." + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." -msgstr "Não pôde carregar a imagem" +msgstr "Não pôde carregar o arquivo." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -5560,11 +5640,8 @@ msgid "Copy Script Path" msgstr "Copiar Caminho do Script" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Mostrar no Sistema de Arquivos" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Anterior no Histórico" #: editor/plugins/script_editor_plugin.cpp @@ -5635,7 +5712,8 @@ msgid "Keep Debugger Open" msgstr "Manter Depurador Aberto" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Depurar com um editor externo" #: editor/plugins/script_editor_plugin.cpp @@ -5643,10 +5721,6 @@ msgid "Open Godot online documentation" msgstr "Abrir a documentação online da Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Pesquise na hierarquia da classe." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Pesquise a documentação de referência." @@ -5684,21 +5758,9 @@ msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Pesquisar Ajuda" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Pesquisar Classes" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Scripts embutidos só podem ser editados quando a cena a qual pertencem está " -"carregada" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5709,6 +5771,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Ir para Função..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Apenas recursos do sistema de arquivos podem ser soltos." @@ -5796,11 +5863,13 @@ msgid "Trim Trailing Whitespace" msgstr "Apagar Espaços em Branco" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Converter Indentação Para Espaços" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Converter Indentação Para Tabs" #: editor/plugins/script_text_editor.cpp @@ -5817,36 +5886,32 @@ msgid "Remove All Breakpoints" msgstr "Remover Todos os Pontos de Interrupção" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Ir ao Próximo Ponto de Interrupção" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Ir ao Ponto de Interrupção Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Converter para MaÃusculo" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Converter Para Minúsculo" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrar Arquivos..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Ir para linha..." #: editor/plugins/script_text_editor.cpp @@ -5920,7 +5985,7 @@ msgstr "Transformação do Eixo-Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Transformação do Plano de Visão." +msgstr "Ver Transformada do Plano." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -5943,6 +6008,14 @@ msgid "Animation Key Inserted." msgstr "Chave de Animação Inserida." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Pitch" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objetos Desenhados" @@ -6109,6 +6182,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de velocidade da Visão Livre" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Visualizar Informações" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Diálogo XForm" @@ -6211,11 +6289,6 @@ msgid "Tool Scale" msgstr "Ferramenta Escalar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Encaixar na grade" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Alternar Visão Livre" @@ -6623,6 +6696,11 @@ msgid "Fix Invalid Tiles" msgstr "Nome Inválido." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Centralizar Seleção" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "Pintar TileMap" @@ -6669,24 +6747,31 @@ msgstr "Pegar Tile" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Remover Seleção" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Rotacionar 0 degraus" +#, fuzzy +msgid "Rotate left" +msgstr "Modo Rotacionar" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Rotate right" +msgstr "Mover para Direita" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Rotacionar 90 degraus" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Rotacionar 180 degraus" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Rotacionar 270 degraus" +#, fuzzy +msgid "Clear transform" +msgstr "Transformação" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6719,8 +6804,9 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +#, fuzzy +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Remover Texture Selecionada e TODAS PEÇAS que a usam?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -6735,8 +6821,9 @@ msgid "Merge from scene?" msgstr "Fundir a partir de cena?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +#, fuzzy +msgid "%s file(s) were not added because was already on the list." +msgstr " Arquivo(s) não foi adicionado pois já estava na lista." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6825,6 +6912,15 @@ msgstr "" "corrompidos:" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportando para %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "Predefiniçoes" @@ -6833,6 +6929,11 @@ msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Preset de Exportação:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Recursos" @@ -6895,6 +6996,16 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Modo de Exportação:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exportar" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Modelos de exportação para esta plataforma não foram encontrados:" @@ -7372,10 +7483,6 @@ msgstr "Configurações do Projeto (project.godot)" msgid "General" msgstr "Geral" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Propriedade:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Sobrescrever Para..." @@ -7508,10 +7615,6 @@ msgstr "Escolha um Nó" msgid "Bit %d, val %d." msgstr "Bit %d, val %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Propriedades:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Selecionar Propriedade" @@ -7539,7 +7642,7 @@ msgstr "Renomear" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Prefixo" #: editor/rename_dialog.cpp msgid "Suffix" @@ -7602,18 +7705,22 @@ msgid "Step" msgstr "Passo:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +#, fuzzy +msgid "Amount by which counter is incremented for each node" +msgstr "Quantidade pela qual contador é incrementado para cada nó" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Preenchimento" #: editor/rename_dialog.cpp +#, fuzzy msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Número mÃnimo de dÃgitos para o contador.\n" +"DÃgitos perdidos são preenchidos com zeros." #: editor/rename_dialog.cpp #, fuzzy @@ -7656,7 +7763,7 @@ msgstr "Maiúscula" msgid "Reset" msgstr "Redefinir Ampliação" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Erro" @@ -7717,6 +7824,10 @@ msgid "Instance Scene(s)" msgstr "Instanciar Cena(s)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instânciar Cena Filha" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Remover Script" @@ -7753,6 +7864,12 @@ msgid "Save New Scene As..." msgstr "Salvar Nova Cena Como..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Filhos Editáveis" @@ -7830,6 +7947,11 @@ msgid "Clear Inheritance" msgstr "Limpar Herança" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Abrir a documentação online da Godot" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Excluir Nó(s)" @@ -7838,15 +7960,16 @@ msgid "Add Child Node" msgstr "Adicionar Nó Filho" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Instânciar Cena Filha" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Mudar Tipo" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Abrir script" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "Nova Raiz de Cena" @@ -8011,6 +8134,11 @@ msgid "Path is empty" msgstr "O caminho está vazio" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Caminho de salvamento vazio!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "O caminho não é local" @@ -8099,20 +8227,9 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Aviso" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Erro:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Origem:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Função:" +#, fuzzy +msgid "Stack Trace" +msgstr "Pilha de Quadros" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8143,18 +8260,6 @@ msgid "Stack Frames" msgstr "Pilha de Quadros" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variável" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Erros:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Pilha de Rastreamento (se aplicável):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profilador" @@ -8582,12 +8687,8 @@ msgid "End of inner exception stack trace" msgstr "Fim da pilha de rastreamento de exceção interna" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Precalcular!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Preparar a malha de navegação." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8868,6 +8969,10 @@ msgid "Base Type:" msgstr "Tipo de Base:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Membros:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Nodes DisponÃveis:" @@ -8972,12 +9077,13 @@ msgid "Search VisualScript" msgstr "Remover Nó VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Obter" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +#, fuzzy +msgid "Set %s" +msgstr "Fixar " #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9072,6 +9178,12 @@ msgstr "" "Uma forma deve ser fornecida para que o nó CollisionShape2D funcione. Por " "favor, crie um recurso de forma para ele!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9122,6 +9234,12 @@ msgstr "" "Um material para processar partÃculas não foi atribuÃdo, então nenhum " "comportamento será aplicado." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9264,6 +9382,18 @@ msgstr "" "Uma forma deve ser fornecida para que o nó CollisionShape funcione. Por " "favor, crie um recurso de forma a ele!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" +"Nada está visÃvel porque as meshes não foram atribuÃdas a passes de desenho." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Planejando Malhas" @@ -9288,6 +9418,28 @@ msgid "" msgstr "" "Nada está visÃvel porque as meshes não foram atribuÃdas a passes de desenho." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D apenas funciona quando definido como filho de um nó Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D apenas funciona quando definido como filho de um nó Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9328,7 +9480,7 @@ msgstr "" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9409,10 +9561,6 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirme Por Favor..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Selecionar esta Pasta" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9423,6 +9571,10 @@ msgstr "" "popup*(). Torná-los visÃveis para editar não causa problema, mas eles serão " "ocultados ao rodar a cena." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9490,15 +9642,135 @@ msgstr "Origem inválida!" #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Atribuição à função." #: servers/visual/shader_language.cpp +#, fuzzy msgid "Assignment to uniform." -msgstr "" +msgstr "Atribuição à uniforme." #: servers/visual/shader_language.cpp +#, fuzzy msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Variáveis só podem ser atribuÃdas na função de vértice." + +#~ msgid "Zoom:" +#~ msgstr "Ampliação:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Tem certeza que quer remover todas conexões do \"" + +#~ msgid "Class List:" +#~ msgstr "Lista de Classes:" + +#~ msgid "Search Classes" +#~ msgstr "Pesquisar Classes" + +#~ msgid "Public Methods" +#~ msgstr "Métodos Públicos" + +#~ msgid "Public Methods:" +#~ msgstr "Métodos Públicos:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Itens do Tema de GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Itens do Tema de GUI:" + +#~ msgid "Property: " +#~ msgstr "Propriedade: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Alternar status Favorito da pasta." + +#~ msgid "Show current scene file." +#~ msgstr "Mostrar o arquivo da cena atual." + +#~ msgid "Enter tree-view." +#~ msgstr "Entrar em visualização em árvore." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Palavras inteiras" + +#~ msgid "Match case" +#~ msgstr "Corresponder Caso" + +#~ msgid "Filter: " +#~ msgstr "Filtro: " + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Mostrar no Sistema de Arquivos" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Pesquise na hierarquia da classe." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Pesquisar Classes" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Scripts embutidos só podem ser editados quando a cena a qual pertencem " +#~ "está carregada" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Converter para MaÃusculo" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Converter Para Minúsculo" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Encaixar na grade" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Rotacionar 0 degraus" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Rotacionar 90 degraus" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Rotacionar 180 degraus" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Rotacionar 270 degraus" + +#~ msgid "Warning" +#~ msgstr "Aviso" + +#~ msgid "Error:" +#~ msgstr "Erro:" + +#~ msgid "Source:" +#~ msgstr "Origem:" + +#~ msgid "Function:" +#~ msgstr "Função:" + +#~ msgid "Variable" +#~ msgstr "Variável" + +#~ msgid "Errors:" +#~ msgstr "Erros:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Pilha de Rastreamento (se aplicável):" + +#~ msgid "Bake!" +#~ msgstr "Precalcular!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Preparar a malha de navegação." + +#~ msgid "Get" +#~ msgstr "Obter" #~ msgid "Change Scalar Constant" #~ msgstr "Alterar Constante Escalar" @@ -10005,9 +10277,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Não foi possÃvel salvar Subtextura do Atlas:" -#~ msgid "Exporting for %s" -#~ msgstr "Exportando para %s" - #~ msgid "Setting Up..." #~ msgstr "Ajustando..." @@ -10113,9 +10382,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Fonte Origem:" -#~ msgid "Source Font Size:" -#~ msgstr "Tamanho da Fonte de Origem:" - #~ msgid "Dest Resource:" #~ msgstr "Recurso Destino:" @@ -10194,9 +10460,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "InÃcio(s)" -#~ msgid "Filters" -#~ msgstr "Filtros" - #~ msgid "Source path is empty." #~ msgstr "Caminho de origem está vazio." @@ -10468,15 +10731,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Estéreo" -#~ msgid "Pitch" -#~ msgstr "Pitch" - #~ msgid "Window" #~ msgstr "Janela" -#~ msgid "Move Right" -#~ msgstr "Mover para Direita" - #~ msgid "Scaling to %s%%." #~ msgstr "Escalonando para %s%%." @@ -10831,9 +11088,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Exportação de Projeto" -#~ msgid "Export Preset:" -#~ msgstr "Preset de Exportação:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance não contém um recurso BakedLight ." diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 9a4a70a1fc..1e0b10fce8 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-10 01:02+0000\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" @@ -24,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 3.0\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -32,7 +32,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Tipo de argumento inválido para convert(), use constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -40,34 +40,31 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Entrada inválida %i (não passada) na expressão" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self não pode ser usado porque a instância é nula (não passada)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Nome de Propriedade Ãndice '%s' inválido em Nó %s." +msgstr "Operandos inválidos para operador %s, %s e %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Nome de Propriedade Ãndice '%s' inválido em Nó %s." +msgstr "Ãndice inválido do tipo %s para tipo base %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Ãndice nomeado '%s' inválido para base tipo %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Argumento inválido de tipo: " +msgstr "Argumentos inválidos para construir '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Em chamada para '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -76,27 +73,23 @@ msgstr "Livre" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Equilibrado" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Espelho X" +msgstr "Espelhar" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Inserir Chave" +msgstr "Inserir Chave Aqui" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Duplicar Seleção" +msgstr "Duplicar Chave(s) Selecionada(s)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Apagar Selecionados" +msgstr "Apagar Chave(s) Selecionada(s)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -127,46 +120,40 @@ msgid "Anim Change Call" msgstr "Anim Mudar Chamada" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Propriedade:" +msgstr "Pista de Propriedades" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Tipo de transformação" +msgstr "Pista de Transformação 3D" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Chamar Pista Método" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Pista Curva Bezier" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Pista de Reprodução de Ãudio" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Parar reprodução da Animação. (S)" +msgstr "Pista de Reprodução de Animação" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Anim Adicionar Pista" +msgstr "Adicionar Pista" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Duração da Animação (em segundos)." +msgstr "Duração da Animação (segundos)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Zoom da Animação." +msgstr "Loop da Animação" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -174,41 +161,36 @@ msgid "Functions:" msgstr "Funções:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Audição de áudio" +msgstr "Clips Ãudio:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "Clips Anim:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Alternar modo livre de distrações." +msgstr "Alternar esta pista on/off." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Modo Atualização (Como esta propriedade é definida)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Nó Animation" +msgstr "Modo de Interpolação" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Modo Loop Wrap (interpola o fim com o inÃcio do loop)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Remover Pista selecionada." +msgstr "Remover esta Pista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Tempo X-Fade (s):" +msgstr "Tempo (s): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -223,13 +205,12 @@ msgid "Trigger" msgstr "Gatilho" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "CaracterÃsticas" +msgstr "Capturar" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Mais próximo" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -238,15 +219,15 @@ msgstr "Linear" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cúbico" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Prender Interp Loop" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Enrolar Interp Loop" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -254,14 +235,12 @@ msgid "Insert Key" msgstr "Inserir Chave" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Duplicar Nó(s)" +msgstr "Duplicar Chave(s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Apagar Nó(s)" +msgstr "Apagar Chave(s)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -292,6 +271,8 @@ msgstr "Anim Inserir" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" +"AnimationPlayer não se pode animar a ele próprio, apenas a outros " +"executantes." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -307,7 +288,7 @@ msgstr "Anim Inserir Chave" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Pistas de Transformação só se aplicam a nós de base Espacial." #: editor/animation_track_editor.cpp msgid "" @@ -316,44 +297,49 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Pistas Ãudio só podem apontar a nós de tipo:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Pistas de Animação só podem apontar a nós AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Um reprodutor de animação não se pode animar a ele próprio, apenas a outros " +"reprodutores." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Não é possÃvel adicionar nova pista sem uma raÃz" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Caminho da pista é inválido, não se consegue adicionar uma chave." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Pista não do tipo Spatial, não se consegue inserir chave" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" +"Caminho da pista é inválido, não se consegue adicionar uma chave método." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet não encontrada no Script: " +msgstr "Método não encontrado no objeto: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Anim Mover Chaves" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Ãrea de Transferência está vazia!" +msgstr "Ãrea de Transferência está vazia" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -363,24 +349,23 @@ msgstr "Anim Escalar Chaves" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Esta opção não funciona para edição de Bezier, dado que é uma única faixa." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Apenas mostrar faixas de nós selecionados na árvore." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Agrupar faixas por nó ou exibi-las como lista simples." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Passos (s):" +msgstr "Ajuste (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Ãrvore de Animação válida." +msgstr "Valor passo da Animação." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -392,19 +377,16 @@ msgid "Edit" msgstr "Editar" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimationTree" +msgstr "Propriedades da Animação." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Copiar Parâmetros" +msgstr "Copiar Pistas" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Colar Parâmetros" +msgstr "Colar Pistas" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -414,8 +396,7 @@ msgstr "Escalar Selecção" msgid "Scale From Cursor" msgstr "Escalar Partir do Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplicar Seleção" @@ -424,17 +405,16 @@ msgid "Duplicate Transposed" msgstr "Duplicar Transposto" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Apagar Selecionados" +msgstr "Apagar Seleção" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" -msgstr "Ir Próximo Passo" +msgid "Go to Next Step" +msgstr "Ir para Próximo Passo" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" -msgstr "Ir Passo Anterior" +msgid "Go to Previous Step" +msgstr "Ir para Passo Anterior" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -446,11 +426,11 @@ msgstr "Limpar Animação" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Escolha o nó que será animado:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Usar Curvas Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -494,11 +474,11 @@ msgstr "Limpar" #: editor/animation_track_editor.cpp msgid "Scale Ratio:" -msgstr "Taxa de Escala:" +msgstr "Proporção de Escala:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Selecionar pistas a copiar:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -536,11 +516,11 @@ msgstr "Sem combinações" msgid "Replaced %d occurrence(s)." msgstr "SubstituÃdo %d ocorrência(s)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Caso de Compatibilidade" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Palavras inteiras" @@ -569,16 +549,15 @@ msgid "Reset Zoom" msgstr "Repor Zoom" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "Avisos" +msgstr "Avisos:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom In" +msgid "Font Size:" +msgstr "Vista de frente" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linha:" @@ -611,6 +590,7 @@ msgstr "Adicionar" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -667,9 +647,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desligar '%s' de '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Desligar '%s' de '%s'" +msgstr "Desconectar tudo do sinal: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -681,19 +660,16 @@ msgid "Disconnect" msgstr "Desligar" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Ligar sinal:" +msgstr "Conectar sinal: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Erro de Ligação" +msgstr "Editar Conexão: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Está seguro que quer executar mais do que um Projeto?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Deseja remover todas as conexões do sinal \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -701,22 +677,19 @@ msgstr "Sinais" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Deseja remover todas as conexões deste sinal?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Desligar" +msgstr "Desconectar Tudo" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Editar" +msgstr "Editar..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Métodos" +msgstr "Ir para Método" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -747,24 +720,21 @@ msgstr "Recente:" msgid "Search:" msgstr "Procurar:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Correspondências:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descrição:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "Procurar substituição para:" +msgstr "Procurar Substituição para:" #: editor/dependency_editor.cpp msgid "Dependencies For:" @@ -815,12 +785,13 @@ msgstr "Editor de dependência" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "Procurar recurso de substituição:" +msgstr "Procurar Recurso de substituição:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -853,8 +824,8 @@ msgid "Error loading:" msgstr "Erro ao carregar:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "Cena falha ao carregar devido a dependências que estão em falta:" +msgid "Load failed due to missing dependencies:" +msgstr "Falha no carregamento devido a dependências em falta:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -912,14 +883,6 @@ msgstr "Mudar o valor do dicionário" msgid "Thanks from the Godot community!" msgstr "Agradecimentos da Comunidade Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Contribuidores da engine Godot" @@ -1095,8 +1058,7 @@ msgid "Bus options" msgstr "Opções de barramento" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicado" @@ -1238,7 +1200,7 @@ msgstr "Remover Carregamento Automático" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "Habilitar" +msgstr "Ativar" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" @@ -1269,8 +1231,9 @@ msgstr "Caminho:" msgid "Node Name:" msgstr "Nome do Nó:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nome" @@ -1340,25 +1303,28 @@ msgid "Template file not found:" msgstr "Ficheiro Modelo não encontrado:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Selecionar pasta atual" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "O Ficheiro existe, sobrescrever?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Selecionar pasta atual" +msgid "Select This Folder" +msgstr "Selecionar esta Pasta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Copiar Caminho" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Mostrar no Gestor de Ficheiros" +msgid "Open in File Manager" +msgstr "Abrir no Gestor de Ficheiros" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "Mostrar no Gestor de Ficheiros" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1394,7 +1360,8 @@ msgid "Open a File or Directory" msgstr "Abrir um Ficheiro ou Diretoria" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Guardar" @@ -1452,8 +1419,7 @@ msgstr "Diretorias e Ficheiros:" msgid "Preview:" msgstr "Visualização prévia:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Ficheiro:" @@ -1469,24 +1435,11 @@ msgstr "Analisar fontes" msgid "(Re)Importing Assets" msgstr "A (Re)Importar Ativos" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Procurar em Ajuda" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Lista de Classes:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Procurar Classes" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Topo" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Classe:" @@ -1503,28 +1456,28 @@ msgid "Brief Description:" msgstr "Breve Descrição:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Membros" +msgid "Properties" +msgstr "Propriedades" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Membros:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Propriedades:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Métodos Públicos" +msgid "Methods" +msgstr "Métodos" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Métodos Públicos:" +msgid "Methods:" +msgstr "Métodos:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Itens do tema GUI" +msgid "Theme Properties" +msgstr "Propriedades do Tema" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Itens do tema GUI:" +msgid "Theme Properties:" +msgstr "Propriedades do Tema:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1551,8 +1504,12 @@ msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp -msgid "Description" -msgstr "Descrição" +msgid "Class Description" +msgstr "Descrição da Classe" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "Descrição da Classe:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1569,12 +1526,12 @@ msgstr "" "um[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Propriedades" +msgid "Property Descriptions" +msgstr "Descrições da Propriedade" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "Descrição da Propriedade:" +msgid "Property Descriptions:" +msgstr "Descrições da Propriedade:" #: editor/editor_help.cpp msgid "" @@ -1585,12 +1542,12 @@ msgstr "" "[color=$color][url=$url]contribuindo com uma[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Métodos" +msgid "Method Descriptions" +msgstr "Descrições do Método" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "Descrição do Método:" +msgid "Method Descriptions:" +msgstr "Descrições do Método:" #: editor/editor_help.cpp msgid "" @@ -1600,18 +1557,58 @@ msgstr "" "Atualmente não existe descrição para este Método. Por favor ajude-nos [color=" "$color][url=$url]contribuindo com uma[/url][/color]!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Procurar em Ajuda" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Mostrar Tudo" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Apenas Classes" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Apenas Métodos" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Apenas Sinais" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Apenas Constantes" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Apenas Propriedades" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Apenas Propriedades do Tema" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Tipo do Membro" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "Classe" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Propriedade:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Definir" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Definir Múltiplo:" #: editor/editor_log.cpp msgid "Output:" @@ -1639,6 +1636,11 @@ msgstr "Exportação do projeto falhou com código de erro %d." msgid "Error saving resource!" msgstr "Erro ao guardar recurso!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Guardar Recurso Como..." @@ -1657,7 +1659,7 @@ msgstr "Erro ao guardar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "ImpossÃvel abrir '%s'. O ficheiro pode ter sido movido ou apagado." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1693,12 +1695,22 @@ msgstr "Esta operação não pode ser feita sem uma raiz da árvore." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "ImpossÃvel guardar Cena. Provavelmente, as dependências (instâncias ou " "heranças) não puderam ser satisfeitas." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Não se consegue sobrescrever cena ainda aberta!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "ImpossÃvel carregar MeshLibrary para fundir!" @@ -1871,7 +1883,7 @@ msgstr "Esta operação não pode ser efetuada sem uma Cena." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "Exportar Biblioteca de Mesh" +msgstr "Exportar Biblioteca de Malhas" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." @@ -1949,7 +1961,7 @@ msgstr "Incapaz de ativar plugin em: '%s' falha de análise ou configuração." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "Incapaz de encontrar campo Script para plugin em: 'res://addons/%s'." +msgstr "Incapaz de localizar campo Script para plugin em: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." @@ -1957,6 +1969,14 @@ msgstr "Incapaz de carregar Script addon do Caminho: '%s'." #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Incapaz de carregar Script addon do caminho: '%s' Parece haver um erro no " +"código, reveja a sintaxe." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Incapaz de carregar Script addon do Caminho: '%s' Tipo base não é " @@ -2005,15 +2025,18 @@ msgstr "Apagar Modelo" msgid "Default" msgstr "Padrão" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Mostrar no Sistema de Ficheiros" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Executar a Cena" +msgstr "Executar esta Cena" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Fechar outros separadores" +msgstr "Fechar Separador" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2088,7 +2111,7 @@ msgid "Save Scene" msgstr "Guardar Cena" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Guardar todas as Cenas" #: editor/editor_node.cpp @@ -2117,7 +2140,7 @@ msgid "Undo" msgstr "Desfazer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refazer" @@ -2146,15 +2169,15 @@ msgid "Tools" msgstr "Ferramentas" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Abrir Gestor de Projeto?" +msgstr "Abrir Pasta de Dados do Projeto" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Sair para a lista de Projetos" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Depurar" @@ -2183,8 +2206,8 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"Quando esta opção está ativa, exportação ou distribuição criará um " -"executável mÃnimo.\n" +"Quando esta opção é ativada, exportação ou distribuição criará um executável " +"mÃnimo.\n" "O Sistema de Ficheiros será fornecido ao Projeto pelo Editor sobre a rede.\n" "Em Android, a distribuição irá usar a ligação USB para melhor performance. " "Esta opção acelera o teste de jogos pesados." @@ -2261,18 +2284,16 @@ msgid "Toggle Fullscreen" msgstr "Alternar Ecrã completo" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Configurações do Editor" +msgstr "Abrir Pasta do Editor de Dados/Configurações" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Abrir Pasta de Dados do Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Configurações do Editor" +msgstr "Abrir Pasta de Configurações do Editor" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2282,10 +2303,6 @@ msgstr "Gerir Modelos de Exportação" msgid "Help" msgstr "Ajuda" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Classes" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2348,21 +2365,20 @@ msgstr "Executar a Cena" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "Executa a cena customizada" +msgstr "Executa a cena personalizada" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "Executar Cena Customizada" +msgstr "Executar Cena Personalizada" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Alterar o driver de vÃdeo requer reiniciar o editor." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Guardar & Sair" +msgstr "Guardar & Reiniciar" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2380,27 +2396,26 @@ msgstr "Atualizar Alterações" msgid "Disable Update Spinner" msgstr "Desativar a roleta de atualização" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspetor" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importar" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nó" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Sistema de Ficheiros" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "Inspetor" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Nó" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Expandir tudo" +msgstr "Expandir Painel do Fundo" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2472,16 +2487,15 @@ msgstr "Abrir o Editor anterior" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "A criar pré-visualizações de Mesh" +msgstr "A criar pré-visualizações de Malha" #: editor/editor_plugin.cpp msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Editar PolÃgono" +msgstr "Editar Plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2505,15 +2519,13 @@ msgid "Status:" msgstr "Estado:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Editar" +msgstr "Editar:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Partida!" +msgstr "InÃcio" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2535,7 +2547,7 @@ msgstr "% Quadro" msgid "Physics Frame %" msgstr "% Quadro de FÃsica" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tempo:" @@ -2559,27 +2571,45 @@ msgstr "Tempo" msgid "Calls" msgstr "Chamadas" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "On" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Camada" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Bit %d, val %d." +msgstr "Bit %d, valor %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Vazio]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Atribuir" +msgstr "Atribuir.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Não se consegue criar Textura Viewport em recursos guardados como ficheiro.\n" +"O recurso tem de pertencer a uma cena." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"Não se consegue criar Textura Viewport neste recurso porque não está " +"definido na cena como local.\n" +"Ative a sua propriedade 'local to scene' (e em todos os recursos que o " +"contêm até a um Nó)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2598,10 +2628,6 @@ msgstr "Novo %s" msgid "Make Unique" msgstr "Fazer único" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Mostrar no Sistema de Ficheiros" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2610,7 +2636,8 @@ msgstr "Mostrar no Sistema de Ficheiros" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Colar" @@ -2623,9 +2650,8 @@ msgstr "Converter em %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Abrir no Editor" +msgstr "Abrir Editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -2633,25 +2659,23 @@ msgstr "Nó selecionado não é uma Vista!" #: editor/editor_properties_array_dict.cpp msgid "Size: " -msgstr "" +msgstr "Tamanho: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Página: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Novo nome:" +msgstr "Novo Chave:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Novo nome:" +msgstr "Novo Valor:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Adicionar Par Chave/Valor" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2737,16 +2761,15 @@ msgstr "A readquirir servidores, espere por favor..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "Remover versão de Modelo '%s'?" +msgstr "Remover versão '%s' do Modelo?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." msgstr "ImpossÃvel abrir o zip de Modelos." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Formato de version.txt inválido, dentro dos Modelos." +msgstr "Formato de version.txt inválido dentro dos modelos: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2811,6 +2834,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Falhou a instalação de Modelos. Os ficheiros problemáticos podem ser " +"encontrados em '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2891,9 +2916,8 @@ msgid "Download Templates" msgstr "Transferir Modelos" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Selecionar servidor da lista: " +msgstr "Selecionar servidor da lista: (Shift+Click: Abrir no Navegador)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2902,18 +2926,20 @@ msgstr "" "leitura!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Favoritos" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "'%s' não foi encontrado no Sistema de Ficheiros!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Visualizar itens como uma grelha de miniaturas" +msgstr "Visualizar itens como grelha de miniaturas." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "Visualizar itens como uma lista" +msgstr "Visualizar itens como lista." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2941,7 +2967,7 @@ msgstr "Erro ao duplicar:" msgid "Unable to update dependencies:" msgstr "Incapaz de atualizar dependências:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Nenhum nome foi fornecido" @@ -2978,22 +3004,6 @@ msgid "Duplicating folder:" msgstr "A duplicar Diretoria:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Expandir tudo" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Colapsar tudo" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renomear..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Mover para..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Abrir Cena(s)" @@ -3002,6 +3012,14 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Adicionar aos Favoritos" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Remover dos Favoritos" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Editar Dependências..." @@ -3009,19 +3027,33 @@ msgstr "Editar Dependências..." msgid "View Owners..." msgstr "Ver proprietários..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renomear..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "Mover para..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Novo Script" +msgstr "Novo Script..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Guardar Recurso Como..." +msgstr "Novo Recurso..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "Expandir Tudo" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Colapsar Tudo" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3043,29 +3075,18 @@ msgid "Re-Scan Filesystem" msgstr "Carregar novamente o Sistema de Ficheiros" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Alternar a pasta de situação como Favorita" +msgid "Toggle split mode" +msgstr "Alternar modo de divisão" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Selecionar o sub-tile editado." +msgid "Search files" +msgstr "Procurar ficheiros" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instancie a(s) Cena(s) selecionada(s) como filha(s) do Nó selecionado." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Procurar Classes" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3073,56 +3094,42 @@ msgstr "" "A analisar Ficheiros,\n" "Espere, por favor..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "Já existe uma pasta neste caminho com o nome indicado." +msgstr "Já existe um ficheiro ou pasta com o mesmo nome nesta localização." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Sobrescrever" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "Criar Script" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Encontrar tile" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Encontrar" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "Palavras inteiras" +msgid "Find in Files" +msgstr "Localizar em Ficheiros" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Caso de Compatibilidade" +msgid "Find:" +msgstr "Localizar:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Pasta:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Modo de filtro:" +msgid "Filters:" +msgstr "Filtros:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find..." -msgstr "Encontrar..." +msgstr "Localizar..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp msgid "Replace..." @@ -3133,52 +3140,48 @@ msgid "Cancel" msgstr "Cancelar" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Localizar: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Substituir" +msgstr "Substituir: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Substituir todos" +msgstr "Substituir tudo (não há desfazer)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "A guardar..." +msgstr "A procurar..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Texto de Pesquisa" +msgstr "Pesquisa completa" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ERRO: O nome da Animação já existe!" +msgstr "Já existe o nome de grupo ." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Nome inválido." +msgstr "Nome de Grupo inválido." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Adicionar ao Grupo" +msgstr "Nós fora do Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Filtrar Nós" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Adicionar ao Grupo" +msgstr "Nós no Grupo" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3189,9 +3192,8 @@ msgid "Remove from Group" msgstr "Remover do Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Grupos" +msgstr "Gerir Grupos" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3248,7 +3250,7 @@ msgstr "A gerar Lightmaps" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "A gerar para Mesh: " +msgstr "A gerar para Malha: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -3272,11 +3274,11 @@ msgstr "A guardar..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "Definir como padrão para '%s'" +msgstr "Definir como Padrão para '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "Limpar padrão para '%s'" +msgstr "Limpar Padrão para '%s'" #: editor/import_dock.cpp msgid " Files" @@ -3298,18 +3300,13 @@ msgstr "Reimportar" msgid "Failed to load resource." msgstr "Falha ao carregar recurso." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" -msgstr "Expandir tudo" +msgid "Expand All Properties" +msgstr "Expandir Todas as Propriedades" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "Colapsar todas as Propriedades" +msgid "Collapse All Properties" +msgstr "Colapsar Todas as Propriedades" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3325,9 +3322,8 @@ msgid "Paste Params" msgstr "Colar Parâmetros" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Ãrea de transferência de recursos vazia!" +msgstr "Editar Ãrea de Transferência de Recursos" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3370,9 +3366,8 @@ msgid "Object properties." msgstr "Propriedades do Objeto." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Filtrar Nós" +msgstr "Propriedades do Filtro" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3387,37 +3382,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Selecionar um Nó para editar sinais e grupos." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Editar PolÃgono" +msgstr "Editar Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Criar solução C#" +msgstr "Criar Plugin" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Plugins" +msgstr "Nome do Plugin:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Sub-pasta:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Linguagem" +msgstr "Linguagem:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Script inválido" +msgstr "Nome do Script:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Ativar agora?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3476,15 +3466,14 @@ msgstr "Adicionar Animação" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Carregar" +msgstr "Carregar.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "Este tipo de nó não pode ser usado. Apenas nós raiz são permitidos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3494,66 +3483,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree está inativa.\n" +"Active-a para permitir a reprodução, verifique avisos do nó se a ativação " +"falhar." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Definir a posição de mistura dentro do espaço" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Selecionar e mover pontos, criar pontos com RMB." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Apagar Pontos" +msgstr "Criar pontos." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "RMB: Apagar Ponto." +msgstr "Apagar pontos." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Mover Ponto" +msgstr "Ponto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Nó Animation" +msgstr "Abrir Nó Animação" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Ação '%s' já existe!" +msgstr "Já existe triângulo" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D não pertence a um nó AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Não existem triângulos, nenhuma mistura pode ocorrer." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Criar triângulos ligando pontos." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." -msgstr "" +msgstr "Apagar pontos e triângulos." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Gera triângulos automaticamente (em vez de manual)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3561,6 +3548,11 @@ msgstr "" msgid "Snap" msgstr "Ajustar" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Mistura:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3568,20 +3560,24 @@ msgstr "Editar filtros" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "SaÃda do nó não pode ser adicionada à árvore de mistura." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Incapaz de conectar, porta pode estar em uso ou conexão pode ser inválida." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Reprodutor de animação não definido, sendo incapaz de recolher nome das " +"faixas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Caminho do reprodutor é inválido, sendo incapaz de recolher nome das faixas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3589,23 +3585,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Reprodutor de animação não tem um caminha de nó raiz válido, sendo incapaz " +"de recolher nome das faixas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Adicionar Nó" +msgstr "Adicionar Nó.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Editar filtros" +msgstr "Editar Pistas Filtradas:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Filhos editáveis" +msgstr "Ativar filtragem" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3633,14 +3628,12 @@ msgid "Remove Animation" msgstr "Remover Animação" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ERRO: Nome de Animação inválido!" +msgstr "Nome de Animação inválido!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ERRO: O nome da Animação já existe!" +msgstr "Já existe o nome da Animação!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3653,7 +3646,7 @@ msgstr "Misturar seguinte alterado" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "Mudar tempo de mistura" +msgstr "Mudar tempo de Mistura" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -3664,14 +3657,12 @@ msgid "Duplicate Animation" msgstr "Duplicar Animação" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ERRO: Sem Animação para copiar!" +msgstr "Nenhuma animação para copiar!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ERRO: nenhuma Animação na Ãrea de Transferência!" +msgstr "Nenhum recurso de animação na Ãrea de Transferência!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3682,9 +3673,8 @@ msgid "Paste Animation" msgstr "Colar Animação" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ERRO: Sem Animação para editar!" +msgstr "Nenhuma animação para editar!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3729,14 +3719,12 @@ msgid "New" msgstr "Novo" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Transições" +msgstr "Editar Transições..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Abrir no Editor" +msgstr "Abrir no Inspetor" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3795,9 +3783,8 @@ msgid "Include Gizmos (3D)" msgstr "Incluir ferramentas (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Colar Animação" +msgstr "Pregar AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3817,7 +3804,7 @@ msgstr "Erro!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "Tempos de mistura:" +msgstr "Tempos de Mistura:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -3825,36 +3812,35 @@ msgstr "Próximo (auto-fila):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "Tempos de mistura de Animação cruzada" +msgstr "Tempos de Mistura de Animação cruzada" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "" +msgstr "Fim" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Imediato" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Sinc" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "No Fim" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Viagem" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Nodos de inÃcio e fim são necessários para uma sub-transição." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Não está no Caminho do recurso." +msgstr "Nenhum recurso de playback definido no caminho: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3862,34 +3848,34 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Selecionar e mover nós.\n" +"RMB para adicionar novos nós.\n" +"Shift+LMB para criar conexões." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Criar Novo %s" +msgstr "Criar novos nós." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Conectar Nós" +msgstr "Conectar nós." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Remover Pista selecionada." +msgstr "Remover nó ou transição selecionado" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Alternar autoplay deste animação em inÃcio, reinÃcio ou procura de zero." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Definir a animação final. Útil para sub-transições." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Transição" +msgstr "Transição: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3943,10 +3929,6 @@ msgid "Amount:" msgstr "Valor:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Mistura:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Mistura 0:" @@ -4087,14 +4069,12 @@ msgid "Asset Download Error:" msgstr "Erro na transferência de Ativo:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "A transferir" +msgstr "A transferir (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "A transferir" +msgstr "A transferir..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4121,14 +4101,12 @@ msgid "Download for this asset is already in progress!" msgstr "A transferência deste Ativo já está em andamento!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "primeiro" +msgstr "Primeiro" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "Guia anterior" +msgstr "Anterior" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4136,7 +4114,7 @@ msgstr "Proximo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Último" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4196,7 +4174,7 @@ msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" -"Não há Meshes para cozinhar. Assegure-se que contêm um canal UV2 e que a " +"Não há Meshes para consolidar. Assegure-se que contêm um canal UV2 e que a " "referência 'Bake Light' flag está on." #: editor/plugins/baked_lightmap_editor_plugin.cpp @@ -4205,7 +4183,7 @@ msgstr "Falha ao criar imagens lightmap, assegure-se que o caminho é gravável. #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "Cozinhar Lightmaps" +msgstr "Consolidar Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp @@ -4261,29 +4239,28 @@ msgid "Create new horizontal and vertical guides" msgstr "Criar guias horizontal e vertical" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "Mover Eixo" +msgstr "Mover pivô" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Rodar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "Mover ação" +msgstr "Mover âncora" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Redimensionar CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "Escalar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "Editar CanvasItem" +msgstr "Mover CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4302,19 +4279,16 @@ msgid "Paste Pose" msgstr "Colar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "Zoom Out" +msgstr "Diminuir zoom" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "Zoom Out" +msgstr "Repor zoom" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Zoom In" +msgstr "Aumentar zoom" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4346,6 +4320,10 @@ msgid "Rotate Mode" msgstr "Modo rodar" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Modo Escalar" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4363,16 +4341,14 @@ msgid "Pan Mode" msgstr "Modo deslocamento" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Alternar Ajuste" +msgstr "Alternar Ajuste." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "Usar Ajuste" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "Opções de Ajuste" @@ -4382,7 +4358,7 @@ msgstr "Ajustar à grelha" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "Usar Ajuste na rotação" +msgstr "Usar Ajuste de rotação" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4395,7 +4371,7 @@ msgstr "Ajuste relativo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "Usar Ajuste de pixel" +msgstr "Usar Ajuste de Pixel" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" @@ -4414,9 +4390,8 @@ msgid "Snap to node sides" msgstr "Ajustar aos lados do Nó" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "Ajustar ao Nó âncora" +msgstr "Ajustar ao centro do Nó" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4445,6 +4420,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaura a capacidade de selecionar os Objetos-filho." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "Opções do Esqueleto" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Mostrar ossos" @@ -4458,12 +4437,11 @@ msgstr "Apagar corrente IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Fazer Osso(s) Personalizados a partis de Nó(s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "Apagar ossos" +msgstr "Apagar Ossos Personalizados" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4496,6 +4474,10 @@ msgid "Show Viewport" msgstr "Mostrar Vista" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Mostrar Grupo e Bloquear Ãcones" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrar seleção" @@ -4508,9 +4490,8 @@ msgid "Layout" msgstr "Esquema" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Inserir Chaves" +msgstr "Inserir chaves." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4572,17 +4553,16 @@ msgstr "Criar Poly3D" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "Definir handle" +msgstr "Definir Manipulador" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "PartÃculas" +msgstr "CPUPartÃculas" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "Criar Pontos de emissão a partir da Mesh" +msgstr "Criar Pontos de emissão a partir da Malha" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4655,7 +4635,7 @@ msgstr "Pressione Shift para editar tangentes individualmente" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "Cozinhar a sonda GI" +msgstr "Consolidar Sonda GI" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -4703,7 +4683,7 @@ msgstr "RMB: Apagar Ponto." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "A Mesh está vazia!" +msgstr "A Malha está vazia!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" @@ -4727,36 +4707,36 @@ msgstr "Criar forma convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "Criar Mesh de navegação" +msgstr "Criar Malha de Navegação" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "Mesh incluÃda não é do tipo ArrayMesh." +msgstr "Malha contida não é do tipo ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "Falhou o desempacotamento UV, a Mesh pode não ser múltipla?" +msgstr "Falhou o desempacotamento UV, a Malha pode não ser múltipla?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "Nenhuma Mesh para depurar." +msgstr "Nenhuma Malha para depurar." #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/sprite_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "O Modelo não tem UV neste Layer" +msgstr "O Modelo não tem UV nesta camada" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "Falta uma Mesh a MeshInstance!" +msgstr "Falta uma Malha a MeshInstance!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "A Mesh não tem superfÃcie para criar contornos!" +msgstr "A Malha não tem superfÃcie para criar contornos!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "Tipo primitivo de Mesh não é PRIMITIVE_TRIANGLES!" +msgstr "Tipo primitivo de Malha não é PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4768,7 +4748,7 @@ msgstr "Criar contorno" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Mesh" +msgstr "Malha" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -4788,7 +4768,7 @@ msgstr "Criar irmão de colisão convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." -msgstr "Criar Mesh contorno..." +msgstr "Criar Malha de Contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4804,7 +4784,7 @@ msgstr "Desempacotar UV2 para Lightmap/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "Criar Mesh contorno" +msgstr "Criar Malha de Contorno" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" @@ -4833,23 +4813,23 @@ msgstr "Atualizar da Cena" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "Não há fonte de Mesh (nem MultiMesh no Nó)." +msgstr "Fonte da Malha não especificada (nem MultiMesh no Nó)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "Não há fonte de Mesh (e MultiMesh não contêm Mesh)." +msgstr "Fonte da Malha não especificada (e MultiMesh não contêm Malha)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "A fonte de Mesh é inválida (Caminho inválido)." +msgstr "A fonte da Malha é inválida (Caminho inválido)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "A fonte de Mesh é inválida (não é MeshInstance)." +msgstr "A fonte da Malha é inválida (não é MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "A fonte de Mesh é inválida (não contêm um recurso Mesh)." +msgstr "A fonte da Malha é inválida (não contêm um recurso Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." @@ -4877,7 +4857,7 @@ msgstr "Ãrea não pode ser mapeada." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "Selecione uma fonte Mesh:" +msgstr "Selecione uma fonte Malha:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" @@ -4897,7 +4877,7 @@ msgstr "SuperfÃcie alvo:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "Mesh fonte:" +msgstr "Fonte Malha:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -4913,7 +4893,7 @@ msgstr "Eixo Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "Mesh Eixo cima:" +msgstr "Malha Eixo Cima:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -4936,9 +4916,8 @@ msgid "Create Navigation Polygon" msgstr "Criar PolÃgono de navegação" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "A gerar AABB" +msgid "Generating Visibility Rect" +msgstr "A Gerar Visibilidade Rect" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4966,6 +4945,11 @@ msgstr "Limpar máscara de emissão" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Converter em CPUPartÃculas" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "PartÃculas" @@ -5035,13 +5019,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "É necessário um Material processador do tipo 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Gerar AABB" +msgid "Generating AABB" +msgstr "A gerar AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Converter em maiúsculas" +msgid "Generate AABB" +msgstr "Gerar AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5129,12 +5112,12 @@ msgstr "Opções" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Espelhar ângulos do manipulador" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Espelhar comprimentos do manipulador" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5169,56 +5152,49 @@ msgid "Remove In-Control Point" msgstr "Remover Ponto In-Control" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Mover Ponto" +msgstr "Mover Junta" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "A propriedade esqueleto do Polygon2D não aponta para um nó Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Mostrar ossos" +msgstr "Sinc ossos" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Criar mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Criar PolÃgono" +msgstr "Criar PolÃgono & UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Separar ponto consigo próprio." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "Separação não forma uma aresta existente." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "Ação '%s' já existe!" +msgstr "Separação já existe." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Adicionar Ponto" +msgstr "Adicionar Separação" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Caminho inválido" +msgstr "Separação inválida: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Remover Ponto" +msgstr "Remover Separação" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5226,7 +5202,7 @@ msgstr "Transformar mapa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Pintar pesos dos ossos" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5234,25 +5210,21 @@ msgstr "Editor UV de PolÃgono 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Editar PolÃgono" +msgstr "Poli" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Separar Caminho" +msgstr "Separações" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Criar ossos" +msgstr "Ossos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Criar PolÃgono" @@ -5286,24 +5258,23 @@ msgstr "Escalar PolÃgono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Conectar dois pontos para fazer uma divisão" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Selecione primeiro um item de configuração!" +msgstr "Selecione uma separação para a apagar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Pintar pesos com intensidade especÃfica" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Não pintar pesos com intensidade especÃfica" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "Raio:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5318,9 +5289,8 @@ msgid "Clear UV" msgstr "Limpar UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Configurações do GridMap" +msgstr "Configurações da Grelha" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5331,34 +5301,28 @@ msgid "Grid" msgstr "Grelha" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Configurar Ajuste" +msgstr "Configurar Grelha:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Compensação da grelha:" +msgstr "Deslocação X da grelha:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Compensação da grelha:" +msgstr "Deslocação Y da grelha:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Passo da grelha:" +msgstr "Passo X da grelha:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Passo da grelha:" +msgstr "Passo Y da grelha:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Escalar PolÃgono" +msgstr "Sincronizar Ossos com PolÃgono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5386,22 +5350,22 @@ msgid "Paste Resource" msgstr "Colar Recurso" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Abrir no Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instância:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Abrir no Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Carregar recurso" @@ -5412,12 +5376,11 @@ msgstr "ResourcePreloader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree não tem caminho definido para um AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Ãrvore de Animação inválida." +msgstr "Caminho para AnimationPlayer é inválido" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5428,19 +5391,20 @@ msgid "Close and save changes?" msgstr "Fechar e guardar alterações?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Erro ao guardar TileSet!" +msgstr "Erro ao escrever TextFile:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Erro ao carregar ficheiro." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Erro - ImpossÃvel criar Script no Sistema de Ficheiros." +msgstr "Erro ao carregar ficheiro." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Erro ao guardar TileSet!" +msgstr "Erro ao guardar ficheiro!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5459,19 +5423,16 @@ msgid "Error importing" msgstr "Erro ao importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Nova Diretoria..." +msgstr "Novo TextFile..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" -msgstr "Abrir um Ficheiro" +msgstr "Abrir Ficheiro" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Guardar Como..." +msgstr "Guardar Ficheiro Como..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5487,7 +5448,7 @@ msgstr " Referência de classe" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Alternar ordenação alfabética da lista de métodos." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5518,9 +5479,8 @@ msgid "File" msgstr "Ficheiro" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Ver Ficheiros" +msgstr "Novo TextFile" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5535,12 +5495,8 @@ msgid "Copy Script Path" msgstr "Copiar Caminho do Script" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Mostrar no Sistema de Ficheiros" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "Histórico anterior" +msgid "History Previous" +msgstr "Histórico Anterior" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5586,7 +5542,7 @@ msgstr "Alternar painel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "Encontrar seguinte" +msgstr "Localizar Seguinte" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" @@ -5610,18 +5566,14 @@ msgid "Keep Debugger Open" msgstr "Manter depurador aberto" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "Depurar com Editor externo" +msgid "Debug with External Editor" +msgstr "Depurar com Editor Externo" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "Abrir documentação online do Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Procurar na hierarquia de classe." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Procurar na documentação de referência." @@ -5658,39 +5610,28 @@ msgid "Debugger" msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Procurar em Ajuda" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Procurar Classes" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Scripts incorporados só podem ser editados quando a Cena a que pertencem é " -"carregada" +msgid "Search Results" +msgstr "Resultados da Pesquisa" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Linha:" +msgstr "Linha" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignorar)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Ir para Função" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Só podem ser largados recursos do Sistema de Ficheiros ." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Completar sÃmbolo" +msgstr "SÃmbolo Consulta" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5714,11 +5655,11 @@ msgstr "Capitalizar" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "Destaque de Sintaxe" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Padrão" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5771,12 +5712,12 @@ msgid "Trim Trailing Whitespace" msgstr "Apagar espaços nos limites" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "Converter Indentação em espaços" +msgid "Convert Indent to Spaces" +msgstr "Converter Indentação em Espaços" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "Converter Indentação em tabulação" +msgid "Convert Indent to Tabs" +msgstr "Converter Indentação em Tabulação" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5792,37 +5733,28 @@ msgid "Remove All Breakpoints" msgstr "Remover todos os Breakpoints" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "Ir para próximo Breakpoint" +msgid "Go to Next Breakpoint" +msgstr "Ir para Próximo Breakpoint" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "Ir para Breakpoint anterior" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Converter em maiúsculas" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Converter em minúsculas" +msgid "Go to Previous Breakpoint" +msgstr "Ir para Breakpoint Anterior" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" -msgstr "Encontrar anterior" +msgstr "Localizar Anterior" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Filtrar Ficheiro..." +msgid "Find in Files..." +msgstr "Localizar em Ficheiros..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "Ir para linha..." +msgid "Go to Line..." +msgstr "Ir para Linha..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5834,40 +5766,35 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Este esqueleto não tem ossos, crie alguns nós Bone2D filhos." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Instância única" +msgstr "Esqueleto2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Criar Pose de Descanso (a partir de Ossos)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Pôr Ossos em Pose de Descanso" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Criar Mesh de navegação" +msgstr "Criar ossos fÃsicos" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Instância única" +msgstr "Esqueleto" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Criar solução C#" +msgstr "Criar esqueleto fÃsico" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Executar" +msgstr "Executar IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5895,7 +5822,7 @@ msgstr "Transformação no Eixo Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Ver transformação do plano." +msgstr "Ver Transformação do Plano." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -5918,6 +5845,14 @@ msgid "Animation Key Inserted." msgstr "Chave de Animação inserida." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Inclinação" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "Direção" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Objetos desenhados" @@ -6002,9 +5937,8 @@ msgid "This operation requires a single selected node." msgstr "Esta operação requer um único Nó selecionado." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Ver informação" +msgstr "Bloquear Rotação da Vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6048,12 +5982,11 @@ msgstr "Audição de áudio" #: editor/plugins/spatial_editor_plugin.cpp msgid "Doppler Enable" -msgstr "Efeito doppler" +msgstr "Doppler Ativo" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "A criar pré-visualizações de Mesh" +msgstr "Previsualização cinemática" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6084,6 +6017,10 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de velocidade Freelook" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "Rotação da Vista Bloqueada" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Diálogo XForm" @@ -6115,7 +6052,7 @@ msgstr "Modo escalar (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Coordenadas locais" +msgstr "Coordenadas Locais" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -6186,11 +6123,6 @@ msgid "Tool Scale" msgstr "Ferramenta escalar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Ajustar à grelha" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Alternar Freelook" @@ -6200,7 +6132,7 @@ msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Alinhar objetos ao chão" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6231,9 +6163,8 @@ msgid "4 Viewports" msgstr "4 vistas" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Ver ferramentas" +msgstr "Bugigangas" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6309,50 +6240,44 @@ msgid "Post" msgstr "Pós" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "A Mesh está vazia!" +msgstr "Sprite está vazia!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "ImpossÃvel converter sprite com frames de animação para malha." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Geometria inválida, não substituÃvel por malha." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Converter em %s" +msgstr "Converter para Malha 2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Criar Mesh contorno" +msgstr "Criar Malha 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Simplificação: " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "" +msgstr "Crescer (Pixeis): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Previsualização" +msgstr "Atualizar Previsualização" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Configuração" +msgstr "Configuração:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6456,12 +6381,11 @@ msgstr "Passo:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Sep.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" -msgstr "Região de textura" +msgstr "TextureRegion" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -6592,9 +6516,12 @@ msgid "Erase Selection" msgstr "Apagar seleção" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Nome inválido." +msgstr "Reparar Tiles inválidos" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Cortar Seleção" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6617,9 +6544,8 @@ msgid "Erase TileMap" msgstr "Apagar TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Encontrar tile" +msgstr "Localizar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6635,42 +6561,43 @@ msgstr "Espelho Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "Pintar tile" +msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Escolher tile" +msgstr "Escolher Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "Remover Selecção" +msgid "Copy Selection" +msgstr "Copiar Seleção" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Rodar 0 graus" +msgid "Rotate left" +msgstr "Rodar p/ esquerda" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Rodar 90 graus" +msgid "Rotate right" +msgstr "Rodar p/ direita" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Rodar 180 graus" +msgid "Flip horizontally" +msgstr "Inverter horizontalmente" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Rodar 270 graus" +msgid "Flip vertically" +msgstr "Inverter verticalmente" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" +msgstr "Limpar Transformação" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "Adicionar Nó da Ãrvore" +msgstr "Adicionar Textura(s) ao TIleSet" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Remover Entrada atual" +msgstr "Remover Textura atual do TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6686,19 +6613,19 @@ msgid "" "bindings." msgstr "" "Selecionar sub-tile para usar como Ãcone, também será usado em ligações " -"inválidas autotile." +"autotile inválidas." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Exibir nome dos tiles (segure tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Remover textura selecionada e TODOS OS TILES que a usam?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Não selecionou uma textura para remover." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6709,76 +6636,76 @@ msgid "Merge from scene?" msgstr "Fundir a partir da Cena?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +msgid "%s file(s) were not added because was already on the list." +msgstr "%s ficheiro(s) não foi/foram adicionado(s) por já estar(em) na lista." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Arrastar manipuladores para editar Rect.\n" +"Clique em outro Tile para o editar." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" "LMB: definir bit on.\n" -"RMB: definir bit off." +"RMB: definir bit off.\n" +"Clique em outro Tile para o editar." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Selecionar o sub-tile editado." +msgstr "" +"Selecionar o sub-tile editado.\n" +"Clique em outro Tile para o editar." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" "Selecionar sub-tile para usar como Ãcone, também será usado em ligações " -"inválidas autotile." +"inválidas autotile.\n" +"Clique em outro Tile para o editar." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Selecionar sub-tile para alterar a sua prioridade." +msgstr "" +"Selecionar sub-tile para alterar a sua prioridade.\n" +"Clique em outro Tile para o editar." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Esta operação não pode ser efetuada sem uma Cena." +msgstr "Esta propriedade não pode ser alterada." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Conjunto de tiles" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Vértices" +msgstr "Vértice" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" -msgstr "" +msgstr "Fragmento" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Direita" +msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "VIsualShader" #: editor/project_export.cpp msgid "Runnable" @@ -6798,6 +6725,14 @@ msgstr "" "Modelos de exportação para esta plataforma estão ausentes/corrompidos :" #: editor/project_export.cpp +msgid "Release" +msgstr "Libertar" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "A Exportar Tudo" + +#: editor/project_export.cpp msgid "Presets" msgstr "Predefinições" @@ -6806,6 +6741,10 @@ msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "Caminho da Exportação:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Recursos" @@ -6868,6 +6807,14 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "Modo Exportação?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "Exportar Tudo" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Não existem Modelos de exportação para esta plataforma:" @@ -6880,22 +6827,21 @@ msgid "The path does not exist." msgstr "O Caminho não existe." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "Escolha uma pasta que não contenha um Ficheiro 'project.godot'." +msgstr "" +"Ficheiro de projeto '.zip' inválido, não contém um ficheiro 'project.godot'." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Por favor escolha uma pasta vazia." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Escolha um Ficheiro 'project.godot'." +msgstr "Escolha um ficheiro 'project.godot' ou '.zip'." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "A pasta já contém um projeto Godot." #: editor/project_manager.cpp msgid "Imported Project" @@ -6986,9 +6932,8 @@ msgid "Project Path:" msgstr "Caminho do Projeto:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Caminho do Projeto:" +msgstr "Caminho de Instalação do Projeto:" #: editor/project_manager.cpp msgid "Browse" @@ -7109,13 +7054,12 @@ msgid "Mouse Button" msgstr "Botão do rato" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" "Nome de ação inválido. Não pode ser vazio nem conter '/', ':', '=', '\\' ou " -"'\"'." +"'\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7126,18 +7070,16 @@ msgid "Rename Input Action Event" msgstr "Renomear evento ação de entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Mudar o Nome da Animação:" +msgstr "Mudar a zona morta da Ação" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Adicionar evento ação de entrada" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Dispositivo" +msgstr "Todos os Dispositivos" #: editor/project_settings_editor.cpp msgid "Device" @@ -7184,24 +7126,20 @@ msgid "Wheel Down Button" msgstr "Botão roda para baixo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Botão roda para cima" +msgstr "Roda Botão Esquerdo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Botão direito" +msgstr "Roda Botão Direito" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Botão 6" +msgstr "X Botão 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Botão 6" +msgstr "X Botão 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7343,17 +7281,13 @@ msgstr "Definições do Projeto (project.godot)" msgid "General" msgstr "Geral" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Propriedade:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Sobrepor por..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "O editor deve ser reiniciado para que as alterações entrem em vigor" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7364,13 +7298,12 @@ msgid "Action:" msgstr "Ação:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "Ação:" +msgstr "Ação" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Zona morta" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7480,10 +7413,6 @@ msgstr "Escolha um Nó" msgid "Bit %d, val %d." msgstr "Bit %d, val %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Propriedades:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Selecionar Propriedade" @@ -7505,129 +7434,122 @@ msgid "Can't load back converted image using PVRTC tool:" msgstr "ImpossÃvel carregar imagem convertida com a ferramenta PVRTC:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Renomear" +msgstr "Renomear em massa" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Prefixo" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Sufixo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Opções de Ajuste" +msgstr "Opções Avançadas" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Substituto" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nome do Nó:" +msgstr "Nome do Nó" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nome do parente do Nó, se disponÃvel" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Encontrar tipo de Nó" +msgstr "Tipo de Nó" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Cena atual" +msgstr "Nome da cena atual" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Renomear" +msgstr "Nome do Nó raiz" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Contador sequencial de inteiros.\n" +"Comparar opções do contador." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Contador por nÃvel" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Se definido o contador reinicia para cada grupo de nós filhos" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Valor inicial do contador" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Passo:" +msgstr "Passo" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "Valor pelo qual cada contador é incrementado para cada nó" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Preenchimento" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Número mÃnimo de dÃgitos para o contador.\n" +"DÃgitos ausentes são preenchidos com zeros." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Mudar Expressão" +msgstr "Expressões Regulares" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "Pós-processamento" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "Manter" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase para under_scored" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_scored para CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Caixa" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Minúsculas" +msgstr "Para Minúsculas" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Maiúsculas" +msgstr "Para Maiúsculas" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Repor Zoom" +msgstr "Restaurar" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Erro" @@ -7637,7 +7559,7 @@ msgstr "Recolocar Nó" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "Recolocar localização (selecionar novo parente):" +msgstr "Recolocar localização (selecionar novo Parente):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" @@ -7688,6 +7610,10 @@ msgid "Instance Scene(s)" msgstr "Cena(s) da Instância" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Instanciar Cena filha" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Limpar Script" @@ -7697,11 +7623,11 @@ msgstr "Esta operação não pode ser feita na raiz da árvore." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "Mover Nó no parente" +msgstr "Mover Nó no Parente" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "Mover Nós no parente" +msgstr "Mover Nós no Parente" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" @@ -7724,6 +7650,14 @@ msgid "Save New Scene As..." msgstr "Guardar nova Cena como..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" +"Desativar \"editable_instance\" irá reverter todas as propriedades do Nó " +"para os seus valores padrão." + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Filhos editáveis" @@ -7732,34 +7666,28 @@ msgid "Load As Placeholder" msgstr "Carregar como marcador de posição" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "Local" +msgstr "Tornar Local" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Criar Nó" +msgstr "Criar Nó Raiz:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Cena" +msgstr "Cena 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Cena" +msgstr "Cena 3D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Limpar herança" +msgstr "Interface do Utilizador" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Cortar Nós" +msgstr "Nó Personalizado" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7802,6 +7730,10 @@ msgid "Clear Inheritance" msgstr "Limpar herança" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "Abrir documentação" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Apagar Nó(s)" @@ -7810,17 +7742,16 @@ msgid "Add Child Node" msgstr "Adicionar Nó filho" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Instanciar Cena filha" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Mudar tipo" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "Estender Script" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Faz sentido!" +msgstr "Tornar Nó Raiz" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7871,21 +7802,19 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Limpar herança? (Sem retrocesso!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" -msgstr "Alternar visibilidade" +msgstr "Alternar Visibilidade" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "Aviso de configuração do Nó:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"Nó tem conexões e grupo(s).\n" +"Nó tem conexões e grupos.\n" "Clique para mostrar doca dos sinais." #: editor/scene_tree_editor.cpp @@ -7905,27 +7834,24 @@ msgstr "" "Clique para mostrar doca dos grupos." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Abrir Script" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "Nó está bloqueado.\n" -"Clique para desbloquear" +"Clique para desbloquear." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "Filhos não são selecionáveis.\n" -"Clique para os tornar selecionáveis" +"Clique para os tornar selecionáveis." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7936,6 +7862,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer está fixado.\n" +"Clique para desafixar." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7974,15 +7902,18 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Abrir Editor de Scripts" +msgstr "Abrir Script/Escolher Localização" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Caminho está vazio" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Nome do ficheiro vazio" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Caminho não é local" @@ -8071,20 +8002,8 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Aviso" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Erro:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Fonte:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Função:" +msgid "Stack Trace" +msgstr "Rastreamento de Pilha" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8115,18 +8034,6 @@ msgid "Stack Frames" msgstr "Empilhar Frames" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Variável" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Erros:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "Stack Trace (se aplicável):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Profiler" @@ -8215,9 +8122,8 @@ msgid "Change Camera Size" msgstr "Mudar tamanho da câmara" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Mudar extensões de notificador" +msgstr "Mudar Notificador AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8244,38 +8150,32 @@ msgid "Change Capsule Shape Height" msgstr "Mudar altura da forma cápsula" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Mudar raio da forma cápsula" +msgstr "Mudar Raio da Forma Cilindro" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Mudar altura da forma cápsula" +msgstr "Mudar Altura da Forma Cilindro" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Mudar comprimento da forma raio" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Mudar raio da luz" +msgstr "Mudar Raio do Cilindro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Mudar altura da forma cápsula" +msgstr "Mudar Altura do CIlindro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Mudar raio da forma esfera" +msgstr "Mudar Raio Interno do Toro" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Mudar raio da luz" +msgstr "Mudar Raio Externo do Toro" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8396,9 +8296,8 @@ msgid "GridMap Delete Selection" msgstr "Apagar seleção GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "Apagar seleção GridMap" +msgstr "Seleção de Preenchimento de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8481,9 +8380,8 @@ msgid "Clear Selection" msgstr "Limpar Seleção" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Toda Selecção" +msgstr "Preencher Seleção" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8546,25 +8444,20 @@ msgid "Warnings" msgstr "Avisos" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "View log" -msgstr "Ver Ficheiros" +msgstr "Ver log" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fim do stack trace de exceção interna" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Cozinhar!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Cozinhar a Mesh de navegação." +msgid "Bake NavMesh" +msgstr "Consolidar NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "Limpar a Mesh de navegação." +msgstr "Limpar a Malha de navegação." #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -8604,11 +8497,11 @@ msgstr "A criar polymesh..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "A converter para Mesh de navegação nativa..." +msgstr "A converter para Malha de navegação nativa..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "Configuração do gerador da Mesh de navegação:" +msgstr "Configuração do gerador da Malha de navegação:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." @@ -8668,7 +8561,7 @@ msgstr "Mudar nome do argumento" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "Definir valor padrão da variável" +msgstr "Definir Valor Padrão da Variável" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Type" @@ -8787,14 +8680,12 @@ msgid "Connect Nodes" msgstr "Conectar Nós" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Conectar Nós" +msgstr "Conectar Dados de Nó" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Conectar Nós" +msgstr "Conectar Sequência de Nós" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8841,6 +8732,10 @@ msgid "Base Type:" msgstr "Tipo de Base:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Membros:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Nós DisponÃveis:" @@ -8862,7 +8757,7 @@ msgstr "Apagar Selecionados" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "Encontrar tipo de Nó" +msgstr "Localizar Tipo de Nó" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -8877,9 +8772,8 @@ msgid "Paste Nodes" msgstr "Colar Nós" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Membros" +msgstr "Editar Membros" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8903,7 +8797,7 @@ msgstr "Objeto de base não é um Nó!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "Caminho não aponta para nenhum Nó!" +msgstr "Caminho não aponta para Nó!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." @@ -8938,17 +8832,16 @@ msgstr "" "string (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Remover Nó VisualScript" +msgstr "Procurar VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Obter" +msgid "Get %s" +msgstr "Obter %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Definir %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8980,7 +8873,7 @@ msgstr "ImpossÃvel ler Ficheiro de imagem do ecrã de inicialização:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." -msgstr "A usar imagem de inicialização por defeito." +msgstr "A usar imagem padrão de inicialização." #: scene/2d/animated_sprite.cpp msgid "" @@ -9000,16 +8893,15 @@ msgstr "" "ignorado." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Este nó não tem formas filhos, não conseguindo assim interagir com o " -"espaço.\n" -"Considere adicionar nós filhos CollisionShape2D ou CollisionPolygon2D para " -"definir a sua forma." +"Este nó não tem forma, não conseguindo assim colidir ou interagir com outros " +"objetos.\n" +"Considere adicionar nós CollisionShape2D ou CollisionPolygon2D como filhos " +"para definir a sua forma." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -9043,6 +8935,14 @@ msgstr "" "Uma forma tem de ser fornecida para CollisionShape2D funcionar. Crie um " "recurso forma!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Animação CPUParticles2D requer o uso de um CanvasItemMaterial com " +"\"Particles Animation\" ativada." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9093,6 +8993,14 @@ msgstr "" "Não foi atribuÃdo um Material para processar as partÃculas, não possuindo um " "comportamento." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"Animação Particles2D requer o uso de um CanvasItemMaterial com \"Particles " +"Animation\" ativada." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9116,16 +9024,16 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Esta corrente de Bone2D deve terminar em um nó Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." -msgstr "" +msgstr "Um Bone2D só funciona com um nó parente Skeleton2D ou Bone2D." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." -msgstr "" +msgstr "Falta uma pose DESCANSO a este osso. Vá ao nó Skeleton2D e defina uma." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9192,15 +9100,14 @@ msgid "Lighting Meshes: " msgstr "A iluminar Meshes: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Este nó não tem formas filhos, não conseguindo assim interagir com o " -"espaço.\n" -"Considere adicionar nós filhos CollisionShape ou CollisionPolygon para " +"Este nó não tem forma, não conseguindo assim colidir ou interagir com outros " +"objetos.\n" +"Considere adicionar nós CollisionShape ou CollisionPolygon como filhos para " "definir a sua forma." #: scene/3d/collision_polygon.cpp @@ -9235,6 +9142,19 @@ msgstr "" "Uma forma tem de ser fornecida para CollisionShape funcionar. Crie um " "recurso forma!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nada é visÃvel porque nenhuma Malha foi atribuÃda." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"Animação CPUParticles requer o uso de um SpatialMaterial com \"Billboard " +"Particles\" ativada." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "A desenhar Meshes" @@ -9259,6 +9179,27 @@ msgid "" msgstr "" "Nada é visÃvel porque não foram atribuÃdas Meshes aos passos de desenho." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"Animação Particles requer o uso de um SpatialMaterial com \"Billboard " +"Particles\" ativada." + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow apenas funciona quando definido como filho de um Nó Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"OrientedPathFollow apenas funciona quando definido como filho de um Nó Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "OrientedPathFollow requer vetores cima ativados no Caminho do parente." + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9296,18 +9237,17 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Este corpo será ignorado até se definir uma Malha" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Mudanças no tamanho do RigidBody (em modos caráter ou rÃgido) serão " -"reescritas pelo motor de fÃsica na execução.\n" -"Mude antes o tamanho das formas de colisão filhas." +"Mudanças no tamanho do SoftBody serão reescritas pelo motor de fÃsica na " +"execução.\n" +"Em vez disso, mude o tamanho das formas de colisão filhas." #: scene/3d/sprite_3d.cpp msgid "" @@ -9327,44 +9267,41 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "No nó BlendTree '%s', animação não encontrada: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Ferramentas de Animação" +msgstr "Animação não encontrada: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "No nó '%s', animação inválida: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ERRO: Nome de Animação inválido!" +msgstr "Animação inválida: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Desligar '%s' de '%s'" +msgstr "Nada conectado à entrada '%s' do nó '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "Não foi definida um AnimationNode raiz para o gráfico." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Selecionar um AnimationPlayer da Scene Tree para editar Animações." +msgstr "" +"Caminho para um nó AnimationPlayer contendo animações não está definido." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"O caminho definido para AnimationPlayer não conduz a um nó AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Ãrvore de Animação inválida." +msgstr "A raiz de AnimationPlayer não é um nó válido." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9382,10 +9319,6 @@ msgstr "Alerta!" msgid "Please Confirm..." msgstr "Confirme por favor..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Selecionar esta pasta" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9396,6 +9329,10 @@ msgstr "" "das funções popup*(). Torná-las visÃveis para edição é aceitável, mas serão " "escondidas na execução." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "Se exp_edit é verdadeiro min_value tem de ser > 0." + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9415,7 +9352,7 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"Ambiente padrão especificado em Configuração do Projeto (Rendering -> " +"Ambiente Padrão especificado em Configuração do Projeto (Rendering -> " "Environment -> Default Environment) não pode ser carregado." #: scene/main/viewport.cpp @@ -9447,31 +9384,140 @@ msgid "Invalid font size." msgstr "Tamanho de letra inválido." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Adicionar entrada" +msgstr "Entrada" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Nenhum>" +msgstr "Nenhum" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Tamanho de letra inválido." +msgstr "Fonte inválida para Shader." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Atribuição a função." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Atribuição a uniforme." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Variações só podem ser atribuÃdas na função vértice." + +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Está seguro que quer remover todas as conexões de \"" + +#~ msgid "Class List:" +#~ msgstr "Lista de Classes:" + +#~ msgid "Search Classes" +#~ msgstr "Procurar Classes" + +#~ msgid "Public Methods" +#~ msgstr "Métodos Públicos" + +#~ msgid "Public Methods:" +#~ msgstr "Métodos Públicos:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Itens do tema GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Itens do tema GUI:" + +#~ msgid "Property: " +#~ msgstr "Propriedade: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Alternar a pasta de situação como Favorita." + +#~ msgid "Show current scene file." +#~ msgstr "Mostrar o ficheiro da cena atual." + +#~ msgid "Enter tree-view." +#~ msgstr "Ir para Vista de árvore." + +#~ msgid "Whole words" +#~ msgstr "Palavras completas" + +#~ msgid "Match case" +#~ msgstr "SensÃvel a maiúsculas/minúsculas" + +#~ msgid "Ok" +#~ msgstr "Ok" + +#~ msgid "Show In File System" +#~ msgstr "Mostrar no Sistema de Ficheiros" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Procurar na hierarquia de classe." + +#~ msgid "Search in files" +#~ msgstr "Procurar em ficheiros" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Scripts incorporados só podem ser editados quando a Cena a que pertencem " +#~ "é carregada" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Converter em maiúsculas" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Converter em minúsculas" + +#~ msgid "Snap To Floor" +#~ msgstr "Ajustar ao Fundo" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Rodar 0 graus" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Rodar 90 graus" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Rodar 180 graus" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Rodar 270 graus" + +#~ msgid "Warning" +#~ msgstr "Aviso" + +#~ msgid "Error:" +#~ msgstr "Erro:" + +#~ msgid "Source:" +#~ msgstr "Fonte:" + +#~ msgid "Function:" +#~ msgstr "Função:" + +#~ msgid "Variable" +#~ msgstr "Variável" + +#~ msgid "Errors:" +#~ msgstr "Erros:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "Stack Trace (se aplicável):" + +#~ msgid "Bake!" +#~ msgstr "Cozinhar!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Cozinhar a Malha de navegação." + +#~ msgid "Get" +#~ msgstr "Obter" #~ msgid "Change Scalar Constant" #~ msgstr "Mudar constante escalar" @@ -9549,16 +9595,16 @@ msgstr "" #~ msgstr "Desconectar Nós do gráfico" #~ msgid "Remove Shader Graph Node" -#~ msgstr "Remover Nó Shader" +#~ msgstr "Remover Nó Gráfico Shader" #~ msgid "Move Shader Graph Node" -#~ msgstr "Mover Nó Shader" +#~ msgstr "Mover Nó Gráfico Shader" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplicar Nó(s)" #~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Apagar Nó(s) Shader" +#~ msgstr "Apagar Nó(s) Gráfico(s) Shader" #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Erro: conexão cÃclica" @@ -9567,7 +9613,7 @@ msgstr "" #~ msgstr "Erro: Faltam conexões de entrada" #~ msgid "Add Shader Graph Node" -#~ msgstr "Adicionar Nó Shader" +#~ msgstr "Adicionar Nó Gráfico Shader" #~ msgid "Disabled" #~ msgstr "Desativado" @@ -9786,9 +9832,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "Sequência" -#~ msgid "Switch" -#~ msgstr "Trocar" - #~ msgid "Iterator" #~ msgstr "Iterador" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index f668c20d96..752c69bfab 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-08-05 00:52+0000\n" -"Last-Translator: Grigore Antoniuc <grisa181@gmail.com>\n" +"PO-Revision-Date: 2018-08-31 18:22+0000\n" +"Last-Translator: Nitroretro <nitroretro@protonmail.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 3.1.1\n" +"X-Generator: Weblate 3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +27,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -70,24 +70,20 @@ msgid "Balanced" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Eroare!" +msgstr "Reflectează" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Inserează Notă" +msgstr "Inserează Cheie Aici" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "DuplicaÈ›i SelecÈ›ia" +msgstr "DuplicaÈ›i Cheile Selectate" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "ÅžtergeÈ›i fiÅŸierele selectate?" +msgstr "ÅžtergeÈ›i Cheile Selectate" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -402,8 +398,7 @@ msgstr "ScalaÈ›i SelecÈ›ia" msgid "Scale From Cursor" msgstr "ScalaÈ›i De La Cursor" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "DuplicaÈ›i SelecÈ›ia" @@ -417,11 +412,13 @@ msgid "Delete Selection" msgstr "Centrează SelecÈ›ia" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "MergeÈ›i la Pasul Următor" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "MergeÈ›i la Pasul Anterior" #: editor/animation_track_editor.cpp @@ -524,11 +521,11 @@ msgstr "Nici o Potrivire" msgid "Replaced %d occurrence(s)." msgstr "ÃŽnlocuit %d potriviri." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "PotriveÈ™te Caz-ul" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Cuvinte Complete" @@ -562,10 +559,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom-aÈ›i ÃŽn" +msgid "Font Size:" +msgstr "Dimensiunea Conturului:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Linie:" @@ -598,6 +595,7 @@ msgstr "AdăugaÈ›i" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -679,7 +677,7 @@ msgstr "Eroare de Conexiune" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "EÈ™ti sigur că vrei să execuÈ›i acel proiect?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -734,17 +732,14 @@ msgstr "Recent:" msgid "Search:" msgstr "CautaÈ›i:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Potriviri:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Descriere:" @@ -805,9 +800,10 @@ msgid "Search Replacement Resource:" msgstr "CautaÈ›i ÃŽnlocuitor Resursă:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -840,7 +836,8 @@ msgid "Error loading:" msgstr "Eroare încărcând:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Scena nu a putut fi încărcata deoarece are dependenÈ›e în lipsa:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -899,14 +896,6 @@ msgstr "SchimbaÅ£i Valoarea DicÅ£ionar" msgid "Thanks from the Godot community!" msgstr "MulÈ›umesc din partea comunităţii Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Contribuabili Motor Godot" @@ -1082,8 +1071,7 @@ msgid "Bus options" msgstr "OpÈ›iuni Pistă Audio" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "DuplicaÈ›i" @@ -1255,8 +1243,9 @@ msgstr "Cale:" msgid "Node Name:" msgstr "Nume Nod:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Nume" @@ -1326,11 +1315,16 @@ msgid "Template file not found:" msgstr "FiÈ™ierul È™ablon nu a fost găsit:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "SelectaÅ£i directorul curent" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "FiÈ™ierul există, suprascrieÅ£i?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +#, fuzzy +msgid "Select This Folder" msgstr "SelectaÅ£i directorul curent" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1339,12 +1333,13 @@ msgstr "CopiaÅ£i Calea" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "ArătaÈ›i în Administratorul de FiÈ™iere" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "ArătaÈ›i în Administratorul de FiÈ™iere" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1380,7 +1375,8 @@ msgid "Open a File or Directory" msgstr "DeschideÈ›i un FiÅŸier sau Director" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "SalvaÈ›i" @@ -1438,8 +1434,7 @@ msgstr "Directoare È™i FiÅŸiere:" msgid "Preview:" msgstr "PrevizualizaÈ›i:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "FiÈ™ier:" @@ -1455,24 +1450,11 @@ msgstr "SurseScan" msgid "(Re)Importing Assets" msgstr "(Re)Importând Asset-uri" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "CăutaÈ›i în Ajutor" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Listă de Clase:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Căutare Clase" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Sus" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Clasă:" @@ -1489,28 +1471,31 @@ msgid "Brief Description:" msgstr "Descriere Scurtă:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Membri" +msgid "Properties" +msgstr "Proprietăți" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Membri:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Metode Publice" +msgid "Methods" +msgstr "Metode" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Metode Publice:" +#, fuzzy +msgid "Methods:" +msgstr "Metode" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Obiecte Tema InterfaÈ›a Grafică" +#, fuzzy +msgid "Theme Properties" +msgstr "Proprietăți" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Obiecte Tema InterfaÈ›a Grafică:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Proprietăți" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1537,10 +1522,16 @@ msgid "Constants:" msgstr "Constante:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Descriere" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Descriere:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Tutoriale Internet:" @@ -1555,11 +1546,13 @@ msgstr "" "$color] [url = $url2] cerere unul[/ URL] [/ color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Proprietăți" +#, fuzzy +msgid "Property Descriptions" +msgstr "Descriere Proprietate:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Descriere Proprietate:" #: editor/editor_help.cpp @@ -1572,11 +1565,13 @@ msgstr "" "color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metode" +#, fuzzy +msgid "Method Descriptions" +msgstr "Descrierea metodei:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Descrierea metodei:" #: editor/editor_help.cpp @@ -1587,12 +1582,61 @@ msgstr "" "Nu există în prezent nici o descriere pentru această metodă. Te rog ajută-ne " "de prin a [color = $color] [url = $url] contribui cu una [/ URL] [/ color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "CăutaÈ›i în Ajutor" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "ÃŽnlocuiÈ›i Tot" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Classes Only" +msgstr "Clase" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metode" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Semnale" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Constante" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Proprietăți" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "Proprietăți" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Membri" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Clasă:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1626,6 +1670,11 @@ msgstr "Exportul de proiect nu a reuÅŸit cu un cod de eroare %d." msgid "Error saving resource!" msgstr "Eroare la salvarea resursei!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "SalvaÈ›i Resursa Ca..." @@ -1680,12 +1729,22 @@ msgstr "Aceasta operaÈ›iune nu se poate face fără o rădăcină de copac." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Nu am putut salva scena. Probabil dependenÅ£e (instanÅ£e sau moÅŸteniri) nu au " "putut fi satisfăcute." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Imposibil de încărcat MeshLibrary pentru unire!" @@ -1943,6 +2002,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Nu a putut fi încărcat scriptul add-on din calea: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Nu a putut fi încărcat scriptul add-on din calea: '%s' Scriptul nu este în " +"modul unealtă." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1993,6 +2061,12 @@ msgstr "Șterge Schema" msgid "Default" msgstr "Implicit" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Sistemul De FiÈ™iere" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2076,7 +2150,8 @@ msgid "Save Scene" msgstr "Salvează Scena" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Salvează toate Scenele" #: editor/editor_node.cpp @@ -2105,7 +2180,7 @@ msgid "Undo" msgstr "Revenire" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Reîntoarcere" @@ -2143,6 +2218,7 @@ msgid "Quit to Project List" msgstr "ÃŽnchide spre Lista Proiectului" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Depanare" @@ -2271,10 +2347,6 @@ msgstr "Administrează Șabloanele de Export" msgid "Help" msgstr "Ajutor" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Clase" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2345,13 +2417,12 @@ msgstr "Rulează Scena Personalizată" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Schimbarea driver-ului video necesită restartarea editorului." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Salvează È™i ÃŽnchide" +msgstr "Salvează È™i Restartează" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2369,24 +2440,24 @@ msgstr "Modificări ale Actualizării" msgid "Disable Update Spinner" msgstr "Dezactivează Cercul de Actualizare" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Inspector" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importă" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nod" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Sistemul De FiÈ™iere" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Inspector" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Nod" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Extinde toate" @@ -2524,7 +2595,7 @@ msgstr "Cadru %" msgid "Physics Frame %" msgstr "Cadru Fizic %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Timp:" @@ -2548,7 +2619,7 @@ msgstr "Timp" msgid "Calls" msgstr "Apeluri" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2560,7 +2631,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2568,6 +2639,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2585,10 +2670,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2597,7 +2678,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2890,6 +2972,11 @@ msgstr "" "fiÈ™ierul tip cache!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favorite:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Nu se poate naviga către '%s' pentru că nu a fost găsit în sistemul de " @@ -2931,7 +3018,7 @@ msgstr "Eroare duplicând:" msgid "Unable to update dependencies:" msgstr "Imposibil de actualizat dependinÈ›ele:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Niciun nume furnizat" @@ -2968,22 +3055,6 @@ msgid "Duplicating folder:" msgstr "Duplicând directorul:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Extinde toate" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Restrânge toate" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "RedenumeÈ™te..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Mută ÃŽn..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Deschide Scena(ele)" @@ -2992,6 +3063,16 @@ msgid "Instance" msgstr "Instanță" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Favorite:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Elimină din Grup" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Editează DependinÈ›ele..." @@ -2999,11 +3080,19 @@ msgstr "Editează DependinÈ›ele..." msgid "View Owners..." msgstr "Vizualizează Proprietarii..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "RedenumeÈ™te..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "DuplicaÈ›i..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Mută ÃŽn..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Deschide un script rapid..." @@ -3013,6 +3102,16 @@ msgstr "Deschide un script rapid..." msgid "New Resource..." msgstr "SalvaÈ›i Resursa Ca..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Extinde toate" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Restrânge toate" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3034,27 +3133,19 @@ msgstr "Rescanează Sistemul de FiÈ™iere" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Marchează statutul directorului ca Favorit" +msgid "Toggle split mode" +msgstr "Modul de Comutare" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "Căutare Clase" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "InstanÈ›iază scena(ele) selectată ca un copil al nodului selectat." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Căutare Clase" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3062,7 +3153,7 @@ msgstr "" "Se Scanează FiÈ™ierele,\n" "Te Rog AÈ™teaptă..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Mută" @@ -3081,31 +3172,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d mai multe fiÈ™iere" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "GăsiÈ›i" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Cuvinte Complete" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "PotriveÈ™te Caz-ul" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "CreaÈ›i Director" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filtre..." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3123,6 +3205,11 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "GăsiÈ›i" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "ÃŽnlocuiÈ›i" @@ -3287,17 +3374,14 @@ msgstr "Reimportă" msgid "Failed to load resource." msgstr "ÃŽncărcarea resursei a eÈ™uat." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Bine" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Extinde toate proprietăţile" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Restrânge toate proprietăţile" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3548,6 +3632,11 @@ msgstr "" msgid "Snap" msgstr "Aliniere" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Amestec:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3927,10 +4016,6 @@ msgid "Amount:" msgstr "Cantitate:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Amestec:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Amestec 0:" @@ -4269,6 +4354,11 @@ msgstr "Editează ObiectulPânză" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Editează ObiectulPânză" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Editează ObiectulPânză" @@ -4334,6 +4424,11 @@ msgid "Rotate Mode" msgstr "Mod RotaÈ›ie" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Mod Redimensionare (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4433,6 +4528,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaurează abilitatea copiilor obiectului de a fi selectaÈ›i." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton (Unicat)" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Arată Oasele" @@ -4484,6 +4584,10 @@ msgid "Show Viewport" msgstr "Arată Fereastra de Lucru" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Centrează SelecÈ›ia" @@ -4924,9 +5028,9 @@ msgid "Create Navigation Polygon" msgstr "Creare Poligon de Navigare" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Generare AABB" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Generare Dreptunghi de Vizibilitate" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4956,6 +5060,11 @@ msgstr "Curăță Masca de Emisie" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Particule" @@ -5025,12 +5134,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Este necesar un material procesor de tip 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "Generare AABB" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" -msgstr "" +msgid "Generate AABB" +msgstr "Generare AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5374,22 +5483,22 @@ msgid "Paste Resource" msgstr "LipiÈ›i Resursa" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Deschidere în Editor" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Instanță :" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Deschidere în Editor" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5422,6 +5531,11 @@ msgstr "Eroare la salvarea TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Directorul nu a putut fi creat." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Directorul nu a putut fi creat." @@ -5523,12 +5637,9 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "Fila anterioară" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5598,18 +5709,15 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "" +#, fuzzy +msgid "Debug with External Editor" +msgstr "Deschide Editorul următor" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5645,19 +5753,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "CăutaÈ›i în Ajutor" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Căutare Clase" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5668,6 +5766,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "FaceÈ›i FuncÈ›ia" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5754,11 +5857,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5775,20 +5878,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "MergeÈ›i la Pasul Următor" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "MergeÈ›i la Pasul Anterior" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5796,16 +5893,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrează fiÈ™ierele..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "FaceÈ›i FuncÈ›ia" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "DuceÈ›i-vă la Linie" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5900,6 +5999,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6066,6 +6173,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Curăță RotaÈ›ia Cursorului" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6165,11 +6277,6 @@ msgid "Tool Scale" msgstr "Unealtă Dimensiune" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Snap pe grilă" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6572,6 +6679,11 @@ msgid "Fix Invalid Tiles" msgstr "Nume nevalid." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Centrează SelecÈ›ia" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6618,25 +6730,32 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "ElminaÈ›i SelecÈ›ia" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "Mod RotaÈ›ie" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "" +#, fuzzy +msgid "Rotate right" +msgstr "RotaÈ›ie poligon" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Anim Schimbare transformare" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6664,7 +6783,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6680,7 +6799,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6757,6 +6876,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportare" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6765,6 +6893,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Exportă Proiectul" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6823,6 +6956,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Exportă Proiectul" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exportare" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7280,10 +7423,6 @@ msgstr "" msgid "General" msgstr "General" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7417,10 +7556,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7511,7 +7646,7 @@ msgid "Step" msgstr "Pas (s):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7520,7 +7655,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7561,7 +7696,7 @@ msgstr "" msgid "Reset" msgstr "ResetaÈ›i Zoom-area" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7620,6 +7755,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Curăță Scriptul" @@ -7656,6 +7795,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7732,6 +7877,11 @@ msgid "Clear Inheritance" msgstr "Curăță Derivarea" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Deschide Recente" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7740,12 +7890,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Execută Scriptul" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7898,6 +8049,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Mesh-ul este gol!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7986,19 +8142,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8030,18 +8174,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8463,12 +8595,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Coacere!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Procesează mesh-ul de navigare." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8739,6 +8867,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Membri:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8839,11 +8971,11 @@ msgid "Search VisualScript" msgstr "Curăță Scriptul" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8921,6 +9053,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8959,6 +9097,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9076,6 +9220,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9095,6 +9249,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9127,7 +9299,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9201,10 +9373,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9212,6 +9380,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9278,6 +9450,61 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom-aÈ›i ÃŽn" + +#~ msgid "Class List:" +#~ msgstr "Listă de Clase:" + +#~ msgid "Search Classes" +#~ msgstr "Căutare Clase" + +#~ msgid "Public Methods" +#~ msgstr "Metode Publice" + +#~ msgid "Public Methods:" +#~ msgstr "Metode Publice:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Obiecte Tema InterfaÈ›a Grafică" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Obiecte Tema InterfaÈ›a Grafică:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Proprietăți" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Marchează statutul directorului ca Favorit" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Cuvinte Complete" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "PotriveÈ™te Caz-ul" + +#~ msgid "Ok" +#~ msgstr "Bine" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Căutare Clase" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Snap pe grilă" + +#~ msgid "Bake!" +#~ msgstr "Coacere!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Procesează mesh-ul de navigare." + #~ msgid "Modify Color Ramp" #~ msgstr "Modifică Rampa de Culori" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 117fff72c3..b7d0bf0a21 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -21,12 +21,20 @@ # Игорь Д <protorian.di@gmail.com>, 2018. # Егор Бураков <fend.q@mail.ru>, 2018. # Grigore Antoniuc <grisa181@gmail.com>, 2018. +# Neo6666666 <Neo6666666@gmail.com>, 2018. +# Roman <Steel_hawk@list.ru>, 2018. +# Егор Ð Ñбуха (REgorion) <ryrgor@gmail.com>, 2018. +# Yan <uvokinuvokines@gmail.com>, 2018. +# V. <Unit68189@gmail.com>, 2018. +# Victor Butorin <mrwebsterchannel@gmail.com>, 2018. +# ÐлекÑандр <ol-vin@mail.ru>, 2018. +# Ðнатолий Горбунов <afgorbunov@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-08-06 07:41+0000\n" -"Last-Translator: Aleksey Terentyev <terentjew.alexey@ya.ru>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Ðнатолий Горбунов <afgorbunov@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -35,7 +43,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.1.1\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -43,41 +51,39 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Ðеверный тип аргумента Ð´Ð»Ñ convert(), иÑпользуйте TYPE_* конÑтанты." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Ðе хватает байтов Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð¹Ñ‚Ð¾Ð², или неверный формат." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ðеправильный ввод %i (не проходит) в выражении" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" +"self не может быть иÑпользован, потому что ÑкземплÑÑ€ равен null (не прошел)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Ðеправильный Ð¸Ð½Ð´ÐµÐºÑ ÑвойÑтва имени '%s' в узле %s." +msgstr "ÐедопуÑтимые операнды Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° %s, %s и %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Ðеправильный Ð¸Ð½Ð´ÐµÐºÑ ÑвойÑтва имени '%s' в узле %s." +msgstr "ÐедопуÑтимый Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð¸Ð¿Ð° %s Ð´Ð»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ типа %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "ÐедопуÑтимый именованный Ð¸Ð½Ð´ÐµÐºÑ '%s' Ð´Ð»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ типа %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": ÐедопуÑтимый аргумент типа: " +msgstr "ÐедопуÑтимые аргументы Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Ðа вызове '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -86,27 +92,23 @@ msgstr "ОÑвободить" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "СбаланÑированно" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Зеркально по X" +msgstr "Отобразить зеркально" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Ð’Ñтавить ключ" +msgstr "Ð’Ñтавить ключ здеÑÑŒ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Дублировать выделенное" +msgstr "Дублировать выделенные ключ(и)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Удалить выделенное" +msgstr "Удалить выделенные ключ(и)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -137,46 +139,40 @@ msgid "Anim Change Call" msgstr "Изменить вызов анимации" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "Параметр:" +msgstr "Трек Параметра" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Тип преобразованиÑ" +msgstr "Трек 3D ПреобразованиÑ" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Трек Вызова Метода" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Трек Кривой Безье" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Трек Ðудио Дорожки" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "ОÑтановить воÑпроизведение анимации. (S)" +msgstr "Трек ВоÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ðнимации" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Добавить новую дорожку" +msgstr "Добавить новый Трек" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "Длина анимации (в Ñекундах)." +msgstr "ПродолжительноÑть анимации (в Ñекундах)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "МаÑштаб анимации." +msgstr "Зацикливание анимации" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -184,42 +180,37 @@ msgid "Functions:" msgstr "Функции:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "ПроÑлушиватель звука" +msgstr "Ðудио Дорожки:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "Дорожки" +msgstr "Дорожки Ðнимации:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Переключить режим без отвлечениÑ." +msgstr "Переключить Ñтот трек вкл/выкл." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Режим ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ (Как Ñто ÑвойÑтво уÑтанавливаетÑÑ)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Animation узел" +msgstr "Режим Перехода" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" msgstr "" +"Режим Обработки Ð—Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ (Переход заканчиваетÑÑ Ñ Ð½Ð°Ñ‡Ð°Ð»Ð¾Ð¼ нового цикла)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Удалить выделенную дорожку." +msgstr "Удалить Ñтот трек." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Ð’Ñ€ÐµÐ¼Ñ X-Fade (Ñек.):" +msgstr "Ð’Ñ€ÐµÐ¼Ñ (Ñек.): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -234,13 +225,12 @@ msgid "Trigger" msgstr "Триггер" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "ОÑобенноÑти" +msgstr "Захват" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Ближайшие" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -249,16 +239,15 @@ msgstr "Линейный" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "КубичеÑкаÑ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Изменена интерполÑÑ†Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸" +msgstr "Обрезание Перехода ЗацикливаниÑ" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Обработка Перехода ЗацикливаниÑ" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -266,14 +255,12 @@ msgid "Insert Key" msgstr "Ð’Ñтавить ключ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Дублировать узел(узлы)" +msgstr "Дублировать ключ(ключи)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Удалить узел(узлы)" +msgstr "Удалить ключ(ключи)" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -303,7 +290,7 @@ msgstr "Ð’Ñтавить" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer не может анимировать Ñам ÑебÑ, только других." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -319,7 +306,7 @@ msgstr "Ð’Ñтавить ключ" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Трек транÑформации применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к оÑнованным на Spatial узлам." #: editor/animation_track_editor.cpp msgid "" @@ -328,44 +315,46 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Aудио треки могут указывать только на узлы типа:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Треки Ðнимации могут указывать только на узлы типа AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "Проигрыватель анимации не может анимировать Ñам ÑебÑ, только других." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ новый трек без корневого узла" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Путь трека некорректен, потому Ð½ÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ ключ." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Трек не имеет тип Spatial, Ð½ÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ ключ" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Путь трека некорректен, потому Ð½ÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ ключ метода." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet не найден в Ñкрипте: " +msgstr "Ð’ объекте нет такого метода: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "ПеремеÑтить ключи" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Буфер обмена пуÑÑ‚!" +msgstr "Буфер обмена пуÑÑ‚" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -375,24 +364,24 @@ msgstr "МаÑштабировать ключи" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Ðта Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ðµ работает Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑ€Ð¸Ð²Ñ‹Ð¼Ð¸ Безье, так как Ñто только " +"один трек." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Показывать треки только выделенных в дереве узлов." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Группировать треки по узлам или показывать их как проÑтой ÑпиÑок." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "ПривÑзка (пикÑели):" +msgstr "ПривÑзка (Ñек): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Дерево анимации дейÑтвительно." +msgstr "Значение шага анимации." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -401,22 +390,19 @@ msgstr "Дерево анимации дейÑтвительно." #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "Перемена" +msgstr "Редактировать" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Дерево анимации" +msgstr "СвойÑтва анимации." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Копировать параметры" +msgstr "Копировать Треки" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Ð’Ñтавить параметры" +msgstr "Ð’Ñтавить Треки" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -426,8 +412,7 @@ msgstr "МаÑштабировать выбранное" msgid "Scale From Cursor" msgstr "МаÑштабировать от курÑора" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Дублировать выделенное" @@ -436,16 +421,15 @@ msgid "Duplicate Transposed" msgstr "Дублировать и перемеÑтить" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" msgstr "Удалить выделенное" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "Перейти к Ñледующему шагу" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "Перейти к предыдущему шагу" #: editor/animation_track_editor.cpp @@ -458,11 +442,11 @@ msgstr "ПодчиÑтить анимацию" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Выберите узел, который будет анимирован:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "ИÑпользовать кривые Безье" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -510,7 +494,7 @@ msgstr "КоÑффициент маÑштабированиÑ:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Выбрать треки Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -548,11 +532,11 @@ msgstr "Ðет Ñовпадений" msgid "Replaced %d occurrence(s)." msgstr "Заменено %d Ñовпадений." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Учитывать региÑтр" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Целые Ñлова" @@ -581,16 +565,15 @@ msgid "Reset Zoom" msgstr "СброÑить приближение" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "ПредупреждениÑ" +msgstr "ПредупреждениÑ:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "МаÑштаб (%):" +msgid "Font Size:" +msgstr "ИÑходный размер шрифта:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Строка:" @@ -623,6 +606,7 @@ msgstr "Добавить" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -679,9 +663,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Отключить '%s' от '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Отключить '%s' от '%s'" +msgstr "Отключить вÑе от Ñигнала: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -693,19 +676,16 @@ msgid "Disconnect" msgstr "ОтÑоединить" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "Подключение Ñигнала:" +msgstr "Подключить Ñигнал: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Редактировать ÑвÑзи" +msgstr "Редактировать Подключение: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Ð’Ñ‹ уверены, что хотите запуÑтить более одного проекта?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Ð’Ñ‹ уверены, что хотите удалить вÑе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· Ñигнала \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -713,22 +693,19 @@ msgstr "Сигналы" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Ð’Ñ‹ уверены, что хотите удалить вÑе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ Ñигнала?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "ОтÑоединить" +msgstr "ОтÑоединить вÑе" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Перемена" +msgstr "Редактирование..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Методы" +msgstr "Перейти к Методу" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -759,17 +736,14 @@ msgstr "Ðедавнее:" msgid "Search:" msgstr "ПоиÑк:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "СовпадениÑ:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "ОпиÑание:" @@ -830,9 +804,10 @@ msgid "Search Replacement Resource:" msgstr "Ðайти заменÑемый реÑурÑ:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -864,7 +839,7 @@ msgid "Error loading:" msgstr "Ошибка при загрузке:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "Ðе удалоÑÑŒ загрузить Ñцену из-за отÑутÑÑ‚Ð²Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -923,14 +898,6 @@ msgstr "Изменить значение ÑловарÑ" msgid "Thanks from the Godot community!" msgstr "СпаÑибо от ÑообщеÑтва Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Ок" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Ðвторы Движка Godot" @@ -1106,8 +1073,7 @@ msgid "Bus options" msgstr "Параметры шины" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Дублировать" @@ -1280,8 +1246,9 @@ msgstr "Путь:" msgid "Node Name:" msgstr "Ð˜Ð¼Ñ Ð£Ð·Ð»Ð°:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "ИмÑ" @@ -1351,25 +1318,28 @@ msgid "Template file not found:" msgstr "Файл шаблона не найден:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Выбрать текущую папку" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Файл ÑущеÑтвует, перезапиÑать?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Выбрать текущую папку" +msgid "Select This Folder" +msgstr "Выбрать Ñту папку" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Копировать путь" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "ПроÑмотреть в проводнике" +msgid "Open in File Manager" +msgstr "Открыть в проводнике" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "ПроÑмотреть в проводнике" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1405,7 +1375,8 @@ msgid "Open a File or Directory" msgstr "Открыть каталог или файл" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Сохранить" @@ -1463,8 +1434,7 @@ msgstr "Каталоги и файлы:" msgid "Preview:" msgstr "ПредпроÑмотр:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Файл:" @@ -1480,24 +1450,11 @@ msgstr "Сканировать иÑходники" msgid "(Re)Importing Assets" msgstr "(Ре)Импортировать" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Помощь" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "СпиÑок клаÑÑов:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "ПоиÑк клаÑÑов" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Верх" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "КлаÑÑ:" @@ -1514,28 +1471,28 @@ msgid "Brief Description:" msgstr "Краткое опиÑание:" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "СвойÑтва" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "СвойÑтва:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Публичные методы" +msgid "Methods" +msgstr "Методы" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "СпиÑок методов:" +msgid "Methods:" +msgstr "Методы:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Тема Ñлементов GUI" +msgid "Theme Properties" +msgstr "СвойÑтва темы" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Тема Ñлементов GUI:" +msgid "Theme Properties:" +msgstr "СвойÑтва темы:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1562,8 +1519,12 @@ msgid "Constants:" msgstr "КонÑтанты:" #: editor/editor_help.cpp -msgid "Description" -msgstr "ОпиÑание" +msgid "Class Description" +msgstr "ОпиÑание клаÑÑа" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "ОпиÑание клаÑÑа:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1580,11 +1541,11 @@ msgstr "" "$url2]запроÑить[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "СвойÑтва" +msgid "Property Descriptions" +msgstr "ОпиÑание ÑвойÑтв:" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "ОпиÑание ÑвойÑтв:" #: editor/editor_help.cpp @@ -1596,11 +1557,11 @@ msgstr "" "$color][url=$url]помогите нам[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Методы" +msgid "Method Descriptions" +msgstr "ОпиÑание методов" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "ОпиÑание методов:" #: editor/editor_help.cpp @@ -1611,18 +1572,58 @@ msgstr "" "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвует опиÑание Ñтого метода. ПожалуйÑта [color=" "$color][url=$url]помогите нам[/url][/color]!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Помощь" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Отображать вÑÑ‘" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Только клаÑÑÑ‹" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Только методы" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Только Ñигналы" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Только конÑтанты" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Только ÑвойÑтва" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Только ÑвойÑтва темы" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Тип члена" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "КлаÑÑ" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Параметр:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Задать" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "УÑтановить МножеÑтво:" #: editor/editor_log.cpp msgid "Output:" @@ -1650,6 +1651,11 @@ msgstr "ÐкÑпорт проекта не удалÑÑ, код %d." msgid "Error saving resource!" msgstr "Ошибка при Ñохранении реÑурÑа!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Ок" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Сохранить реÑÑƒÑ€Ñ ÐºÐ°Ðº..." @@ -1668,7 +1674,7 @@ msgstr "Ошибка при Ñохранении." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "Ðе возможно открыть '%s'. Возможно файл перемещен или удален." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1704,12 +1710,22 @@ msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена бе #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Ðе возможно Ñохранить Ñцену. ВероÑтно, завиÑимоÑти (ÑкземплÑры или " "унаÑледованные) не могли быть удовлетворены." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Ðевозможно перезапиÑать Ñцену, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñе еще открыта!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Ðевозможно загрузить библиотеку полиÑеток Ð´Ð»Ñ ÑлиÑниÑ!" @@ -1964,6 +1980,14 @@ msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточниР#: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Ðевозможно загрузить Ñкрипт аддона из иÑточника: \"% s\". Ð’ коде еÑть " +"ошибка. ПожалуйÑта, проверьте ÑинтакÑиÑ." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '%s' базовый тип не EditorPlugin." @@ -2013,15 +2037,19 @@ msgstr "Удалить макет" msgid "Default" msgstr "По умолчанию" -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp #, fuzzy +msgid "Show in FileSystem" +msgstr "Показать в файловой ÑиÑтеме" + +#: editor/editor_node.cpp msgid "Play This Scene" msgstr "ЗапуÑтить Ñцену" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Закрыть другие вкладки" +msgstr "Закрыть вкладку" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2096,7 +2124,7 @@ msgid "Save Scene" msgstr "Сохранить Ñцену" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Сохранить вÑе Ñцены" #: editor/editor_node.cpp @@ -2125,7 +2153,7 @@ msgid "Undo" msgstr "Отменить" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Повторить" @@ -2154,15 +2182,15 @@ msgid "Tools" msgstr "ИнÑтрументы" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Открыть менеджер проектов?" +msgstr "Открыть папку Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ проекта" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Выйти в ÑпиÑок проектов" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Отладка" @@ -2270,18 +2298,16 @@ msgid "Toggle Fullscreen" msgstr "Переключить полноÑкранный режим" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "ÐаÑтройки редактора" +msgstr "Открыть папку Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Редактора" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Открыть директорию Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ редактора" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "ÐаÑтройки редактора" +msgstr "Открыть папку наÑтроек Редктора" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2291,10 +2317,6 @@ msgstr "Управление шаблонами ÑкÑпорта" msgid "Help" msgstr "Справка" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "КлаÑÑÑ‹" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2305,7 +2327,7 @@ msgstr "ПоиÑк" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Online Docs" -msgstr "Онлайн Документы" +msgstr "Онлайн ДокументациÑ" #: editor/editor_node.cpp msgid "Q&A" @@ -2365,13 +2387,12 @@ msgstr "ЗапуÑтить произвольную Ñцену" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Ð”Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ð° необходим перезапуÑк редактора." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Сохранить и переимпортировать" +msgstr "Сохранить и перезапуÑтить" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2389,27 +2410,26 @@ msgstr "ОбновлÑть при изменениÑÑ…" msgid "Disable Update Spinner" msgstr "Отключить Ñчётчик обновлений" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "ИнÑпектор" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Импорт" #: editor/editor_node.cpp -msgid "Node" -msgstr "Узел" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "ИнÑпектор" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Узел" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Развернуть вÑе" +msgstr "Развернуть нижнюю панель" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2488,9 +2508,8 @@ msgid "Thumbnail..." msgstr "Миниатюра..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Редактировать полигон" +msgstr "Редактировать дополнение" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2514,15 +2533,13 @@ msgid "Status:" msgstr "СтатуÑ:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Перемена" +msgstr "Редактировать:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "ЗапуÑк!" +msgstr "ЗапуÑтить" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2544,7 +2561,7 @@ msgstr "Кадр %" msgid "Physics Frame %" msgstr "Кадр физики %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "ВремÑ:" @@ -2568,27 +2585,45 @@ msgstr "ВремÑ" msgid "Calls" msgstr "Вызовы" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Вкл" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Слой" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Бит %d, значение %d." +msgstr "Бит %d, значение %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[ПуÑто]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Ðазначить" +msgstr "Ðазначить.." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Ðевозможно Ñоздать ViewportTexture Ð´Ð»Ñ Ñ€ÐµÑурÑов, Ñохраненных в виде файла.\n" +"РеÑÑƒÑ€Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ принадлежать Ñцене." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"Ðевозможно Ñоздать ViewportTexture Ð´Ð»Ñ Ñтого реÑурÑа, потому что он не " +"уÑтановлен как локальный Ð´Ð»Ñ Ñцены.\n" +"Включите ÑвойÑтво «Локально Ð´Ð»Ñ Ñцены» (и вÑе реÑурÑÑ‹, Ñодержащие его вверх " +"от узла)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2607,10 +2642,6 @@ msgstr "Ðовый %s" msgid "Make Unique" msgstr "Сделать уникальным" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Показать в файловой ÑиÑтеме" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2619,7 +2650,8 @@ msgstr "Показать в файловой ÑиÑтеме" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Ð’Ñтавить" @@ -2632,36 +2664,32 @@ msgstr "Преобразовать в %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Открыть в редакторе" +msgstr "Открыть редактор" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Выбранный узел не Viewport!" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "Размер Ñчейки:" +msgstr "Размер: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Страница: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Ðовое имÑ:" +msgstr "Ðовый ключ:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Ðовое имÑ:" +msgstr "Ðовое значение:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "добавить пару Ключ/Значение" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2754,9 +2782,8 @@ msgid "Can't open export templates zip." msgstr "Ðе удаётÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ архив шаблонов ÑкÑпорта." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Ðеверный формат version.txt файла внутри шаблонов." +msgstr "Ðеверный формат version.txt у шаблона. %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2821,6 +2848,7 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Ошибка уÑтановки шаблона. Ðрхив Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð½Ñ‹Ð¼ шаблоном можно найти в '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2901,9 +2929,8 @@ msgid "Download Templates" msgstr "Загрузить Шаблоны" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Выберите зеркало из ÑпиÑка " +msgstr "Выберите зеркало из ÑпиÑка: (Shift+Click: Открыть в Браузере)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2912,19 +2939,21 @@ msgstr "" "типов файлов!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Избранное" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Ðе удаетÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ к '%s', так как он не был найден в файловой ÑиÑтеме!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "ПроÑмотр Ñлементов в виде миниатюр" +msgstr "ПроÑмотр Ñлементов в виде миниатюр." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "ПроÑмотр Ñлементов в виде ÑпиÑка" +msgstr "ПроÑмотр Ñлементов в виде ÑпиÑка." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2952,7 +2981,7 @@ msgstr "Ошибка дублированиÑ:" msgid "Unable to update dependencies:" msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ завиÑимоÑти:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Ðе указано имÑ" @@ -2989,22 +3018,6 @@ msgid "Duplicating folder:" msgstr "Дублирование папки:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Развернуть вÑе" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Свернуть вÑе" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Переименовать..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "ПеремеÑтить в..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Открыть Ñцену(ны)" @@ -3013,6 +3026,14 @@ msgid "Instance" msgstr "Добавить ÑкземплÑÑ€" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Добавить в избранное" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Удалить из избранного" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Редактировать завиÑимоÑти..." @@ -3020,19 +3041,34 @@ msgstr "Редактировать завиÑимоÑти..." msgid "View Owners..." msgstr "ПроÑмотреть владельцев..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Переименовать..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Дублировать..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "ПеремеÑтить в..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Ðовый Ñкрипт" +msgstr "Ðовый Ñкрипт." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Сохранить реÑÑƒÑ€Ñ ÐºÐ°Ðº..." +msgstr "Ðовый реÑурÑ..." + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Развернуть вÑе" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Свернуть вÑе" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3054,29 +3090,18 @@ msgid "Re-Scan Filesystem" msgstr "ПереÑканировать файловую ÑиÑтему" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Переключить ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð°Ð¿ÐºÐ¸ как избранной" +msgid "Toggle split mode" +msgstr "Переключить режим разделениÑ" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Выберите текущий редактированный вложенный тайл." +msgid "Search files" +msgstr "ПоиÑк файлов" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Добавить выбранную Ñцену(Ñ‹), в качеÑтве потомка выбранного узла." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "ПоиÑк клаÑÑов" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3084,51 +3109,39 @@ msgstr "" "Сканирование файлов,\n" "пожалуйÑта, подождите..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "ПеремеÑтить" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "По Ñтому пути уже ÑущеÑтвует папка Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем." +msgstr "По Ñтому пути уже ÑущеÑтвует файл или папка Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "ПерезапиÑать" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "Создать Ñкрипт" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Ðайти тайл" +msgid "Find in Files" +msgstr "Ðайти в файлах" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " -msgstr "Ðайти" +msgid "Find:" +msgstr "Ðайти:" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Целые Ñлова" +msgid "Folder:" +msgstr "Папка:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Учитывать региÑтр" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Фильтр:" +msgid "Filters:" +msgstr "Фильтры:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3144,52 +3157,48 @@ msgid "Cancel" msgstr "Отмена" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Ðайти: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Заменить" +msgstr "Заменить: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Заменить вÑÑ‘" +msgstr "Заменить вÑÑ‘ (без возможноÑти отмены)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Сохранение..." +msgstr "ПоиÑк..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "ИÑкать текÑÑ‚" +msgstr "ПоиÑк завершен" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ОШИБКÐ: Такое название анимации уже ÑущеÑтвует!" +msgstr "Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ уже ÑущеÑтвует." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "ÐедопуÑтимое имÑ." +msgstr "недопуÑтимое Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Группы" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Группа(Ñ‹) нода" +msgstr "Узлы не в Группе" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð²" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Группа(Ñ‹) нода" +msgstr "Узлы в Группе" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3200,9 +3209,8 @@ msgid "Remove from Group" msgstr "Удалить из группы" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Группы изображений" +msgstr "Управление Группами" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3309,17 +3317,12 @@ msgstr "Переимпортировать" msgid "Failed to load resource." msgstr "Ðе удалоÑÑŒ загрузить реÑурÑ." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ок" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "Развернуть вÑе ÑвойÑтва" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "Свернуть вÑе ÑвойÑтва" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3336,9 +3339,8 @@ msgid "Paste Params" msgstr "Ð’Ñтавить параметры" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Ðет реÑурÑа в буфере обмена!" +msgstr "Редактировать реÑÑƒÑ€Ñ Ð² буфере обмена" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3381,9 +3383,8 @@ msgid "Object properties." msgstr "СвойÑтва объекта." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð²" +msgstr "СвойÑтва фильтра" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3398,37 +3399,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Выберите узел Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñигналов и групп." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Редактировать полигон" +msgstr "Редактировать плагин" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Создать C# решение" +msgstr "Создать Дополнение" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "СпиÑок плагинов:" +msgstr "Ð˜Ð¼Ñ Ð”Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Подпапка:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Язык" +msgstr "Язык:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Скрипт корректен" +msgstr "Ð˜Ð¼Ñ Ð¡ÐºÑ€Ð¸Ð¿Ñ‚Ð°:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "Ðктивировать ÑейчаÑ?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3487,15 +3483,15 @@ msgstr "Добавить анимацию" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Загрузить" +msgstr "Загрузить.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Ðтот тип узла не может быть иÑпользован. Разрешены только корневые узлы." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3505,67 +3501,64 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree неактивен.\n" +"Ðктивируйте, чтобы включить воÑпроизведение, проверьте Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÑƒÐ·Ð»Ð°, " +"еÑли Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°ÑÑŒ неудачей." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "УÑтановить меÑто ÑÐ¼ÐµÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ Ð² проÑтранÑтве" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Выбирайте, перемещайте и Ñоздавайте точки Ñ ÐŸÐšÐœ." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Удалить точку" +msgstr "Создать точки." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "ПКМ: Удалить точку." +msgstr "Удалить точки." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "Передвинуть точку" +msgstr "Точка" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Animation узел" +msgstr "Открыть Узел Ðнимации" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "ДейÑтвие '%s' уже ÑущеÑтвует!" +msgstr "Треугольник уже ÑущеÑтвует" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D не принадлежит Узлу AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Ðевозможно Ñмешивать, поÑкольку отÑутÑтвуют треугольники." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Создать треугольник Ñоединением точек." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "ПарÑинг %d треугольников:" +msgstr "Удалить точки и треугольники." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Создать ÑмеÑÑŒ треугольники автоматичеÑки (а не вручную)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3573,6 +3566,11 @@ msgstr "" msgid "Snap" msgstr "ПривÑзка" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Смешивание:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3580,20 +3578,21 @@ msgstr "Редактировать фильтры" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Узел вывода не может быть добавлен в дерево ÑмешиваниÑ." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Ðевозможно подключитьÑÑ, возможно порт уже иÑпользуетÑÑ Ð¸Ð»Ð¸ недейÑтвительный." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "" +msgstr "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ° не задана, Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð¹Ñ‚Ð¸ отÑлеживаемые имена." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "" +msgstr "Путь игрока недейÑтвителен, Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð¹Ñ‚Ð¸ отÑлеживаемые имена." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3601,23 +3600,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ° не имеет дейÑтвующего пути корневого узла, поÑтому не " +"удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ отÑлеживаемые имена." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Добавить узел" +msgstr "Добавить Узел.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Редактировать фильтры" +msgstr "Редактировать фильтры:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Редактируемые потомки" +msgstr "Включить фильтр" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3645,14 +3643,12 @@ msgid "Remove Animation" msgstr "Удалить анимацию" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ОШИБКÐ: ÐедопуÑтимое название анимации!" +msgstr "ÐедопуÑтимое название анимации!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ОШИБКÐ: Такое название анимации уже ÑущеÑтвует!" +msgstr "Такое название анимации уже ÑущеÑтвует!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3676,14 +3672,12 @@ msgid "Duplicate Animation" msgstr "Дублировать анимацию" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ОШИБКÐ: Ðет анимации Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!" +msgstr "Ðет анимации Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ОШИБКÐ: Ðет анимации в буфере обмена!" +msgstr "Ðет реÑурÑа анимации в буфере обмена!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3694,9 +3688,8 @@ msgid "Paste Animation" msgstr "Ð’Ñтавить анимацию" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ОШИБКÐ: Ðет анимации Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!" +msgstr "Ðет анимации Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3743,14 +3736,12 @@ msgid "New" msgstr "Ðовый" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Изменить ÑвÑзи..." +msgstr "Редактировать переходы..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Открыть в редакторе" +msgstr "Открыть в ИнÑпекторе" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3809,9 +3800,8 @@ msgid "Include Gizmos (3D)" msgstr "Включать 3D гизмо" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Ð’Ñтавить анимацию" +msgstr "Закрепить анимацию игрока" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3842,34 +3832,32 @@ msgid "Cross-Animation Blend Times" msgstr "Межанимационный инÑтрумент ÑмешиваниÑ" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" -msgstr "Кон(Ñ.)" +msgstr "Конец" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Ðемедленно" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "СинхронизациÑ" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Ð’ конце" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "ПеремеÑтитÑÑ" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Ð”Ð»Ñ Ñуб-перехода необходимы начальный и конечный узлы." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Ðе в пути реÑурÑов." +msgstr "Ð’ пути нет реÑурÑов воÑпроизведениÑ: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3877,34 +3865,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Выбирайте и перемещайте узлы.\n" +"ПКМ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ узла.\n" +"Shift+ЛКМ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑвÑзи." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Создать %s" +msgstr "Создать новый узел." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "ПриÑоединить узлы" +msgstr "Соединить узлы." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Удалить выделенную дорожку." +msgstr "Удалить выделенный узел или переход" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Включить автоматичеÑкий запуÑк анимации при запуÑке, перезапуÑке или " +"уÑтановите на ноль." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "УÑтановите конец анимации. Полезно Ð´Ð»Ñ Ð²Ñпомогательных переходов." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Переход" +msgstr "Переход: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3958,10 +3947,6 @@ msgid "Amount:" msgstr "Величина:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Смешивание:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Смешивание 0:" @@ -4102,14 +4087,12 @@ msgid "Asset Download Error:" msgstr "Ошибка Загрузки Шаблона:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "Загрузка" +msgstr "Загрузка (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "Загрузка" +msgstr "Загрузка..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4136,14 +4119,12 @@ msgid "Download for this asset is already in progress!" msgstr "Загрузка Ñтого шаблона уже идёт!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "первый" +msgstr "Первый" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°" +msgstr "Ðазад" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4151,7 +4132,7 @@ msgstr "Следующий" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "ПоÑледнÑÑ" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4277,29 +4258,28 @@ msgid "Create new horizontal and vertical guides" msgstr "Создание новых горизонтальных и вертикальных направлÑющих" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "ПеремеÑтить точку вращениÑ" +msgstr "ПеремеÑтить опорную точку" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Редактировать CanvasItem" +msgstr "Вращать CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "ПеремеÑтить дейÑтвие" +msgstr "ПеремеÑтить Ñкорь" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Редактировать CanvasItem" +msgstr "Изменить размер CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "Вращать CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "Редактировать CanvasItem" +msgstr "ПеремеÑтить CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4318,19 +4298,16 @@ msgid "Paste Pose" msgstr "Ð’Ñтавить позу" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "Отдалить" +msgstr "Уменьшить" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" msgstr "СброÑить маÑштаб" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Приблизить" +msgstr "Увеличить" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4363,6 +4340,10 @@ msgid "Rotate Mode" msgstr "Режим поворота" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Режим маÑштабированиÑ" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4380,18 +4361,16 @@ msgid "Pan Mode" msgstr "Режим оÑмотра" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Переключение прилипаниÑ" +msgstr "Переключить привÑзки." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "ИÑпользовать привÑзку" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" -msgstr "Параметры прилипаниÑ" +msgstr "Параметры ПривÑзки" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" @@ -4431,9 +4410,8 @@ msgid "Snap to node sides" msgstr "ПривÑзка к Ñторонам узла" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "ПривÑзка к Ñкорю узла" +msgstr "ПривÑзка к центру узла" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4462,6 +4440,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "ВоÑÑтанавливает возможноÑть выбора потомков объекта." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "Опции Ñкелета" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Показать коÑти" @@ -4475,12 +4457,11 @@ msgstr "ОчиÑтить цепь ИК" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Сделать ПользовательÑкие КоÑть(и) от Узла(ов)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "ОчиÑтить коÑти" +msgstr "ОчиÑтить ПользовательÑкие КоÑти" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4513,6 +4494,10 @@ msgid "Show Viewport" msgstr "Показать окно проÑмотра" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Показать группу и заблокировать иконки" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Центрировать выбранное" @@ -4525,9 +4510,8 @@ msgid "Layout" msgstr "Макет" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Ð’Ñтавить ключи" +msgstr "Ð’Ñтавить ключи." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4589,12 +4573,11 @@ msgstr "Создан Poly3D" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "УÑтановить обработчик" +msgstr "Задать обработчик" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "ЧаÑтицы" +msgstr "ЦПУЧаÑтицы" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4953,9 +4936,8 @@ msgid "Create Navigation Polygon" msgstr "Создать Navigation Polygon" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ AABB" +msgid "Generating Visibility Rect" +msgstr "Создать облаÑть видимоÑти" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4983,6 +4965,11 @@ msgstr "МаÑка выброÑа очищена" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Преобразовать в CPUParticles" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "ЧаÑтицы" @@ -5052,13 +5039,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "ТребуетÑÑ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð» типа 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Генерировать AABB" +msgid "Generating AABB" +msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Конвертировать в ВЕРХÐИЙ РЕГИСТР" +msgid "Generate AABB" +msgstr "Генерировать AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5146,12 +5132,12 @@ msgstr "Параметры" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Отразить угол ручки" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Отразить длину ручки" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5186,56 +5172,50 @@ msgid "Remove In-Control Point" msgstr "Удалить входную контрольную точку" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "Передвинуть точку" +msgstr "Передвинуть ÑуÑтав" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "СвойÑтво Ñкелета Polygon2D не указывает на узел Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Показать коÑти" +msgstr "Синхронизировать коÑти" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Создать UV карту" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Создан полигон" +msgstr "Создать Полигон и UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Точка разделениÑ." #: editor/plugins/polygon_2d_editor_plugin.cpp +#, fuzzy msgid "Split can't form an existing edge." -msgstr "" +msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð´ÐµÐ»Ð¸Ñ‚ÑŒ от ÑущеÑтвующего краÑ." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "ДейÑтвие '%s' уже ÑущеÑтвует!" +msgstr "Разрез уже ÑущеÑтвует." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Добавить точку" +msgstr "Добавить разрез" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "ÐедопуÑтимый путь!" +msgstr "ÐедопуÑтимое Разбиение: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Удалить точку" +msgstr "Удалить разрез" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5243,7 +5223,7 @@ msgstr "Преобразовать UV карту" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "РиÑовать веÑа коÑтей" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5251,27 +5231,23 @@ msgstr "Polygon 2D UV редактор" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Редактировать полигон" +msgstr "Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Разделить путь" +msgstr "Разделение" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Создать коÑти" +msgstr "КоÑти" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "Создан полигон" +msgstr "Создать Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -5303,24 +5279,23 @@ msgstr "МаÑштабировать полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "Соединить две точки, чтобы Ñоздать разделение" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Сначала выберите Ñлемент наÑтроек!" +msgstr "Выберите разделение, чтобы Ñтереть его" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "КраÑить веÑа Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ интенÑивноÑтью" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "СнÑть краÑку веÑа Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ интенÑивноÑтью" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "РадиуÑ:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5335,9 +5310,8 @@ msgid "Clear UV" msgstr "ОчиÑтить UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "GridMap Параметры" +msgstr "Параметры Ñетки" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5348,34 +5322,28 @@ msgid "Grid" msgstr "Сетка" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "ÐаÑтроить привÑзку" +msgstr "ÐаÑтройки Ñетки:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "ОтÑтуп Ñетки:" +msgstr "ОтÑтуп Ñетки по X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "ОтÑтуп Ñетки:" +msgstr "ОтÑтуп Ñетки по Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Шаг Ñетки:" +msgstr "Шаг Ñетки по X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Шаг Ñетки:" +msgstr "Шаг Ñетки по Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "МаÑштабировать полигон" +msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ñтей Ñ Ð¿Ð¾Ð»Ð¸Ð³Ð¾Ð½Ð¾Ð¼" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5403,22 +5371,22 @@ msgid "Paste Resource" msgstr "Ð’Ñтавить параметры" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Открыть в редакторе" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "ÐкземплÑÑ€:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Тип:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Открыть в редакторе" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Загрузить реÑурÑ" @@ -5429,12 +5397,11 @@ msgstr "Предзагрузчик реÑурÑов" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree - не задан путь к AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Дерево анимации не дейÑтвительно." +msgstr "Путь к AnimationPlayer недейÑтвительный" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5445,19 +5412,20 @@ msgid "Close and save changes?" msgstr "Закрыть и Ñохранить изменениÑ?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Ошибка Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°:\n" +msgstr "Ошибка при запиÑи:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Ошибка: Ðе удалоÑÑŒ загрузить файл." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Ðевозможно загрузить изображение" +msgstr "Ðе удалоÑÑŒ загрузить файл." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° тайлов!" +msgstr "Ошибка при Ñохранении файла!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5476,17 +5444,14 @@ msgid "Error importing" msgstr "Ошибка импортированиÑ" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°..." +msgstr "Создать текÑтовый файл..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "Открыть файл" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." msgstr "Сохранить как..." @@ -5504,7 +5469,7 @@ msgstr " СÑылка на КлаÑÑ" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Включить Ñортировку по алфавиту в ÑпиÑке методов." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5535,9 +5500,8 @@ msgid "File" msgstr "Файл" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "ПроÑмотр Файлов" +msgstr "Ðовый текÑтовый файл" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5552,11 +5516,8 @@ msgid "Copy Script Path" msgstr "Копировать путь к Ñкрипту" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Показать в файловой ÑиÑтеме" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Предыдущий файл" #: editor/plugins/script_editor_plugin.cpp @@ -5627,7 +5588,7 @@ msgid "Keep Debugger Open" msgstr "ОÑтавить отладчик открытым" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "Отладка Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ внешнего редактора" #: editor/plugins/script_editor_plugin.cpp @@ -5635,10 +5596,6 @@ msgid "Open Godot online documentation" msgstr "Открыть онлайн документацию Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "ПоиÑк в клаÑÑовой иерархии." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "ПоиÑк Ñправочной документации." @@ -5675,39 +5632,28 @@ msgid "Debugger" msgstr "Отладчик" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Помощь" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "ПоиÑк клаÑÑов" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Ð’Ñтроенные Ñкрипты могут быть изменены только, когда Ñцена, которой они " -"принадлежат, загружена" +msgid "Search Results" +msgstr "Результаты поиÑка" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Строка:" +msgstr "Строка" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(игнорировать)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Перейти к функции" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Можно перетащить только реÑÑƒÑ€Ñ Ð¸Ð· файловой ÑиÑтемы." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "СпиÑок автозавершениÑ" +msgstr "ПоиÑк" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5727,15 +5673,15 @@ msgstr "нижний региÑтр" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "С ПропиÑной" +msgstr "ПропиÑные" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "ПодÑветка СинтакÑиÑа" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Стандартный" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5788,11 +5734,11 @@ msgid "Trim Trailing Whitespace" msgstr "Удаление пробелов в конце Ñтрок" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "Преобразовать отÑтуп в пробелы" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "Преобразовать отÑтуп в табулÑцию" #: editor/plugins/script_text_editor.cpp @@ -5809,36 +5755,27 @@ msgid "Remove All Breakpoints" msgstr "Удалить вÑе точки оÑтановок" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "Перейти к Ñледующей точке оÑтановки" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "Перейти к предыдущей точке оÑтановки" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Конвертировать в ВЕРХÐИЙ РЕГИСТР" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Конвертировать в нижний региÑтр" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Ðайти предыдущее" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "ОтÑортировать файлы..." +msgid "Find in Files..." +msgstr "Ðайти в файлах..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Перейти к функции..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "Перейти к Ñтроке..." #: editor/plugins/script_text_editor.cpp @@ -5851,40 +5788,35 @@ msgstr "Шейдер" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "У Ñтого Ñкелета нет коÑтей, Ñоздайте дочерние Bone2D узлы." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Скелет..." +msgstr "2D Ñкелет" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Сделать позу Ð¿Ð¾ÐºÐ¾Ñ (из коÑтей)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "УÑтановить коÑти в позу покоÑ" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Создать полиÑетку навигации" +msgstr "Создать физичеÑкие коÑти" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Скелет..." +msgstr "Скелет" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Создать C# решение" +msgstr "Создать физичеÑкий Ñкелет" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "ВоÑпроизвеÑти" +msgstr "ВоÑпроизвеÑти IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5935,6 +5867,14 @@ msgid "Animation Key Inserted." msgstr "Ключ анимации вÑтавлен." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Ð’Ñ‹Ñота" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "ÐариÑовано обьектов" @@ -6019,9 +5959,8 @@ msgid "This operation requires a single selected node." msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ одного выбранного узла." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "ИнформациÑ" +msgstr "Блокировать вращение камеры" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6045,7 +5984,7 @@ msgstr "Окружение" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" -msgstr "Гизмо" +msgstr "Отобразить гизмо" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" @@ -6068,9 +6007,8 @@ msgid "Doppler Enable" msgstr "ДоплеровÑкий режим" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Создание предпроÑмотра" +msgstr "КинематографичеÑкий предварительный проÑмотр" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6101,6 +6039,11 @@ msgid "Freelook Speed Modifier" msgstr "Обзор модификатор ÑкороÑти" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Блокировать вращение камеры" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm диалоговое окно" @@ -6203,11 +6146,6 @@ msgid "Tool Scale" msgstr "ИнÑтрумент маÑштаб" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "ПривÑзка к Ñетке" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Переключить Ñвободный обзор" @@ -6217,7 +6155,7 @@ msgstr "Преобразование" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "ПривÑзать объект к полу" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6248,7 +6186,6 @@ msgid "4 Viewports" msgstr "4 Окна" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" msgstr "Гизмо" @@ -6326,51 +6263,45 @@ msgid "Post" msgstr "ПоÑле" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Путь ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿ÑƒÑÑ‚!" +msgstr "Спрайт пуÑÑ‚!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." msgstr "" +"Ðе удаетÑÑ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ñпрайт иÑпользующий анимационные кадры в Ñетку." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, не удаетÑÑ Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñетки." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "Спрайт кадры" +msgstr "Спрайт" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Преобразовать в %s" +msgstr "Преобразовать в 2D Mesh" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Создать полиÑетку обводки" +msgstr "Создать 2D Mesh" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Упрощение: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "ПривÑзка (пикÑели):" +msgstr "РоÑÑ‚ (пикÑели): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Предварительный проÑмотр атлаÑа" +msgstr "Обновить предварительный проÑмотр" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "ÐаÑтройки" +msgstr "Параметры:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6474,12 +6405,11 @@ msgstr "Шаг:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Разделитель:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" -msgstr "ОблаÑть текÑтуры" +msgstr "TextureRegion" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -6610,9 +6540,12 @@ msgid "Erase Selection" msgstr "ОчиÑтить выделенное" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "ÐедопуÑтимое имÑ." +msgstr "ИÑправить недопуÑтимые плитки" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Вырезать выделенное" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6635,9 +6568,8 @@ msgid "Erase TileMap" msgstr "ОчиÑтить карту тайлов" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Ðайти тайл" +msgstr "Ðайти плитку" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6660,35 +6592,37 @@ msgid "Pick Tile" msgstr "Выбрать тайл" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "Удалить выделенное" +msgid "Copy Selection" +msgstr "Копировать выделенное" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Поворот на 0 градуÑов" +msgid "Rotate left" +msgstr "Повернуть влево" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Поворот на 90 градуÑов" +msgid "Rotate right" +msgstr "Повернуть вправо" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Поворот на 180 градуÑов" +msgid "Flip horizontally" +msgstr "Отразить по горизонтали" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Поворот на 270 градуÑов" +msgid "Flip vertically" +msgstr "Отразить по вертикали" -#: editor/plugins/tile_set_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy +msgid "Clear transform" +msgstr "Преобразование" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" -msgstr "Добавить узел(узлы) из дерева" +msgstr "Добавить текÑтуры в набор тайлов" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Удалить текущее поле" +msgstr "Удалить текущую текÑтуру из набора тайлов" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6707,16 +6641,18 @@ msgstr "" "иÑпользоватьÑÑ Ð¿Ñ€Ð¸ неверных привÑзках автотайлов." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Отобразить имена плиток (удерживайте клавишу Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +#, fuzzy +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Удалить выбранную текÑтуру и вÑе плитки, которые иÑпользуют её?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Ð’Ñ‹ не выбрали текÑтуру Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6727,31 +6663,35 @@ msgid "Merge from scene?" msgstr "СлиÑние из Ñцены?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +#, fuzzy +msgid "%s file(s) were not added because was already on the list." +msgstr " файл(Ñ‹) не был(и) добавлен(Ñ‹), поÑкольку уже в ÑпиÑке." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Перетащите ручки Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Rect.\n" +"Ðажмите на другую плитку, чтобы отредактировать ее." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" "ЛКМ: уÑтановить бит.\n" -"ПКМ: ÑнÑть бит." +"ПКМ: ÑнÑть бит.\n" +"Ðажмите на другой тайл чтобы его отредактировать." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Выберите текущий редактированный вложенный тайл." +msgstr "" +"Выбрать текущий редактированный вложенный тайл.\n" +"Ðажмите на другой тайл чтобы его отредактировать." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6815,6 +6755,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют/повреждены:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "проÑто отпущена" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "ÐкÑпортирование Ð´Ð»Ñ %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "ПредуÑтановки" @@ -6823,6 +6773,11 @@ msgid "Add..." msgstr "Добавить..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "ÐкÑпортировать наÑтройки:" + +#: editor/project_export.cpp msgid "Resources" msgstr "РеÑурÑÑ‹" @@ -6883,6 +6838,16 @@ msgid "Export PCK/Zip" msgstr "ÐкÑпортировать PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Режим ÑкÑпортированиÑ:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "ÐкÑпорт" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют:" @@ -6909,8 +6874,9 @@ msgid "Please choose a 'project.godot' or '.zip' file." msgstr "ПожалуйÑта, выберите 'project.godot' файл." #: editor/project_manager.cpp +#, fuzzy msgid "Directory already contains a Godot project." -msgstr "" +msgstr "Каталог уже Ñодержит Godot проект." #: editor/project_manager.cpp msgid "Imported Project" @@ -7358,17 +7324,13 @@ msgstr "ÐаÑтройки проекта (project.godot)" msgid "General" msgstr "ОÑновное" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Параметр:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Переопределить длÑ..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Чтобы Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñтупили в Ñилу, необходимо перезапуÑтить редактор" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7383,8 +7345,9 @@ msgid "Action" msgstr "ДейÑтвие" #: editor/project_settings_editor.cpp +#, fuzzy msgid "Deadzone" -msgstr "" +msgstr "\"МертваÑ\" зона" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7494,10 +7457,6 @@ msgstr "Выберите узел" msgid "Bit %d, val %d." msgstr "Бит %d, значение %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "СвойÑтва:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Выбрать ÑвойÑтво" @@ -7527,11 +7486,11 @@ msgstr "Переименовать" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "ПрефикÑ" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "СуффикÑ" #: editor/rename_dialog.cpp #, fuzzy @@ -7540,7 +7499,7 @@ msgstr "Параметры прилипаниÑ" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Заменить" #: editor/rename_dialog.cpp #, fuzzy @@ -7548,8 +7507,9 @@ msgid "Node name" msgstr "Ð˜Ð¼Ñ Ð£Ð·Ð»Ð°:" #: editor/rename_dialog.cpp +#, fuzzy msgid "Node's parent name, if available" -msgstr "" +msgstr "РодительÑкое Ð¸Ð¼Ñ ÑƒÐ·Ð»Ð°, еÑли оно доÑтупно" #: editor/rename_dialog.cpp #, fuzzy @@ -7567,22 +7527,28 @@ msgid "Root node name" msgstr "Ð˜Ð¼Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð³Ð¾ узла:" #: editor/rename_dialog.cpp +#, fuzzy msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"ПоÑледовательный целочиÑленный Ñчетчик.\n" +"Сравните параметры Ñчетчика." #: editor/rename_dialog.cpp +#, fuzzy msgid "Per Level counter" -msgstr "" +msgstr "Счетчик на уровень" #: editor/rename_dialog.cpp +#, fuzzy msgid "If set the counter restarts for each group of child nodes" msgstr "" +"ЕÑли уÑтановить, Ñчетчик перезапуÑтитÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ группы дочерних узлов" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Ðачальное значение Ð´Ð»Ñ Ñчетчика" #: editor/rename_dialog.cpp #, fuzzy @@ -7590,18 +7556,22 @@ msgid "Step" msgstr "Шаг:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +#, fuzzy +msgid "Amount by which counter is incremented for each node" +msgstr "КоличеÑтво, на которое увеличиваетÑÑ Ñчетчик Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ узла" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "ОтÑтуп" #: editor/rename_dialog.cpp +#, fuzzy msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Минимальное количеÑтво цифр Ð´Ð»Ñ Ñчетчика.\n" +"ÐедоÑтающие цифры дополнÑÑŽÑ‚ÑÑ Ð²ÐµÐ´ÑƒÑ‰Ð¸Ð¼Ð¸ нулÑми." #: editor/rename_dialog.cpp #, fuzzy @@ -7618,16 +7588,19 @@ msgid "Keep" msgstr "ОÑтавить оригинал" #: editor/rename_dialog.cpp +#, fuzzy msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase в under_scored" #: editor/rename_dialog.cpp +#, fuzzy msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_scored в CamelCase" #: editor/rename_dialog.cpp +#, fuzzy msgid "Case" -msgstr "" +msgstr "РегиÑтр" #: editor/rename_dialog.cpp #, fuzzy @@ -7644,7 +7617,7 @@ msgstr "ВЕРХÐИЙ РЕГИСТР" msgid "Reset" msgstr "СброÑить приближение" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Ошибка" @@ -7705,6 +7678,10 @@ msgid "Instance Scene(s)" msgstr "Дополнить Ñценой(ами)" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Добавить дочернюю Ñцену" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Убрать Ñкрипт" @@ -7741,6 +7718,12 @@ msgid "Save New Scene As..." msgstr "Сохранить новую Сцену как..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Редактируемые потомки" @@ -7818,6 +7801,11 @@ msgid "Clear Inheritance" msgstr "ОчиÑтить наÑледование" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Открыть онлайн документацию Godot" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Удалить узел(узлы)" @@ -7826,17 +7814,17 @@ msgid "Add Child Node" msgstr "Добавить дочерний узел" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Добавить дочернюю Ñцену" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Изменить тип" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Открыть Ñкрипт" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Ðовый корень Ñцены" +msgstr "Создать корневой узел Ñцены" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7887,7 +7875,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "ОчиÑтить наÑледование? (ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Переключить видимоÑть" @@ -7896,7 +7883,6 @@ msgid "Node configuration warning:" msgstr "Конфигурации узла, предупреждение:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." @@ -7921,27 +7907,24 @@ msgstr "" "Ðажмите, чтобы показать панель групп." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Открыть Ñкрипт" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "Узел заблокирован.\n" -"Ðажмите чтобы разблокировать" +"Ðажмите чтобы разблокировать." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"Потомки не выделÑÑŽÑ‚ÑÑ.\n" -"Ðажмите чтобы выделÑлиÑÑŒ" +"Дочерние объекты не выделÑÑŽÑ‚ÑÑ.\n" +"Ðажмите, чтобы Ñделать их выделÑемыми." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7952,6 +7935,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer закреплен.\n" +"Ðажмите, чтобы открепить." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7999,6 +7984,11 @@ msgid "Path is empty" msgstr "Ðе указан путь" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Спрайт пуÑÑ‚!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Путь не локальный" @@ -8087,20 +8077,9 @@ msgid "Bytes:" msgstr "Байты:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Предупреждение" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Ошибка:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "ИÑточник:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "ФункциÑ:" +#, fuzzy +msgid "Stack Trace" +msgstr "Стек" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8117,7 +8096,7 @@ msgstr "Дочерний процеÑÑ ÑвÑзан" #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "Ошибка копированиÑ" +msgstr "Копировать ошибку" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -8132,18 +8111,6 @@ msgid "Stack Frames" msgstr "Стек" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "ПеременнаÑ" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Ошибки:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "ТраÑÑировка Ñтека (еÑли применимо):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Профайлер" @@ -8261,38 +8228,32 @@ msgid "Change Capsule Shape Height" msgstr "Изменить выÑоту капÑулы" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ ÐºÐ°Ð¿Ñулы" +msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñ†Ð¸Ð»Ð¸Ð½Ð´Ñ€Ð°" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Изменить выÑоту капÑулы" +msgstr "Изменить выÑоту цилиндра" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Изменить длину луча" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñвета" +msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñ†Ð¸Ð»Ð¸Ð½Ð´Ñ€Ð°" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Изменить выÑоту капÑулы" +msgstr "Изменить выÑоту цилиндра" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñферы" +msgstr "Изменение внутреннего радиуÑа полукруга" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñвета" +msgstr "Изменение внешнего радиуÑа полукруга" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8344,7 +8305,7 @@ msgstr "Библиотеки: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" @@ -8414,7 +8375,7 @@ msgstr "Удалить выделенную Ñетку" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "GridMap Fill Selection" -msgstr "Удалить выделенную Ñетку" +msgstr "Заполнить выделенную GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8497,9 +8458,8 @@ msgid "Clear Selection" msgstr "ОчиÑтить выделение" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Ð’Ñе выбранные Ñлементы" +msgstr "Заполнить выбранное" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8570,12 +8530,8 @@ msgid "End of inner exception stack trace" msgstr "Конец траÑÑировки внутреннего Ñтека иÑключений" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Запечь!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Создать полиÑетку навигации." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8804,12 +8760,11 @@ msgstr "ПриÑоединить узлы" #: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Connect Node Data" -msgstr "ПриÑоединить узлы" +msgstr "ПриÑоединить данные узла" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "ПриÑоединить узлы" +msgstr "ПриÑоединить цепь узлов" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8856,6 +8811,10 @@ msgid "Base Type:" msgstr "Базовый тип:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "СвойÑтва:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "ДоÑтупные узлы:" @@ -8892,9 +8851,8 @@ msgid "Paste Nodes" msgstr "Ð’Ñтавить узлы" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "СвойÑтва" +msgstr "Редактировать Ñлемент" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8954,17 +8912,17 @@ msgstr "" "out) или Ñтрока (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Удалить узел VisualScript" +msgstr "ИÑкать VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Получить" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +#, fuzzy +msgid "Set %s" +msgstr "Задать " #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9060,6 +9018,12 @@ msgstr "" "Shape должен быть предуÑмотрен Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ CollisionShape2D. ПожалуйÑта, " "Ñоздайте shape-реÑÑƒÑ€Ñ Ð´Ð»Ñ Ñтого!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9109,6 +9073,12 @@ msgid "" msgstr "" "Материал Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ чаÑтиц не назначен, поÑтому поведение отÑутÑтвует." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9132,17 +9102,23 @@ msgstr "" "Node2D." #: scene/2d/skeleton_2d.cpp +#, fuzzy msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Ðта цепь Bone2D должна заканчиватьÑÑ Ð½Ð° узле Skeleton2D ." #: scene/2d/skeleton_2d.cpp +#, fuzzy msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Bone2D работает только Ñ Skeleton2D или другим Bone2D как родительÑкий узел." #: scene/2d/skeleton_2d.cpp +#, fuzzy msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Ðтой коÑти не хватает правильной позы REST. Перейдите к узлу Skeleton2D и " +"уÑтановите его." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9252,6 +9228,17 @@ msgstr "" "Shape должен быть предуÑмотрен Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ CollisionShape. ПожалуйÑта, " "Ñоздайте shape-реÑÑƒÑ€Ñ Ð´Ð»Ñ Ñтого!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Ðичего не видно, потому что полиÑетки не были назначены на отриÑовку." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "ПоÑтроение полиÑетки" @@ -9274,6 +9261,30 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "Ðичего не видно, потому что полиÑетки не были назначены на отриÑовку." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D работает только при уÑтановке его в качеÑтве дочернего узла " +"Path2D." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D работает только при уÑтановке его в качеÑтве дочернего узла " +"Path2D." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9309,12 +9320,12 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Ðто тело будет игнорироватьÑÑ, пока вы не уÑтановите Ñетку" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9340,7 +9351,7 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "Ðа узле BlendTree '%s' Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð½Ðµ найдена: '%s'" #: scene/animation/animation_blend_tree.cpp #, fuzzy @@ -9349,7 +9360,7 @@ msgstr "ИнÑтрументы анимации" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "Ð’ узле '%s' недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ: '%s'." #: scene/animation/animation_tree.cpp #, fuzzy @@ -9362,8 +9373,9 @@ msgid "Nothing connected to input '%s' of node '%s'." msgstr "Отключить '%s' от '%s'" #: scene/animation/animation_tree.cpp +#, fuzzy msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "Ðе задан корневой AnimationNode Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð°." #: scene/animation/animation_tree.cpp #, fuzzy @@ -9371,13 +9383,14 @@ msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "Выберите AnimationPlayer из дерева Ñцены Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¹." #: scene/animation/animation_tree.cpp +#, fuzzy msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"Путь уÑтановленный Ð´Ð»Ñ AnimationPlayer не приводит к узлу AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Дерево анимации не дейÑтвительно." +msgstr "Корневой Ñлемент AnimationPlayer недейÑтвительный." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9395,10 +9408,6 @@ msgstr "Внимание!" msgid "Please Confirm..." msgstr "Подтверждение..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Выбрать Ñту папку" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9409,6 +9418,10 @@ msgstr "" "иÑпользуйте функцию popup() или любую из popup*(). Делать их видимыми Ð´Ð»Ñ " "Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ - нормально, но они будут Ñкрыты при запуÑке." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9479,15 +9492,132 @@ msgstr "Ðеверный иÑточник!" #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Ðазначение функции." #: servers/visual/shader_language.cpp +#, fuzzy msgid "Assignment to uniform." -msgstr "" +msgstr "Ðазначить форму" #: servers/visual/shader_language.cpp +#, fuzzy msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Переменные могут быть назначены только в функции вершин." + +#~ msgid "Zoom:" +#~ msgstr "Приближение:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Ð’Ñ‹ уверены, что хотите удалить вÑе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ \"" + +#~ msgid "Class List:" +#~ msgstr "СпиÑок клаÑÑов:" + +#~ msgid "Search Classes" +#~ msgstr "ПоиÑк клаÑÑов" + +#~ msgid "Public Methods" +#~ msgstr "Публичные методы" + +#~ msgid "Public Methods:" +#~ msgstr "СпиÑок методов:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Тема Ñлементов GUI" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Тема Ñлементов GUI:" + +#~ msgid "Property: " +#~ msgstr "Параметр: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Добавить папку в Избранное." + +#~ msgid "Show current scene file." +#~ msgstr "Показать текущий файл Ñцены." + +#~ msgid "Enter tree-view." +#~ msgstr "Войти в древовидное предÑтавление." + +#~ msgid "Whole words" +#~ msgstr "Слова целиком" + +#~ msgid "Match case" +#~ msgstr "Учитывать региÑтр" + +#~ msgid "Filter: " +#~ msgstr "Фильтр: " + +#~ msgid "Ok" +#~ msgstr "Ок" + +#~ msgid "Show In File System" +#~ msgstr "Показать в файловой ÑиÑтеме" + +#~ msgid "Search the class hierarchy." +#~ msgstr "ПоиÑк в клаÑÑовой иерархии." + +#~ msgid "Search in files" +#~ msgstr "ИÑкать в файлах" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Ð’Ñтроенные Ñкрипты могут быть изменены только, когда Ñцена, которой они " +#~ "принадлежат, загружена" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Конвертировать в ВЕРХÐИЙ РЕГИСТР" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Конвертировать в нижний региÑтр" + +#~ msgid "Snap To Floor" +#~ msgstr "ПривÑзать к полу" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Поворот на 0 градуÑов" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Поворот на 90 градуÑов" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Поворот на 180 градуÑов" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Поворот на 270 градуÑов" + +#~ msgid "Warning" +#~ msgstr "Предупреждение" + +#~ msgid "Error:" +#~ msgstr "Ошибка:" + +#~ msgid "Source:" +#~ msgstr "ИÑточник:" + +#~ msgid "Function:" +#~ msgstr "ФункциÑ:" + +#~ msgid "Variable" +#~ msgstr "ПеременнаÑ" + +#~ msgid "Errors:" +#~ msgstr "Ошибки:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "ТраÑÑировка Ñтека (еÑли применимо):" + +#~ msgid "Bake!" +#~ msgstr "Запечь!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Создать полиÑетку навигации." + +#~ msgid "Get" +#~ msgstr "Получить" #~ msgid "Change Scalar Constant" #~ msgstr "Изменить чиÑловую конÑтанту" @@ -9988,9 +10118,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Ðевозможно Ñохранить текÑтуру атлаÑа:" -#~ msgid "Exporting for %s" -#~ msgstr "ÐкÑпортирование Ð´Ð»Ñ %s" - #~ msgid "Setting Up..." #~ msgstr "ÐаÑтройка..." @@ -10095,9 +10222,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ИÑходный шрифт:" -#~ msgid "Source Font Size:" -#~ msgstr "ИÑходный размер шрифта:" - #~ msgid "Dest Resource:" #~ msgstr "РеÑÑƒÑ€Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ:" @@ -10176,9 +10300,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "Ðач(Ñ.)" -#~ msgid "Filters" -#~ msgstr "Фильтры" - #~ msgid "Source path is empty." #~ msgstr "Путь к иÑточнику пуÑÑ‚." @@ -10452,15 +10573,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Стерео" -#~ msgid "Pitch" -#~ msgstr "Ð’Ñ‹Ñота" - #~ msgid "Window" #~ msgstr "Окно" -#~ msgid "Move Right" -#~ msgstr "Двигать вправо" - #~ msgid "Scaling to %s%%." #~ msgstr "МаÑштабирование до %s%%." @@ -10537,9 +10652,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "проÑто нажата" -#~ msgid "just released" -#~ msgstr "проÑто отпущена" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" @@ -10869,9 +10981,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "ÐкÑпортирование проекта" -#~ msgid "Export Preset:" -#~ msgstr "ÐкÑпортировать наÑтройки:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance не Ñодержит BakedLight реÑурÑ." diff --git a/editor/translations/si.po b/editor/translations/si.po new file mode 100644 index 0000000000..cad4ac4e20 --- /dev/null +++ b/editor/translations/si.po @@ -0,0 +1,9079 @@ +# Sinhala translation of the Godot Engine editor +# Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) +# This file is distributed under the same license as the Godot source code. +# Yohan Sandun <Yohan99ysk@gmail.com>, 2018. +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2018-11-21 19:08+0000\n" +"Last-Translator: Yohan Sandun <Yohan99ysk@gmail.com>\n" +"Language-Team: Sinhala <https://hosted.weblate.org/projects/godot-engine/" +"godot/si/>\n" +"Language: si\n" +"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 3.3-dev\n" + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#: modules/mono/glue/gd_glue.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "විකේà¶à¶± à¶¶à·’à¶§à·” සදහ෠ප්â€à¶»à¶¸à·à¶«à·€à¶à·Š à¶¶à·’à¶§à·” නොමà·à¶, à·„à· à·€à·à¶»à¶¯à·’ ආකෘà¶à·’යක්." + +#: core/math/expression.cpp +msgid "Invalid input %i (not passed) in expression" +msgstr "à·€à·à¶»à¶¯à·’ ආදà·à¶±à¶ºà¶šà·Š %i (යà·à·€à·’ය නොහà·à¶)" + +#: core/math/expression.cpp +msgid "self can't be used because instance is null (not passed)" +msgstr "නිදර්à·à¶šà¶º à·à·”න්â€à¶º නිස෠self à¶·à·à·€à·’à¶à· à¶šà·… නොහà·à¶š (යà·à·€à·’ය නොහà·à¶š)" + +#: core/math/expression.cpp +msgid "Invalid operands to operator %s, %s and %s." +msgstr "%s, %s සහ %s සදහ෠වà·à¶»à¶¯à·’ මෙහෙයුම් à¶šà·à¶»à¶š." + +#: core/math/expression.cpp +msgid "Invalid index of type %s for base type %s" +msgstr "%s වර්ගය %s මූල වර්ගය සදහ෠වà·à¶»à¶¯à·’ සුචියක්" + +#: core/math/expression.cpp +msgid "Invalid named index '%s' for base type %s" +msgstr "'%s' මූල වර්ග %s සදහ෠වà·à¶»à¶¯à·’ à¶±à·à¶¸à·’à¶š සුචියක්" + +#: core/math/expression.cpp +msgid "Invalid arguments to construct '%s'" +msgstr "'%s' ගොඩනà·à¶œà·“මට à·€à·à¶»à¶¯à·’ à¶à¶»à·Šà¶š" + +#: core/math/expression.cpp +msgid "On call to '%s':" +msgstr "'%s' ඇමà¶à·“ම:" + +#: editor/animation_bezier_editor.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "නිදහස්" + +#: editor/animation_bezier_editor.cpp +msgid "Balanced" +msgstr "සමà¶à·”ලිà¶à¶ºà·’" + +#: editor/animation_bezier_editor.cpp +msgid "Mirror" +msgstr "à¶šà·à¶©à¶´à¶" + +#: editor/animation_bezier_editor.cpp +msgid "Insert Key Here" +msgstr "මෙහි යà¶à·”à¶» ඇà¶à·”à¶½à¶à·Š කරන්න" + +#: editor/animation_bezier_editor.cpp +msgid "Duplicate Selected Key(s)" +msgstr "à¶à·à¶»à·à¶œà¶à·Š යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" + +#: editor/animation_bezier_editor.cpp +msgid "Delete Selected Key(s)" +msgstr "à¶à·à¶»à·à¶œà¶à·Š යà¶à·”රු මක෠දමන්න" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Anim යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Delete Keys" +msgstr "Anim යà¶à·”රු මක෠දමන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Time" +msgstr "Anim කීෆ්â€à¶»à·šà¶¸à·Š à¶šà·à¶½à¶º වෙනස් කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transition" +msgstr "Anim සංක්රමණය වෙනස් කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transform" +msgstr "Anim පරිවර්à¶à¶±à¶º වෙනස් කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "Anim කීෆ්â€à¶»à·šà¶¸à·Š අගය වෙනස් කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Call" +msgstr "Anim à¶šà·à¶¯à·€à·“ම් වෙනස් කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Property Track" +msgstr "ලක්ෂණය ලුහුබදින්න" + +#: editor/animation_track_editor.cpp +msgid "3D Transform Track" +msgstr "3D රූපà·à¶±à·Šà¶à¶»à¶«à¶º ලුහුබදින්න" + +#: editor/animation_track_editor.cpp +msgid "Call Method Track" +msgstr "ඇමà¶à·“ම් à¶šà·Šâ€à¶»à¶¸à¶º ලුහුබදින්න" + +#: editor/animation_track_editor.cpp +msgid "Bezier Curve Track" +msgstr "Bezier වක්â€à¶» ලුහුබදින්න" + +#: editor/animation_track_editor.cpp +msgid "Audio Playback Track" +msgstr "à·à¶¶à·Šà¶° à¶°à·à·€à¶±à¶º ලුහුබදින්න" + +#: editor/animation_track_editor.cpp +msgid "Animation Playback Track" +msgstr "සජීවීකරණ à¶°à·à·€à¶±à¶º ලුහුබදින්න" + +#: editor/animation_track_editor.cpp +msgid "Add Track" +msgstr "ලුහුබදින්නෙක් à¶‘à¶šà·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Animation Length Time (seconds)" +msgstr "සජීවීකරණ à¶šà·à¶½à¶º (à¶à¶´à·Šà¶´à¶»)" + +#: editor/animation_track_editor.cpp +msgid "Animation Looping" +msgstr "සජීවීකරණ පුනරà·à·€à¶»à·Šà¶®à¶±à¶º" + +#: editor/animation_track_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: editor/animation_track_editor.cpp +msgid "Audio Clips:" +msgstr "à·à·Šâ€à¶»à·€à·Šâ€à¶º පසුරු:" + +#: editor/animation_track_editor.cpp +msgid "Anim Clips:" +msgstr "Anim පසුරු:" + +#: editor/animation_track_editor.cpp +msgid "Toggle this track on/off." +msgstr "ලුහුබදින්න෠සක්â€à¶»à·’ය/à¶…à¶šà·Šâ€à¶»à·’ය." + +#: editor/animation_track_editor.cpp +msgid "Update Mode (How this property is set)" +msgstr "මà·à¶¯à·’ලිය යà·à·€à¶à·Š කරන්න (මෙම ගුණà·à¶‚ගය සකස෠ඇà¶à·Šà¶à·š කෙසේද)" + +#: editor/animation_track_editor.cpp +msgid "Interpolation Mode" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: editor/animation_track_editor.cpp +msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" +msgstr "පුනර්කරණ මà·à¶¯à·’ලිය (පුනර්කරණය ආරම්භයේ දී නිවේà·à¶šà¶º අවසන් වේ)" + +#: editor/animation_track_editor.cpp +msgid "Remove this track." +msgstr "මෙම ලුහුබදින්න෠ඉවà¶à·Š කරන්න." + +#: editor/animation_track_editor.cpp +msgid "Time (s): " +msgstr "à¶šà·à¶½à¶º (à¶à¶à·Š): " + +#: editor/animation_track_editor.cpp +msgid "Continuous" +msgstr "අඛණ්ඩව" + +#: editor/animation_track_editor.cpp +msgid "Discrete" +msgstr "විවික්à¶" + +#: editor/animation_track_editor.cpp +msgid "Trigger" +msgstr "à¶šà·Šâ€à¶»à·’යà·à¶»à¶¸à·Šà¶·à¶šà¶º" + +#: editor/animation_track_editor.cpp +msgid "Capture" +msgstr "ග්â€à¶»à·„ණය" + +#: editor/animation_track_editor.cpp +msgid "Nearest" +msgstr "ආසන්නම" + +#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "රේඛීය" + +#: editor/animation_track_editor.cpp +msgid "Cubic" +msgstr "à¶à¶±" + +#: editor/animation_track_editor.cpp +msgid "Clamp Loop Interp" +msgstr "පුනර්කරණය රදවන්න" + +#: editor/animation_track_editor.cpp +msgid "Wrap Loop Interp" +msgstr "වෙලුම් පුනර්කරණය" + +#: editor/animation_track_editor.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "යà¶à·”à¶» ඇà¶à·”à¶½à¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Key(s)" +msgstr "යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Delete Key(s)" +msgstr "යà¶à·”රු මක෠දමන්න" + +#: editor/animation_track_editor.cpp +msgid "Remove Anim Track" +msgstr "Anim ලුහුබදින්න෠ඉවà¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "%s සදහ෠නව ලුහුබදින්නෙà¶à·Š à·ƒà·à¶¯à· යà¶à·”රක් ඇà¶à·”à¶½à¶à·Š කරන්න?" + +#: editor/animation_track_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "%d සදහ෠ලුහුබදින්නන් à·ƒà·à¶¯à· යà¶à·”රු ඇà¶à·”à¶½à¶à·Š කරන්න?" + +#: editor/animation_track_editor.cpp editor/create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp +msgid "Create" +msgstr "à·ƒà·à¶¯à¶±à·Šà¶±" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert" +msgstr "Anim ඇà¶à·”à¶½à¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "AnimationPlayer can't animate itself, only other players." +msgstr "සජීවීකරණ à¶°à·à·€à¶šà¶º à¶à¶¸à·à¶§à¶¸ සජීවීකරණය à¶šà¶½ නොහà·à¶š, අනෙක් à¶°à·à·€à¶š පමණි." + +#: editor/animation_track_editor.cpp +msgid "Anim Create & Insert" +msgstr "Anim à·ƒà·à¶¯à¶±à·Šà¶± සහ ඇà¶à·”à¶½à¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "Anim ලුහුබදින්නෙක් හ෠යà¶à·”රක් ඇà¶à·”à¶½à¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Key" +msgstr "Anim යà¶à·”රක් ඇà¶à·”à¶½à¶à·Š කරන්න" + +#: editor/animation_track_editor.cpp +msgid "Transform tracks only apply to Spatial-based nodes." +msgstr "Spatial à¶´à·à¶¯à¶š පුරුක් සදහ෠පමණක් රූපà·à¶±à·Šà¶à¶» ලුහුබදින්නන් à¶‘à¶šà·Š à¶šà·… à·„à·à¶š." + +#: editor/animation_track_editor.cpp +msgid "" +"Audio tracks can only point to nodes of type:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" +msgstr "" +"පහචපුරුක් වර්ග සදහ෠පමණක් à·à·Šâ€à¶»à·€à·Šâ€à¶º ලුහුබදින්නන් à¶‘à¶šà·Š à¶šà·… à·„à·à¶š:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" + +#: editor/animation_track_editor.cpp +msgid "Animation tracks can only point to AnimationPlayer nodes." +msgstr "AnimationPlayer පුරුක් සදහ෠පමණක් සජීවීකරණ ලුහුබදින්නන් à¶‘à¶šà·Š à¶šà·… à·„à·à¶š." + +#: editor/animation_track_editor.cpp +msgid "An animation player can't animate itself, only other players." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Not possible to add a new track without a root" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a key." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Track is not of type Spatial, can't insert key" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a method key." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Method not found in object: " +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clipboard is empty" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "" +"This option does not work for Bezier editing, as it's only a single track." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Only show tracks from nodes selected in tree." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Group tracks by node or display them as plain list." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Snap (s): " +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation step value." +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_properties.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation properties." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Copy Tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Paste Tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Delete Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Next Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Previous Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Pick the node that will be animated:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Use Bezier Curves" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Select tracks to copy:" +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_properties.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Copy" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: editor/code_editor.cpp editor/editor_help.cpp +msgid "No Matches" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replaced %d occurrence(s)." +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Match Case" +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Whole Words" +msgstr "" + +#: editor/code_editor.cpp editor/rename_dialog.cpp +msgid "Replace" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Zoom In" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Zoom Out" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Reset Zoom" +msgstr "" + +#: editor/code_editor.cpp +msgid "Warnings:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Font Size:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "" +"Target method not found! Specify a valid method or attach a script to target " +"Node." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp +#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Add" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp +msgid "Remove" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp editor/groups_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect '%s' from '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect all from signal: '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect..." +msgstr "" + +#: editor/connections_dialog.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect Signal: " +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Edit Connection: " +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from this signal?" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect All" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Edit..." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Go To Method" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Change %s Type" +msgstr "" + +#: editor/create_dialog.cpp editor/project_settings_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Create New %s" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Matches:" +msgstr "" + +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Description:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Path" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_property_selector.cpp +#: scene/gui/file_dialog.cpp +msgid "Open" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp editor/export_template_manager.cpp +msgid "Cannot remove:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Load failed due to missing dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Open Anyway" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/project_export.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Key" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Value" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: editor/editor_about.cpp +msgid "Godot Engine contributors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Founders" +msgstr "" + +#: editor/editor_about.cpp +msgid "Lead Developer" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Manager " +msgstr "" + +#: editor/editor_about.cpp +msgid "Developers" +msgstr "" + +#: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "" + +#: editor/editor_about.cpp +msgid "" +"Godot Engine relies on a number of thirdparty free and open source " +"libraries, all compatible with the terms of its MIT license. The following " +"is an exhaustive list of all such thirdparty components with their " +"respective copyright statements and license terms." +msgstr "" + +#: editor/editor_about.cpp +msgid "All Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Licenses" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Error opening package file, not in zip format." +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Uncompressing Assets" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Package Installer" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Speakers" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Rename Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Change Audio Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Bypass Effects" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Select Audio Bus Send" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio Bus, Drag and Drop to rearrange." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bypass" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + +#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Master bus can't be deleted!" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Duplicate Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save Audio Bus Layout As..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Location for New Layout..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Open Audio Bus Layout" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "There is no 'res://default_bus_layout.tres' file." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Invalid file, not an audio bus layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Create a new Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/editor_properties.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Load" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load an existing Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save As" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save this Bus Layout to a file." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/import_dock.cpp +msgid "Load Default" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load the default Bus Layout." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp +#: scene/gui/file_dialog.cpp +msgid "Path:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp +msgid "Name" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: editor/editor_data.cpp +msgid "Storing local changes..." +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating scene..." +msgstr "" + +#: editor/editor_data.cpp editor/editor_properties.cpp +msgid "[empty]" +msgstr "" + +#: editor/editor_data.cpp +msgid "[unsaved]" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Please select a base directory first" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp +msgid "Name:" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: editor/editor_export.cpp +msgid "Storing File:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Packing" +msgstr "" + +#: editor/editor_export.cpp platform/javascript/export/export.cpp +msgid "Template file not found:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select This Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Open in File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +#: editor/project_manager.cpp +msgid "Show in File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "New Folder..." +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp +msgid "Save" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp +#: editor/plugins/style_box_editor_plugin.cpp +msgid "Preview:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "(Re)Importing Assets" +msgstr "" + +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class:" +msgstr "" + +#: editor/editor_help.cpp editor/scene_tree_editor.cpp +msgid "Inherits:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Theme Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Theme Properties:" +msgstr "" + +#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations:" +msgstr "" + +#: editor/editor_help.cpp +msgid "enum " +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Online Tutorials:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There are currently no tutorials for this class, you can [color=$color][url=" +"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" +"url][/color]." +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Descriptions" +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Descriptions:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Descriptions" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Descriptions:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp +msgid "Set" +msgstr "" + +#: editor/editor_inspector.cpp +msgid "Set Multiple:" +msgstr "" + +#: editor/editor_log.cpp +msgid "Output:" +msgstr "" + +#: editor/editor_log.cpp editor/editor_profiler.cpp +#: editor/editor_properties.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/property_editor.cpp editor/scene_tree_dock.cpp +#: editor/script_editor_debugger.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Clear" +msgstr "" + +#: editor/editor_log.cpp +msgid "Clear Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Error saving resource!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Save Resource As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Can't open '%s'. The file could have been moved or deleted." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a tree root." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " +"be satisfied." +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This is a remote object so changes to it will not be kept.\n" +"Please read the documentation relevant to debugging to better understand " +"this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Script..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Close" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to '%s' before closing?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "No" +msgstr "" + +#: editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a root node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a selected node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Run Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to the following scene(s) before quitting?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to enable addon plugin at: '%s' parsing of config failed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' Base type is not EditorPlugin." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s' Script is not in tool mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Scene '%s' was automatically imported, so it can't be modified.\n" +"To make changes to it, a new inherited scene can be created." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: editor/editor_node.cpp editor/import_dock.cpp +#: editor/script_create_dialog.cpp +msgid "Default" +msgstr "" + +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play This Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files or folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files" +msgstr "" + +#: editor/editor_node.cpp +msgid "Dock Position" +msgstr "" + +#: editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle distraction-free mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "Add a new scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Filter Files..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save All Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Open Recent" +msgstr "" + +#: editor/editor_node.cpp +msgid "Convert To..." +msgstr "" + +#: editor/editor_node.cpp +msgid "MeshLibrary..." +msgstr "" + +#: editor/editor_node.cpp +msgid "TileSet..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Undo" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Redo" +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: editor/editor_node.cpp +msgid "Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export" +msgstr "" + +#: editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Data Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp +msgid "Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor" +msgstr "" + +#: editor/editor_node.cpp editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle Fullscreen" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data/Settings Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Settings Folder" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Manage Export Templates" +msgstr "" + +#: editor/editor_node.cpp +msgid "Help" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/project_settings_editor.cpp editor/rename_dialog.cpp +msgid "Search" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Online Docs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Q&A" +msgstr "" + +#: editor/editor_node.cpp +msgid "Issue Tracker" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: editor/editor_node.cpp +msgid "About" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: editor/editor_node.cpp editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Changing the video driver requires restarting the editor." +msgstr "" + +#: editor/editor_node.cpp editor/project_settings_editor.cpp +#: editor/settings_config_dialog.cpp +msgid "Save & Restart" +msgstr "" + +#: editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Disable Update Spinner" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_node.cpp +msgid "Expand Bottom Panel" +msgstr "" + +#: editor/editor_node.cpp scene/resources/visual_shader.cpp +msgid "Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Don't Save" +msgstr "" + +#: editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Password:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited" +msgstr "" + +#: editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 2D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 3D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Script Editor" +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "Open Asset Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the next Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the previous Editor" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail..." +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit Plugin" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Author:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit:" +msgstr "" + +#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp +#: editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Physics Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Calls" +msgstr "" + +#: editor/editor_properties.cpp +msgid "On" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Layer" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Bit %d, value %d" +msgstr "" + +#: editor/editor_properties.cpp +msgid "[Empty]" +msgstr "" + +#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp +msgid "Assign.." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Pick a Viewport" +msgstr "" + +#: editor/editor_properties.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "New Script" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "New %s" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/editor_properties.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Paste" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/editor_properties.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Selected node is not a Viewport!" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Size: " +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Page: " +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "New Key:" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "New Value:" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Add Key/Value Pair" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "Select device from the list" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "" +"No runnable export preset found for this platform.\n" +"Please add a runnable preset in the export menu." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Re-Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Installed)" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Missing)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Current)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Retrieving mirrors, please wait..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove template version '%s'?" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Invalid version.txt format inside templates: %s." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "No version.txt found inside templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error creating path for templates:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Extracting Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Importing:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"No download links found for this version. Direct download is only available " +"for official releases." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request Failed." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Complete." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"Templates installation failed. The problematic templates archives can be " +"found at '%s'." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error requesting url: " +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connecting to Mirror..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Disconnected" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Resolving" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Resolve" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Connect" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connected" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Downloading" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connection Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "SSL Handshake Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Current Version:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Installed Versions:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Install From File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove Template" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select template file" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export Template Manager" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select mirror from list: (Shift+Click: Open in Browser)" +msgstr "" + +#: editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot navigate to '%s' as it has not been found in the file system!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Status: Import of file failed. Please fix file and reimport manually." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move/rename resources root." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move a folder into itself." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error moving:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error duplicating:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Unable to update dependencies:" +msgstr "" + +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "No name provided." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "A file or folder with this name already exists." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Open Scene(s)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Script..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Resource..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + +#: editor/filesystem_dock.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Toggle split mode" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Search files" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"Scanning Files,\n" +"Please Wait..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "There is already file or folder with the same name in this location." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Overwrite" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find in Files" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Folder:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Filters:" +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find..." +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp +msgid "Replace..." +msgstr "" + +#: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace all (no undo)" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Searching..." +msgstr "" + +#: editor/find_in_files.cpp +msgid "Search complete" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Group name already exists." +msgstr "" + +#: editor/groups_editor.cpp +msgid "invalid Group name." +msgstr "" + +#: editor/groups_editor.cpp editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes not in Group" +msgstr "" + +#: editor/groups_editor.cpp editor/scene_tree_dock.cpp +msgid "Filter nodes" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes in Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Manage Groups" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Single Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Importing Scene..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating Lightmaps" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating for Mesh: " +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Running Custom Script..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Error running post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Saving..." +msgstr "" + +#: editor/import_dock.cpp +msgid "Set as Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Clear Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid " Files" +msgstr "" + +#: editor/import_dock.cpp +msgid "Import As:" +msgstr "" + +#: editor/import_dock.cpp editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/import_dock.cpp +msgid "Reimport" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Failed to load resource." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Expand All Properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Collapse All Properties" +msgstr "" + +#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Save As..." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Params" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Paste Params" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Edit Resource Clipboard" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Resource" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Built-In" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Open in Help" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "History of recently edited objects." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Object properties." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Filter properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Edit a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Create a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Plugin Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Subfolder:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Language:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Script Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Activate now?" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Create a new polygon from scratch" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Delete points" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Load.." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "This type of node can't be used. Only root nodes are allowed." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"AnimationTree is inactive.\n" +"Activate to enable playback, check node warnings if activation fails." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Set the blending position within the space" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Select and move points, create points with RMB." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create points." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Erase points." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Open Animation Node" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Triangle already exists" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "BlendSpace2D does not belong to an AnimationTree node." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "No triangles exist, so no blending can take place." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create triangles by connecting points." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Erase points and triangles." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Generate blend triangles automatically (instead of manually)" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Filters" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Output node can't be added to the blend tree." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Unable to connect, port may be in use or connection may be invalid." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "No animation player set, so unable to retrieve track names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Player path set is invalid, so unable to retrieve track names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "" +"Animation player has no valid root node path, so unable to retrieve track " +"names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Node.." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Edit Filtered Tracks:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Enable filtering" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Delete Animation?" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Invalid animation name!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation name already exists!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to copy!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation resource on clipboard!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to edit!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Transitions..." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Open in Inspector" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Enable Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Directions" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Past" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Future" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Depth" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "1 step" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "2 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "3 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Differences Only" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Force White Modulate" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Include Gizmos (3D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pin AnimationPlayer" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "End" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Immediate" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Sync" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "At End" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Travel" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Start and end nodes are needed for a sub-transition." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "No playback resource set at path: %s." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"Select and move nodes.\n" +"RMB to add new nodes.\n" +"Shift+LMB to create connections." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Create new nodes." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Connect nodes." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Remove selected node or transition" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Toggle autoplay this animation on start, restart or seek to zero." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Set the end animation. This is useful for sub-transitions." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition: " +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "AnimationTree" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Import Animations..." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Filters..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading (%s / %s)..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "First" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Previous" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Can't determine a save path for lightmap images.\n" +"Save your scene (for images to be saved in the same dir), or pick a save " +"path from the BakedLightmap properties." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " +"Light' flag is on." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Failed creating lightmap images, make sure path is writable." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Bake Lightmaps" +msgstr "" + +#: editor/plugins/camera_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Preview" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal and vertical guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move pivot" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Resize CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom out" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom reset" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom in" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Smart snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to parent" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node center" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Custom Bone(s) from Node(s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Custom Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Layout" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Add %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Adding %s..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Cannot instantiate multiple nodes without root." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change default type" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Drag & drop + Shift : Add node as sibling\n" +"Drag & drop + Alt : Change node type" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +msgid "CPUParticles" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Mesh" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Node" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Curve Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Add point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Left linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Toggle Curve Linear Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Hold Shift to edit tangents individually" +msgstr "" + +#: editor/plugins/gi_probe_editor_plugin.cpp +msgid "Bake GI Probe" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "" +"No OccluderPolygon2D resource on this node.\n" +"Create and assign one?" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Contained Mesh is not of type ArrayMesh." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Unwrap failed, mesh may not be manifold?" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "No mesh to debug." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Model has no UV in this layer" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh..." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV1" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV2" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Unwrap UV2 for Lightmap/AO" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generating Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Can only set point into a ParticlesMaterial process material" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image..." +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generate Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Particles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generation Time (sec):" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Capture from Pixel" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Colors" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Points:" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points+Normal (Directed)" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Source: " +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "A processor material of type 'ParticlesMaterial' is required." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generating AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate Visibility AABB" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Out-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove In-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp editor/plugins/theme_editor_plugin.cpp +#: editor/project_export.cpp +msgid "Options" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Angles" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Lengths" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Out-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove In-Control Point" +msgstr "" + +#: editor/plugins/physical_bone_plugin.cpp +msgid "Move joint" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"The skeleton property of the Polygon2D does not point to a Skeleton2D node" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon & UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Split point with itself." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Split can't form an existing edge." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Split already exists." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Add Split" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Invalid Split: " +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Remove Split" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint bone weights" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Poly" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Splits" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Connect two points to make a split" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Select a split to erase it" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint weights with specified intensity" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UnPaint weights with specified intensity" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Radius:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Settings" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Configure Grid:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync Bones to Polygon" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_editor.cpp +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ResourcePreloader" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "AnimationTree has no path set to an AnimationPlayer" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Path to AnimationPlayer is invalid" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Files" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close and save changes?" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error writing TextFile:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving file!" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New TextFile..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save File As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid " Class Reference" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle alphabetical sorting of the method list." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Sort" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Up" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Down" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New TextFile" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Copy Script Path" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Other Tabs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle Scripts Panel" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +#: editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Debug with External Editor" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open Godot online documentation" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Discard" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Results" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "(ignore)" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: editor/plugins/script_text_editor.cpp +msgid "Only resources from filesystem can be dropped." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Lookup Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Pick Color" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Convert Case" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Capitalize" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Syntax Highlighter" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Standard" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Cut" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Delete Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold/Unfold Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Unfold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Spaces" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Tabs" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Next Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Previous Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find in Files..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Line..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "Shader" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "This skeleton has no bones, create some children Bone2D nodes." +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Skeleton2D" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Make Rest Pose (From Bones)" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Bones to Rest Pose" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical bones" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Skeleton" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical skeleton" +msgstr "" + +#: editor/plugins/skeleton_ik_editor_plugin.cpp +msgid "Play IK" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translating: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Objects Drawn" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Material Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Shader Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Surface Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Draw Calls" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Vertices" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock View Rotation" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Unshaded" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Environment" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Information" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Half Resolution" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Doppler Enable" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Cinematic Preview" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Forward" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Backwards" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Up" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Down" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Speed Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Select Mode (Q)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Drag: Rotate\n" +"Alt+Drag: Move\n" +"Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Space Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Select" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Move" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Rotate" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Scale" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Freelook" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap object to floor" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite is empty!" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Can't convert a sprite using animation frames to mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't replace by mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Convert to 2D Mesh" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create 2D Mesh" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Simplification: " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Grow (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Update Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Settings:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "SpriteFrames" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Region Rect" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Sep.:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "TextureRegion" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Edit theme..." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme editing menu." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create From Current Editor Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has,Many,Options" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Style" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Fix Invalid Tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Line Draw" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket Fill" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Find Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Copy Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate right" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip horizontally" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Anim පරිවර්à¶à¶±à¶º වෙනස් කරන්න" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Texture(s) to TileSet" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove current Texture from TileSet" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Display tile's names (hold Alt Key)" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "You haven't selected a texture to remove." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "%s file(s) were not added because was already on the list." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Drag handles to edit Rect.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"LMB: set bit on.\n" +"RMB: set bit off.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select current edited sub-tile.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to change its priority.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "This property can't be changed." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Tile Set" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Light" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "VisualShader" +msgstr "" + +#: editor/project_export.cpp +msgid "Runnable" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete patch '%s' from list?" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete preset '%s'?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp +msgid "Presets" +msgstr "" + +#: editor/project_export.cpp editor/project_settings_editor.cpp +msgid "Add..." +msgstr "" + +#: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: editor/project_export.cpp +msgid "Export all resources in the project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected scenes (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected resources (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources to export:" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "Patches" +msgstr "" + +#: editor/project_export.cpp +msgid "Make Patch" +msgstr "" + +#: editor/project_export.cpp +msgid "Features" +msgstr "" + +#: editor/project_export.cpp +msgid "Custom (comma-separated):" +msgstr "" + +#: editor/project_export.cpp +msgid "Feature List:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export With Debug" +msgstr "" + +#: editor/project_manager.cpp +msgid "The path does not exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose an empty folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' or '.zip' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Directory already contains a Godot project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "There is already a folder in this path with the specified name." +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Rename Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Installation Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: no main scene defined.\n" +"Please edit the project and set the main scene in \"Project Settings\" under " +"the \"Application\" category." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: Assets need to be imported.\n" +"Please edit the project to trigger the initial import." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Language changed.\n" +"The UI will update next time the editor or project manager starts." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Templates" +msgstr "" + +#: editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Restart Now" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't run project" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You don't currently have any projects.\n" +"Would you like to explore the official example projects in the Asset Library?" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Key " +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Action deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "All Devices" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Press a Key..." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 1" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 2" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Axis Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Global Property" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Select a setting item first!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "No property '%s' exists." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Setting '%s' is internal, and it can't be deleted." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Delete Item" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Error saving settings." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Settings saved OK." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override for Feature" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Remapped Path" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter Mode" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Project Settings (project.godot)" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override For..." +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Editor must be restarted for changes to take effect" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Input Map" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Localization" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resources:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locale" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show all locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show only selected locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Filter mode:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "AutoLoad" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: editor/property_editor.cpp +msgid "File..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Dir..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: editor/property_editor.cpp +msgid "Select Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp +msgid "Batch Rename" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Prefix" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Suffix" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Advanced options" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Substitute" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node's parent name, if available" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node type" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Current scene name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Root node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Sequential integer counter.\n" +"Compare counter options." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Per Level counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "If set the counter restarts for each group of child nodes" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Initial value for the counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Step" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Amount by which counter is incremented for each node" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Padding" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Minimum number of digits for the counter.\n" +"Missing digits are padded with leading zeros." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Post-Process" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Keep" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "CamelCase to under_scored" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "under_scored to CamelCase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Case" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Lowercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Uppercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Reset" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can not perform with the root node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save New Scene As..." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Create Root Node:" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "2D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "3D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "User Interface" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Custom Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Sub-Resources" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Scene Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Copy Node Path" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach a new or existing script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear a script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remote" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node configuration warning:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connection(s) and group(s).\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connections.\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is in group(s).\n" +"Click to show groups dock." +msgstr "" + +#: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp +msgid "Open Script" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is locked.\n" +"Click to unlock it." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Children are not selectable.\n" +"Click to make selectable." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visibility" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"AnimationPlayer is pinned.\n" +"Click to unpin." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node Configuration Warning!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading template '%s'" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error - Could not create script in filesystem." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading script from %s" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Open Script/Choose Location" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Wrong extension chosen" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid Path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid inherited parent name or path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script valid" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Allowed: a-z, A-Z, 0-9 and _" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in script (into scene file)" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Create new script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Load existing script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Inherits" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Class Name" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Template" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in Script" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Attach Node Script" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Remote " +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Copy Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Binding" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change AudioStreamPlayer3D Emission Angle" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Notifier AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Particles AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Probe Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Height" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Inner Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Outer Radius" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select the dynamic library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select dependencies of the library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Remove current entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Double click to create a new entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform:" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dynamic Library" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Add an architecture entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "GDNativeLibrary" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "step argument is zero!" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Object can't provide a length." +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Delete Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Grid Map" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Snap View" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Disabled" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Above" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Below" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit X Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Y Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Z Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Clear Rotation" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Exterior Connector" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Erase Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clear Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Settings" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Pick Distance:" +msgstr "" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating solution..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating C# project..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to save solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Done" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create C# project." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Mono" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Create C# solution" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Build Project" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Warnings" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "View log" +msgstr "" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Bake NavMesh" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Partitioning..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Signal Arguments" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Default Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Expression" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Duplicate VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Move Node(s)" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Data" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Sequence" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Input Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't copy the function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Clipboard is empty!" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Member" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search VisualScript" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Get %s" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Set %s" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run in Browser" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run exported HTML in the system's default browser." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not write file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not open template for export:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read custom HTML shell:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read boot splash image file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Using default boot splash image." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_object_2d.cpp +msgid "" +"This node has no shape, so it can't collide or interact with other objects.\n" +"Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " +"define its shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp scene/3d/particles.cpp +msgid "" +"A material to process the particles is not assigned, so no behavior is " +"imprinted." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/physics_body_2d.cpp +msgid "" +"Size changes to RigidBody2D (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "This Bone2D chain should end at a Skeleton2D node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "" +"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRCamera must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRController must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The controller id must not be 0 or this controller will not be bound to an " +"actual controller" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRAnchor must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The anchor id must not be 0 or this anchor will not be bound to an actual " +"anchor" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVROrigin requires an ARVRCamera child node" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Meshes: " +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Lights:" +msgstr "" + +#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp +msgid "Finishing Plot" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Lighting Meshes: " +msgstr "" + +#: scene/3d/collision_object.cpp +msgid "" +"This node has no shape, so it can't collide or interact with other objects.\n" +"Consider adding a CollisionShape or CollisionPolygon as a child to define " +"its shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "Plotting Meshes" +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Nothing is visible because meshes have not been assigned to draw passes." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + +#: scene/3d/physics_body.cpp +msgid "" +"Size changes to RigidBody (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/remote_transform.cpp +msgid "Path property must point to a valid Spatial node to work." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " +"this environment's Background Mode to Canvas (for 2D scenes)." +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "This body will be ignored until you set a mesh" +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "" +"Size changes to SoftBody will be overridden by the physics engine when " +"running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "On BlendTree node '%s', animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "Animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "In node '%s', invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Nothing connected to input '%s' of node '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "A root AnimationNode for the graph is not set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path to an AnimationPlayer node containing animations is not set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "AnimationPlayer root is not a valid node." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Raw Mode" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Add current color as a preset" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + +#: scene/gui/scroll_container.cpp +msgid "" +"ScrollContainer is intended to work with a single child control.\n" +"Use a container as child (VBox,HBox,etc), or a Control and set the custom " +"minimum size manually." +msgstr "" + +#: scene/gui/tree.cpp +msgid "(Other)" +msgstr "" + +#: scene/main/scene_tree.cpp +msgid "" +"Default Environment as specified in Project Settings (Rendering -> " +"Environment -> Default Environment) could not be loaded." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" + +#: scene/resources/visual_shader.cpp +msgid "Input" +msgstr "" + +#: scene/resources/visual_shader.cpp +msgid "None" +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid source for shader." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to function." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to uniform." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Varyings can only be assigned in vertex function." +msgstr "" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index fd3f69f1d2..bb1597a3b9 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -23,7 +23,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Chybný argument convert(), použite TYPE_* konÅ¡tanty." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Nedostatok bajtov na dekódovanie, možný chybný formát." @@ -383,8 +383,7 @@ msgstr "ZmeniÅ¥ veľkosÅ¥ výberu" msgid "Scale From Cursor" msgstr "ZmeniÅ¥ veľkosÅ¥ od kurzora" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "DuplikovaÅ¥ výber" @@ -398,11 +397,13 @@ msgid "Delete Selection" msgstr "VÅ¡etky vybrané" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "PrejsÅ¥ na Äalšà krok" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "PrejsÅ¥ na predchádzajúci krok" #: editor/animation_track_editor.cpp @@ -505,11 +506,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -542,10 +543,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -576,6 +577,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -655,7 +657,7 @@ msgid "Edit Connection: " msgstr "UpraviÅ¥ výber krivky" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -708,17 +710,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Popis:" @@ -775,9 +774,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -807,7 +807,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -866,14 +866,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1049,8 +1041,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1218,8 +1209,9 @@ msgstr "Cesta:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1289,12 +1281,17 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "VytvoriÅ¥ adresár" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "VytvoriÅ¥ adresár" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1303,13 +1300,14 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "OtvoriÅ¥ súbor" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "OtvoriÅ¥ súbor" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy @@ -1345,7 +1343,8 @@ msgid "Open a File or Directory" msgstr "OtvoriÅ¥ súbor / prieÄinok" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "UložiÅ¥" @@ -1403,8 +1402,7 @@ msgstr "PrieÄinky a Súbory:" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Súbor:" @@ -1420,24 +1418,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Zoznam tried:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Trieda:" @@ -1454,28 +1439,30 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "Filter:" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties:" +msgstr "Filter:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1506,7 +1493,12 @@ msgstr "KonÅ¡tanty:" #: editor/editor_help.cpp #, fuzzy -msgid "Description" +msgid "Class Description" +msgstr "Popis:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" msgstr "Popis:" #: editor/editor_help.cpp @@ -1521,12 +1513,13 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "Popis:" #: editor/editor_help.cpp #, fuzzy -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "Popis:" #: editor/editor_help.cpp @@ -1536,12 +1529,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "Popis:" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "Popis:" #: editor/editor_help.cpp msgid "" @@ -1549,11 +1544,55 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signály:" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "KonÅ¡tanty:" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Trieda:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1588,6 +1627,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1642,10 +1686,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1875,6 +1929,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1915,6 +1975,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1998,7 +2063,7 @@ msgstr "" #: editor/editor_node.cpp #, fuzzy -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "UložiÅ¥ súbor" #: editor/editor_node.cpp @@ -2027,7 +2092,7 @@ msgid "Undo" msgstr "Späť" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2064,6 +2129,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2171,10 +2237,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2269,21 +2331,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2424,7 +2486,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2448,7 +2510,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2460,7 +2522,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2468,6 +2530,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2486,10 +2562,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2498,7 +2570,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "VložiÅ¥" @@ -2782,6 +2855,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2817,7 +2894,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2854,29 +2931,22 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" +#, fuzzy +msgid "Open Scene(s)" +msgstr "OtvoriÅ¥ súbor(y)" #: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "OtvoriÅ¥ súbor(y)" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +msgid "Remove from favorites" +msgstr "VÅ¡etky vybrané" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -2886,11 +2956,19 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Popis:" @@ -2900,6 +2978,14 @@ msgstr "Popis:" msgid "New Resource..." msgstr "VytvoriÅ¥ adresár" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2920,24 +3006,15 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "VytvoriÅ¥ adresár" - -#: editor/filesystem_dock.cpp -msgid "Instance the selected scene(s) as child of the selected node." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Enter tree-view." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp -msgid "Search files" +msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp @@ -2946,7 +3023,7 @@ msgid "" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2963,28 +3040,22 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "Súbor:" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +#, fuzzy +msgid "Folder:" +msgstr "VytvoriÅ¥ adresár" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filter:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3001,6 +3072,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3159,18 +3234,14 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "Filter:" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3410,6 +3481,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -3784,10 +3860,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4115,6 +4187,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4175,6 +4251,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4269,6 +4349,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "VÅ¡etky vybrané" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4319,6 +4404,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4759,8 +4848,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4789,6 +4877,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4858,11 +4951,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5198,22 +5291,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5243,6 +5336,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5344,11 +5441,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5419,7 +5512,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5427,10 +5520,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5465,17 +5554,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +#, fuzzy +msgid "Search Results" +msgstr "VložiÅ¥" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5486,6 +5567,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "VÅ¡etky vybrané" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5572,11 +5658,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5593,35 +5679,30 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "PrejsÅ¥ na Äalšà krok" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "PrejsÅ¥ na predchádzajúci krok" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "VÅ¡etky vybrané" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5713,6 +5794,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5878,6 +5967,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5980,10 +6073,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6386,6 +6475,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "VÅ¡etky vybrané" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6431,23 +6525,27 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "OdstrániÅ¥ výber" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6478,7 +6576,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6494,7 +6592,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6572,6 +6670,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6580,6 +6686,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6638,6 +6748,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7095,10 +7213,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7234,10 +7348,6 @@ msgstr "VložiÅ¥" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7321,7 +7431,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7330,7 +7440,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7370,7 +7480,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7429,6 +7539,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "Popis:" @@ -7466,6 +7580,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7539,6 +7659,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Popis:" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7547,12 +7672,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Popis:" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -7703,6 +7829,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7797,19 +7927,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7841,18 +7959,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8276,11 +8382,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8557,6 +8659,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8658,11 +8764,11 @@ msgid "Search VisualScript" msgstr "VložiÅ¥" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8746,6 +8852,12 @@ msgstr "" "MusÃte nastaviÅ¥ tvar objektu CollisionShape2D aby fungoval. ProsÃm, vytvorte " "preň tvarový objekt!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8786,6 +8898,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8903,6 +9021,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8922,6 +9050,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8954,7 +9100,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9024,10 +9170,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9035,6 +9177,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9101,6 +9247,13 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Class List:" +#~ msgstr "Zoznam tried:" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "VytvoriÅ¥ adresár" + #~ msgid "Disabled" #~ msgstr "Vypnuté" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 707fc575e7..ca2e63448e 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -7,11 +7,12 @@ # Miha Komatar <miha.komatar@gmail.com>, 2018. # Simon Å ander <simon.sand3r@gmail.com>, 2017. # Yahara Octanis <yaharao55@gmail.com>, 2018. +# Tine Jozelj <tine@tjo.space>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-06-27 13:43+0000\n" -"Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n" +"PO-Revision-Date: 2018-09-10 18:23+0000\n" +"Last-Translator: Tine Jozelj <tine@tjo.space>\n" "Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" "godot/sl/>\n" "Language: sl\n" @@ -19,7 +20,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +28,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "Neveljavena vrsta argumenta za convert(), uporabite TYPE_* konstanto." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Ni dovolj pomnilnika za dekodiranje bajtov, ali neveljaven format." @@ -38,7 +39,7 @@ msgstr "" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self nemore biti uporabljen, ker instanca ni null (ni podano)" #: core/math/expression.cpp #, fuzzy @@ -55,13 +56,12 @@ msgid "Invalid named index '%s' for base type %s" msgstr "" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Neveljaven argument od tipa: " +msgstr "Neveljavni argumenti za construct '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Na klic '%s':" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -70,35 +70,31 @@ msgstr "Prosto" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Uravnoteženo" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Napaka!" +msgstr "Zrcali" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "V Animacijo Vstavi KljuÄ" +msgstr "Vstavi KljuÄ Tukaj" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Podvoji izbrano" +msgstr "Podvoji Izbran/e KljuÄ/e" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "IzbriÅ¡i Izbrano" +msgstr "IzbriÅ¡i Izbran/e KljuÄ/e" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Animacija Podvoji kljuÄe" +msgstr "Animiraj Podvojene kljuÄe" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Animacija IzbriÅ¡i kljuÄe" +msgstr "Animiraj Izbrisane kljuÄe" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" @@ -405,8 +401,7 @@ msgstr "PoveÄaj izbiro" msgid "Scale From Cursor" msgstr "PoveÄaj iz kazalca" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Podvoji izbrano" @@ -420,11 +415,13 @@ msgid "Delete Selection" msgstr "IzbriÅ¡i Izbrano" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Pojdi na naslednji korak" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Pojdi na prejÅ¡nji korak" #: editor/animation_track_editor.cpp @@ -527,11 +524,11 @@ msgstr "Ni Zadetkov" msgid "Replaced %d occurrence(s)." msgstr "Zamenjana %d ponovitev/e." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Ujemanje Velikih ÄŒrk" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Cele Besede" @@ -564,11 +561,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Približaj" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Vrstica:" @@ -601,6 +597,7 @@ msgstr "Dodaj" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -681,7 +678,7 @@ msgid "Edit Connection: " msgstr "Napaka Pri Povezavi" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -736,17 +733,14 @@ msgstr "Nedavni:" msgid "Search:" msgstr "Iskanje:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Zadetki:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Opis:" @@ -807,9 +801,10 @@ msgid "Search Replacement Resource:" msgstr "Iskanje Nadomestnih Virov:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -841,7 +836,8 @@ msgid "Error loading:" msgstr "Napaka pri nalaganju:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Nalaganje scene je spodletelo zaradi manjkajoÄih odvisnosti:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -900,14 +896,6 @@ msgstr "Spremeni Slovarsko Vrednost" msgid "Thanks from the Godot community!" msgstr "Zahvaljujemo se vam iz skupnosti Godota!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine sodelovci" @@ -1083,8 +1071,7 @@ msgid "Bus options" msgstr "Možnosti Vodila" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Podvoji" @@ -1253,8 +1240,9 @@ msgstr "Pot:" msgid "Node Name:" msgstr "Ime Gradnika:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Ime" @@ -1324,12 +1312,17 @@ msgid "Template file not found:" msgstr "Predloge ni mogoÄe najti:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Izberite Trenutno Mapo" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Datoteka Obstaja, PrepiÅ¡em?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Izberite Trenutno Mapo" +#, fuzzy +msgid "Select This Folder" +msgstr "Izberite mapo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1337,12 +1330,13 @@ msgstr "Kopiraj Pot" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Pokaži V Upravitelju Datotek" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Pokaži V Upravitelju Datotek" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1378,7 +1372,8 @@ msgid "Open a File or Directory" msgstr "Odpri Datoteko ali Mapo" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Shrani" @@ -1436,8 +1431,7 @@ msgstr "Mape & Datoteke:" msgid "Preview:" msgstr "Predogled:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Datoteka:" @@ -1453,24 +1447,11 @@ msgstr "BranjeVirov" msgid "(Re)Importing Assets" msgstr "Uvoz Dodatkov" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "IÅ¡Äi PomoÄ" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Seznam Razredov:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "IÅ¡Äi Razrede" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Vrh" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Razred:" @@ -1487,28 +1468,31 @@ msgid "Brief Description:" msgstr "Kratek Opis:" #: editor/editor_help.cpp -msgid "Members" -msgstr "ÄŒlani" +msgid "Properties" +msgstr "Lastnosti" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "ÄŒlani:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Javne Metode" +msgid "Methods" +msgstr "Metode" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Javne Metode:" +#, fuzzy +msgid "Methods:" +msgstr "Metode" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Elementi GUI Teme" +#, fuzzy +msgid "Theme Properties" +msgstr "Lastnosti" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Elementi GUI Teme:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Lastnosti" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1535,10 +1519,16 @@ msgid "Constants:" msgstr "Konstante:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Opis" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Opis:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Spletne Vaje:" @@ -1552,11 +1542,13 @@ msgstr "" "url][/color] ali [color=$color][url=$url2]zahtevate enega[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Lastnosti" +#, fuzzy +msgid "Property Descriptions" +msgstr "Opis lastnosti:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Opis lastnosti:" #: editor/editor_help.cpp @@ -1568,11 +1560,13 @@ msgstr "" "$url]prispevkom[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metode" +#, fuzzy +msgid "Method Descriptions" +msgstr "Opis Metode:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Opis Metode:" #: editor/editor_help.cpp @@ -1583,12 +1577,61 @@ msgstr "" "Trenutno ni opisa za to metodo. Pomagajte nam s [color=$color][url=" "$url]prispevkom[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "IÅ¡Äi PomoÄ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Zamenjaj Vse" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Razredi" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metode" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signali" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstante" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Properties Only" msgstr "Lastnosti" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Lastnosti" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "ÄŒlani" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Razred:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1622,6 +1665,11 @@ msgstr "Izvoz projekta ni uspelo s kodno napako %d." msgid "Error saving resource!" msgstr "Napaka pri shranjevanju virov!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Shrani Vire Kot..." @@ -1676,12 +1724,22 @@ msgstr "Te operacije ne moremo storiti brez osnovnega drevesa." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Ni mogoÄe shraniti scene. Najverjetneje odvisnosti (primeri ali dedovanja) " "ne morejo biti izpolnjene." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Knjižnice Modelov ni mogoÄe naložiti za združitev!" @@ -1934,6 +1992,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Ni mogoÄe naložiti dodatno skripto iz poti: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Ni mogoÄe naložiti dodatno skripto iz poti: '%s' Skripta ni v naÄinu orodje." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1982,6 +2048,12 @@ msgstr "IzbriÅ¡i Postavitev" msgid "Default" msgstr "Prevzeto" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "DatoteÄniSistem" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2065,7 +2137,8 @@ msgid "Save Scene" msgstr "Shrani Prizor" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Shrani vse Prizore" #: editor/editor_node.cpp @@ -2094,7 +2167,7 @@ msgid "Undo" msgstr "Razveljavi" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Ponovi" @@ -2132,6 +2205,7 @@ msgid "Quit to Project List" msgstr "Zapri na Seznam Projektov" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "RazhroÅ¡Äevalnik" @@ -2258,10 +2332,6 @@ msgstr "Upravljaj Izvozne Predloge" msgid "Help" msgstr "PomoÄ" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Razredi" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2356,24 +2426,24 @@ msgstr "Posodobi Spremembe" msgid "Disable Update Spinner" msgstr "OnemogoÄi Posodobitve Kolesca" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Nadzornik" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Uvozi" #: editor/editor_node.cpp -msgid "Node" -msgstr "Gradnik" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "DatoteÄniSistem" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Nadzornik" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Gradnik" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "RazÅ¡iri vse" @@ -2511,7 +2581,7 @@ msgstr "Okvir %" msgid "Physics Frame %" msgstr "Fizikalni Okvir %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "ÄŒas:" @@ -2535,7 +2605,7 @@ msgstr "ÄŒas" msgid "Calls" msgstr "Klici" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2547,7 +2617,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Prazen]" @@ -2555,6 +2625,20 @@ msgstr "[Prazen]" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2572,10 +2656,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2584,7 +2664,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2876,6 +2957,11 @@ msgstr "" "predpomnilnik tipa datoteke!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Priljubljene:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Ne morem se postaviti na mesto '%s', ker ni bilo najdeno v datoteÄnem " @@ -2916,7 +3002,7 @@ msgstr "Napaka pri podvajanju:" msgid "Unable to update dependencies:" msgstr "Odvisnosti ni mogoÄe posodobiti:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Ime ni na voljo" @@ -2953,22 +3039,6 @@ msgid "Duplicating folder:" msgstr "Podvajanje mape:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "RazÅ¡iri vse" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "SkrÄi vse" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Preimenuj..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Premakni V..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Odpri Prizor(e)" @@ -2977,6 +3047,16 @@ msgid "Instance" msgstr "Primer" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Priljubljene:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Odstrani iz Skupine" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Uredi Odvisnosti..." @@ -2984,11 +3064,19 @@ msgstr "Uredi Odvisnosti..." msgid "View Owners..." msgstr "Poglej Lastnike..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Preimenuj..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Podvoji..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Premakni V..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Hitro Odpri Skripto..." @@ -2998,6 +3086,16 @@ msgstr "Hitro Odpri Skripto..." msgid "New Resource..." msgstr "Shrani Vire Kot..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "RazÅ¡iri vse" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "SkrÄi vse" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3019,13 +3117,13 @@ msgstr "Ponovno Preglej DatoteÄni Sistem" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Nastavi mapo status kot Priljubljeno" +msgid "Toggle split mode" +msgstr "Preklopi NaÄin" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Izberi trenutno pod-ploÅ¡Äo v urejanju." +msgid "Search files" +msgstr "IÅ¡Äi Razrede" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." @@ -3033,15 +3131,6 @@ msgstr "" "Naredi primer iz izbranih prizorov, ki bo naslednik izbranega gradnika." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "IÅ¡Äi Razrede" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3049,7 +3138,7 @@ msgstr "" "Pregledovanje Datotek,\n" "Prosimo, PoÄakajte..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Premakni" @@ -3068,31 +3157,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d veÄ datotek" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Najdi" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Cele Besede" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Ujemanje Velikih ÄŒrk" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Ustvarite Mapo" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filtri..." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3110,6 +3190,11 @@ msgstr "PrekliÄi" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Najdi" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Zamenjaj" @@ -3274,17 +3359,14 @@ msgstr "Ponovno Uvozi" msgid "Failed to load resource." msgstr "Napaka pri nalaganju vira." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "RazÅ¡iri vse lastnosti" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "SkrÄi vse lastnosti" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3535,6 +3617,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "ZmeÅ¡aj:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3915,10 +4002,6 @@ msgid "Amount:" msgstr "KoliÄina:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "ZmeÅ¡aj:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "ZmeÅ¡aj 0:" @@ -4256,6 +4339,11 @@ msgstr "Uredi Platno Stvari" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Uredi Platno Stvari" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Uredi Platno Stvari" @@ -4321,6 +4409,11 @@ msgid "Rotate Mode" msgstr "NaÄin Vrtenja" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "NaÄin Obsega (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4420,6 +4513,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Posameznik" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4471,6 +4569,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4906,8 +5008,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4936,6 +5037,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -5005,11 +5111,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5351,22 +5457,22 @@ msgid "Paste Resource" msgstr "Prilepi Vir" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5399,6 +5505,11 @@ msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Mape ni mogoÄe ustvariti." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Mape ni mogoÄe ustvariti." @@ -5500,12 +5611,9 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "PrejÅ¡nji zavihek" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5575,18 +5683,15 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" -msgstr "" +#, fuzzy +msgid "Debug with External Editor" +msgstr "Odpri naslednji Urejevalnik" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5622,19 +5727,9 @@ msgstr "RazhroÅ¡Äevalnik" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "IÅ¡Äi PomoÄ" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "IÅ¡Äi Razrede" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5645,6 +5740,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Dodaj Funkcijo" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5731,11 +5831,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5752,20 +5852,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Pojdi na naslednji korak" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Preklopi na Zaustavitev" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5773,16 +5867,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtriraj datoteke..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Odstrani Funkcijo" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "Pojdi na Vrstico" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5876,6 +5972,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6041,6 +6145,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6143,11 +6251,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Pripni na mrežo" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Preklopi Svobodni Pregled" @@ -6550,6 +6653,11 @@ msgid "Fix Invalid Tiles" msgstr "Neveljavno ime." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "PoÄisti izbrano" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6596,25 +6704,32 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Odstrani izbrano" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "" +#, fuzzy +msgid "Rotate left" +msgstr "NaÄin Vrtenja" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "" +#, fuzzy +msgid "Rotate right" +msgstr "NaÄin Vrtenja" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Preoblikovanje" + #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Add Texture(s) to TileSet" @@ -6644,7 +6759,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6660,7 +6775,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6738,6 +6853,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Izvozi" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6746,6 +6870,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Izvozi Projekt" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6804,6 +6933,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Izvozi Projekt" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Izvozi" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7257,10 +7396,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7394,10 +7529,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Izberi Lastnost" @@ -7488,7 +7619,7 @@ msgid "Step" msgstr "Korak (s):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7497,7 +7628,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7538,7 +7669,7 @@ msgstr "" msgid "Reset" msgstr "Ponastavi PoveÄavo/PomanjÅ¡avo" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7597,6 +7728,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7633,6 +7768,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7707,6 +7848,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Odpri Nedavne" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7715,12 +7861,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Zaženi Skripto" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7873,6 +8020,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Model je prazen!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7961,19 +8113,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8005,18 +8145,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8440,11 +8568,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8723,6 +8847,10 @@ msgid "Base Type:" msgstr "Osnovni Tip:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "ÄŒlani:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Na voljo Nodes:" @@ -8825,11 +8953,11 @@ msgid "Search VisualScript" msgstr "Odstrani Gradnik VizualnaSkripta" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8919,6 +9047,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8957,6 +9091,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9074,6 +9214,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9093,6 +9243,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9125,7 +9293,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9200,10 +9368,6 @@ msgstr "Opozorilo!" msgid "Please Confirm..." msgstr "Prosimo Potrdite..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Izberite mapo" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9214,6 +9378,10 @@ msgstr "" "ali katerih izmed popup*() funkcij. Spreminjanje vidnosti za urejanje je " "sprejemljivo, vendar se bodo ob zagonu skrila." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9262,12 +9430,11 @@ msgstr "Dodaj Vnos" #: scene/resources/visual_shader.cpp msgid "None" -msgstr "" +msgstr "NiÄ" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Neveljavna velikost pisave." +msgstr "Neveljaven vir za shader." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -9281,6 +9448,56 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Približaj" + +#~ msgid "Class List:" +#~ msgstr "Seznam Razredov:" + +#~ msgid "Search Classes" +#~ msgstr "IÅ¡Äi Razrede" + +#~ msgid "Public Methods" +#~ msgstr "Javne Metode" + +#~ msgid "Public Methods:" +#~ msgstr "Javne Metode:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Elementi GUI Teme" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Elementi GUI Teme:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Lastnosti" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Nastavi mapo status kot Priljubljeno" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Izberi trenutno pod-ploÅ¡Äo v urejanju." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Cele Besede" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Ujemanje Velikih ÄŒrk" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "IÅ¡Äi Razrede" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Pripni na mrežo" + #~ msgid "Disabled" #~ msgstr "OnemogoÄen" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index aa41c3e609..1f8bbe8cfd 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -25,7 +25,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -403,8 +403,7 @@ msgstr "Увећај одабрано" msgid "Scale From Cursor" msgstr "Увећај од курÑора" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Дуплирај одабрано" @@ -418,11 +417,13 @@ msgid "Delete Selection" msgstr "Центрирај одабрано" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Идите на Ñледећи корак" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Идите на претходни корак" #: editor/animation_track_editor.cpp @@ -525,11 +526,11 @@ msgstr "Ðема подудара" msgid "Replaced %d occurrence(s)." msgstr "Замени %d појаве/а." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Подударање великих и малих Ñлова" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Целе речи" @@ -563,10 +564,10 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Увеличај" +msgid "Font Size:" +msgstr "Поглед иÑпред" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Линија:" @@ -599,6 +600,7 @@ msgstr "Додај" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -680,7 +682,7 @@ msgid "Edit Connection: " msgstr "Повезивање не уÑпешно" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -737,17 +739,14 @@ msgstr "ЧеÑте:" msgid "Search:" msgstr "Тражи:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Подударање:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "ОпиÑ:" @@ -808,9 +807,10 @@ msgid "Search Replacement Resource:" msgstr "Потражи замену за реÑурÑ:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -843,7 +843,8 @@ msgid "Error loading:" msgstr "Грешка при учитавању:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Сцена је неуÑпешно очитана због недоÑтајућих завиÑноÑти:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -902,14 +903,6 @@ msgstr "Промени вредноÑÑ‚ речника" msgid "Thanks from the Godot community!" msgstr "Хвала од Godot заједнице!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine Ñарадници" @@ -1087,8 +1080,7 @@ msgid "Bus options" msgstr "ПоÑтавке баÑа" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Дуплирај" @@ -1255,8 +1247,9 @@ msgstr "Пут:" msgid "Node Name:" msgstr "Име чвора:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Име" @@ -1328,12 +1321,17 @@ msgid "Template file not found:" msgstr "ШаблонÑка датотека није пронађена:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Одабери тренутни директоријум" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Датотека поÑтоји, препиши?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Одабери тренутни директоријум" +#, fuzzy +msgid "Select This Folder" +msgstr "Одабери овај директоријум" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1341,12 +1339,13 @@ msgstr "Копирај пут" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Покажи у менаџеру датотека" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Покажи у менаџеру датотека" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1382,7 +1381,8 @@ msgid "Open a File or Directory" msgstr "Отвори датотеку или директоријум" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Сачувај" @@ -1440,8 +1440,7 @@ msgstr "Директоријуми и датотеке:" msgid "Preview:" msgstr "Преглед:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Датотека:" @@ -1457,24 +1456,11 @@ msgstr "Скенирање извора" msgid "(Re)Importing Assets" msgstr "(Поновно) Увожење ÑредÑтава" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Потражи помоћ" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "ЛиÑта клаÑа:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Потражи клаÑе" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Врх" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "КлаÑа:" @@ -1491,28 +1477,31 @@ msgid "Brief Description:" msgstr "Кратак опиÑ:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Чланови" +msgid "Properties" +msgstr "ОÑобине" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Чланови:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Јавне методе" +msgid "Methods" +msgstr "Методе" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Јавне методе:" +#, fuzzy +msgid "Methods:" +msgstr "Методе" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Ставке теме графичког интерфејÑа" +#, fuzzy +msgid "Theme Properties" +msgstr "ОÑобине" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Ставке теме графичког интерфејÑа:" +#, fuzzy +msgid "Theme Properties:" +msgstr "ОÑобине" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1539,11 +1528,17 @@ msgid "Constants:" msgstr "КонÑтанте:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "ОпиÑ" #: editor/editor_help.cpp #, fuzzy +msgid "Class Description:" +msgstr "ОпиÑ:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Online Tutorials:" msgstr "Онлајн документација" @@ -1558,11 +1553,13 @@ msgstr "" "$color][url=$url]напиÑати једну[/url][/color]!" #: editor/editor_help.cpp -msgid "Properties" -msgstr "ОÑобине" +#, fuzzy +msgid "Property Descriptions" +msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:" #: editor/editor_help.cpp @@ -1574,11 +1571,13 @@ msgstr "" "$color][url=$url]напиÑати једну[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Методе" +#, fuzzy +msgid "Method Descriptions" +msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:" #: editor/editor_help.cpp @@ -1589,12 +1588,61 @@ msgstr "" "Тренутно нема опиÑа ове методе. Молимо помозите нама тако што ћете [color=" "$color][url=$url]напиÑати једну[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Потражи помоћ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Прикажи нормалу" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "КлаÑе" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Methods Only" +msgstr "Методе" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Сигнали" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "КонÑтанте" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "ОÑобине" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" msgstr "ОÑобине" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Чланови" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "КлаÑа:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1629,6 +1677,11 @@ msgstr "" msgid "Error saving resource!" msgstr "Грешка при чувању реÑурÑа!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Сачувај реÑÑƒÑ€Ñ ÐºÐ°Ð¾..." @@ -1682,12 +1735,22 @@ msgid "This operation can't be done without a tree root." msgstr "Ова операција Ñе не може обавити без корена дрвета." #: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "Ðе могу Ñачувати Ñцену. Вероватно завиÑноÑти ниÑу задовољене." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Ðе могу учитати MeshLibrary за Ñпајање!" @@ -1939,6 +2002,15 @@ msgid "Unable to load addon script from path: '%s'." msgstr "ÐеуÑпех при учитавању Ñкриптице додатка Ñа путем „%s“." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"ÐеуÑпех при учитавању Ñкриптице додатка Ñа путем „%s“. Скриптица није у " +"режиму алатке." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1989,6 +2061,12 @@ msgstr "Обирши раÑпоред" msgid "Default" msgstr "Уобичајено" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Покажи у менаџеру датотека" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2072,7 +2150,8 @@ msgid "Save Scene" msgstr "Сачувај Ñцену" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Сачувај Ñве Ñцене" #: editor/editor_node.cpp @@ -2101,7 +2180,7 @@ msgid "Undo" msgstr "Опозови" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Поново уради" @@ -2139,6 +2218,7 @@ msgid "Quit to Project List" msgstr "Изађи у лиÑту пројекта" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Дебаг" @@ -2267,10 +2347,6 @@ msgstr "Управљај извозним шаблонима" msgid "Help" msgstr "Помоћ" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "КлаÑе" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2365,24 +2441,24 @@ msgstr "Ðжурирај промене" msgid "Disable Update Spinner" msgstr "ИÑкључи индикатор ажурирања" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "ИнÑпектор" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Увоз" #: editor/editor_node.cpp -msgid "Node" -msgstr "Чвор" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Датотечни ÑиÑтем" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "ИнÑпектор" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Чвор" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Прошири Ñве" @@ -2520,7 +2596,7 @@ msgstr "Слика %" msgid "Physics Frame %" msgstr "Слика физике %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Време:" @@ -2546,7 +2622,7 @@ msgstr "Време:" msgid "Calls" msgstr "Позиви цртања" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2558,7 +2634,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp #, fuzzy msgid "[Empty]" msgstr "Додај празан" @@ -2567,6 +2643,20 @@ msgstr "Додај празан" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2584,10 +2674,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2596,7 +2682,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Ðалепи" @@ -2891,6 +2978,11 @@ msgstr "" "кеш(cache) типа!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Омиљене:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "ÐеуÑпех навигације у „%s“ пошто није пронађен у датотечном ÑиÑтему!" @@ -2936,7 +3028,7 @@ msgstr "Грешка при учитавању:" msgid "Unable to update dependencies:" msgstr "Ðије могуће ажурирати завиÑноÑти:\n" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Име није дато" @@ -2975,22 +3067,6 @@ msgid "Duplicating folder:" msgstr "Преименовање директоријума:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Прошири Ñве" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Умањи Ñве" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Преименуј..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Помери у..." - -#: editor/filesystem_dock.cpp #, fuzzy msgid "Open Scene(s)" msgstr "Отвори Ñцену" @@ -3000,6 +3076,16 @@ msgid "Instance" msgstr "Додај инÑтанцу" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Омиљене:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Обриши из групе" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Измени завиÑноÑти..." @@ -3007,12 +3093,20 @@ msgstr "Измени завиÑноÑти..." msgid "View Owners..." msgstr "Погледај влаÑнике..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Преименуј..." + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "Дуплирај" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Помери у..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Брзо отварање Ñкриптице..." @@ -3022,6 +3116,16 @@ msgstr "Брзо отварање Ñкриптице..." msgid "New Resource..." msgstr "Сачувај реÑÑƒÑ€Ñ ÐºÐ°Ð¾..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Прошири Ñве" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Умањи Ñве" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3043,28 +3147,19 @@ msgstr "Поново Ñкенирај датотеке" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Директоријум као омиљени" +msgid "Toggle split mode" +msgstr "Промени режим" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Сачувај тренутно измењени реÑурÑ." +msgid "Search files" +msgstr "Потражи клаÑе" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Ðаправи Ñледећу Ñцену/е као дете одабраног чвора." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Потражи клаÑе" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3072,7 +3167,7 @@ msgstr "" "Скенирање датотека,\n" "Молим Ñачекајте..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Помери" @@ -3091,31 +3186,22 @@ msgstr "Ðаправи Ñкриптицу" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "Ðађи плочицу" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Ðађи" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Целе речи" +msgid "Folder:" +msgstr "ПреÑавији линију" #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Подударање великих и малих Ñлова" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Филтери..." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3133,6 +3219,11 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Ðађи" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Замени" @@ -3299,17 +3390,14 @@ msgstr "Поново увези" msgid "Failed to load resource." msgstr "Грешка при учитавању реÑурÑа." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Прошири Ñве" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Умањи Ñве" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3560,6 +3648,11 @@ msgstr "" msgid "Snap" msgstr "Залепи" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Мешавина:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3940,10 +4033,6 @@ msgid "Amount:" msgstr "Количина:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Мешавина:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Мешавина 0:" @@ -4274,6 +4363,11 @@ msgstr "Уреди CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "Уреди CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "Уреди CanvasItem" @@ -4338,6 +4432,11 @@ msgid "Rotate Mode" msgstr "Режим ротације" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Режим Ñкалирања (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4437,6 +4536,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Врати могућноÑÑ‚ бирања деце објекта." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Синглетон" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Покажи коÑти" @@ -4490,6 +4594,10 @@ msgid "Show Viewport" msgstr "1 прозор" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Центрирај одабрано" @@ -4932,9 +5040,9 @@ msgid "Create Navigation Polygon" msgstr "Ðаправи навигациони полигон" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "ГенериÑање оÑног поравнаног граничниог оквира (AABB)" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Генериши правоугаоник видљивоÑти" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4962,6 +5070,12 @@ msgstr "ОчиÑти маÑку емиÑије" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Претвори у велика Ñлова" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "ЧеÑтице" @@ -5031,13 +5145,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "ПроцеÑор материјала типа „ParticlesMaterial“ је неопходан." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Генериши оÑно поравнан гранични оквир (AABB)" +msgid "Generating AABB" +msgstr "ГенериÑање оÑног поравнаног граничниог оквира (AABB)" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Претвори у велика Ñлова" +msgid "Generate AABB" +msgstr "Генериши оÑно поравнан гранични оквир (AABB)" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5381,22 +5494,22 @@ msgid "Paste Resource" msgstr "Ðалепи реÑурÑе" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Тип:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Учитај реÑурÑ" @@ -5433,6 +5546,11 @@ msgstr "Грешка при чувању TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "ÐеуÑпех при тражењу плочице:" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "ÐеуÑпех при тражењу плочице:" @@ -5536,11 +5654,7 @@ msgstr "Копирај пут" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "Покажи у менаџеру датотека" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "ИÑторија претходно" #: editor/plugins/script_editor_plugin.cpp @@ -5612,7 +5726,8 @@ msgid "Keep Debugger Open" msgstr "ОÑтави дебагер отвореним" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Дебагуј Ñа Ñпољашњим уредником" #: editor/plugins/script_editor_plugin.cpp @@ -5620,10 +5735,6 @@ msgid "Open Godot online documentation" msgstr "Отвори Godot онлајн документацију" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Претражи хијерархију клаÑа." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Претражи документацију." @@ -5661,21 +5772,9 @@ msgstr "Дебагер" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Потражи помоћ" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Потражи клаÑе" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Уграђене Ñкриптице Ñе могу Ñамо уређивати када је учитана Ñцена којој " -"припадају" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5686,6 +5785,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Иди на функцију..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Само реÑурÑи из датотечног ÑиÑтема Ñе могу убацити." @@ -5774,11 +5878,13 @@ msgid "Trim Trailing Whitespace" msgstr "Обриши празнине Ñа крајева" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Претвори увучени ред у размаке" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Претвори увучени ред у TAB карактере" #: editor/plugins/script_text_editor.cpp @@ -5795,36 +5901,32 @@ msgid "Remove All Breakpoints" msgstr "Обриши Ñве прекидне тачке" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Иди на Ñледећу прекудну тачку" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Иди на претходну прекидну тачку" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Претвори у велика Ñлова" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Претвори у мала Ñлова" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Ðађи претходни" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Филтрирај датотеке..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "Иди на функцију..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Иди на линију..." #: editor/plugins/script_text_editor.cpp @@ -5921,6 +6023,14 @@ msgid "Animation Key Inserted." msgstr "Ðнимациони кључ убачен." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Ðацртани објекти" @@ -6087,6 +6197,11 @@ msgid "Freelook Speed Modifier" msgstr "Брзина Ñлободног погледа" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Прикажи информације" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm дијалог" @@ -6192,11 +6307,6 @@ msgid "Tool Scale" msgstr "Ðлат Ñкалирања" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Залепи за мрежу" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Укљ./ИÑкљ. режим Ñлободног гледања" @@ -6612,6 +6722,11 @@ msgid "Fix Invalid Tiles" msgstr "Ðеважеће име." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Центрирај одабрано" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "Цртај TileMap" @@ -6659,24 +6774,31 @@ msgstr "Одабери плочицу" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Обриши одабрано" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "Ротирај 0 Ñтепени" +#, fuzzy +msgid "Rotate left" +msgstr "Режим ротације" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Ротирај 90 Ñтепени" +#, fuzzy +msgid "Rotate right" +msgstr "Ротирај полигон" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Ротирај 180 Ñтепени" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Ротирај 270 Ñтепени" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "ТранÑформација" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6707,7 +6829,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6724,7 +6846,7 @@ msgid "Merge from scene?" msgstr "Споји из Ñцене?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6807,6 +6929,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Извозни шаблони за ову платформу или ниÑу пронађени или Ñу иÑкварене:" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Извоз" + +#: editor/project_export.cpp #, fuzzy msgid "Presets" msgstr "ПоÑтавке" @@ -6816,6 +6947,11 @@ msgid "Add..." msgstr "Додај..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Извези пројекат" + +#: editor/project_export.cpp msgid "Resources" msgstr "РеÑурÑи" @@ -6879,6 +7015,16 @@ msgid "Export PCK/Zip" msgstr "Извоз PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Режим извоза:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Извоз" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Извозни шаблони за ову платформу ниÑу пронађени:" @@ -7334,10 +7480,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7471,10 +7613,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7565,7 +7703,7 @@ msgid "Step" msgstr "Корак:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7574,7 +7712,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7617,7 +7755,7 @@ msgstr "Велика Ñлова" msgid "Reset" msgstr "РеÑетуј увеличање" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Грешка" @@ -7676,6 +7814,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7712,6 +7854,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7788,6 +7936,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Отвори Godot онлајн документацију" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7796,12 +7949,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "Покрени Ñкриптицу" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7954,6 +8108,11 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Мрежа је празна!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -8042,19 +8201,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8087,18 +8234,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8531,13 +8666,8 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "ИÑпеци!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -#, fuzzy -msgid "Bake the navigation mesh." -msgstr "ИÑпеци навигациону мрежу.\n" +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8808,6 +8938,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Чланови:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8908,11 +9042,11 @@ msgid "Search VisualScript" msgstr "Потражи помоћ" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8996,6 +9130,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9034,6 +9174,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9151,6 +9297,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9170,6 +9326,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9202,7 +9376,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9276,10 +9450,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Одабери овај директоријум" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9287,6 +9457,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9355,6 +9529,91 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Увеличај" + +#~ msgid "Class List:" +#~ msgstr "ЛиÑта клаÑа:" + +#~ msgid "Search Classes" +#~ msgstr "Потражи клаÑе" + +#~ msgid "Public Methods" +#~ msgstr "Јавне методе" + +#~ msgid "Public Methods:" +#~ msgstr "Јавне методе:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Ставке теме графичког интерфејÑа" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Ставке теме графичког интерфејÑа:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "ОÑобине" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Директоријум као омиљени" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Сачувај тренутно измењени реÑурÑ." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Целе речи" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Подударање великих и малих Ñлова" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Претражи хијерархију клаÑа." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Потражи клаÑе" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Уграђене Ñкриптице Ñе могу Ñамо уређивати када је учитана Ñцена којој " +#~ "припадају" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Претвори у велика Ñлова" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Претвори у мала Ñлова" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Залепи за мрежу" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Ротирај 0 Ñтепени" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Ротирај 90 Ñтепени" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Ротирај 180 Ñтепени" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Ротирај 270 Ñтепени" + +#~ msgid "Bake!" +#~ msgstr "ИÑпеци!" + +#, fuzzy +#~ msgid "Bake the navigation mesh." +#~ msgstr "ИÑпеци навигациону мрежу.\n" + #~ msgid "Change Scalar Constant" #~ msgstr "Промени Ñкаларну конÑтанту" @@ -9679,9 +9938,6 @@ msgstr "" #~ msgid "Clear Emitter" #~ msgstr "ОчиÑти емитер" -#~ msgid "Fold Line" -#~ msgstr "ПреÑавији линију" - #~ msgid "Cannot navigate to '" #~ msgstr "Ðе могу прећи у '" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index d0458037ba..9781b261b7 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -2,14 +2,13 @@ # Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# # Milos Ponjavusic <brane@branegames.com>, 2018. -# +# BLu <blmasfon@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-15 08:41+0000\n" -"Last-Translator: Milos Ponjavusic <brane@branegames.com>\n" +"PO-Revision-Date: 2018-09-21 20:35+0000\n" +"Last-Translator: BLu <blmasfon@gmail.com>\n" "Language-Team: Serbian (latin) <https://hosted.weblate.org/projects/godot-" "engine/godot/sr_Latn/>\n" "Language: sr_Latn\n" @@ -17,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -25,7 +24,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -83,7 +82,7 @@ msgstr "Uduplaj Selekciju" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "" +msgstr "IzbriÅ¡i oznaÄeni kljuÄ(eve)" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -384,8 +383,7 @@ msgstr "Skaliraj Selekciju" msgid "Scale From Cursor" msgstr "Skaliraj od Kursora" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Uduplaj Selekciju" @@ -399,11 +397,13 @@ msgid "Delete Selection" msgstr "Uduplaj Selekciju" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "OtiÄ‘i Na Sljedeći Korak" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "OtiÄ‘i Na Prethodni Korak" #: editor/animation_track_editor.cpp @@ -506,11 +506,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -543,10 +543,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -577,6 +577,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -655,7 +656,7 @@ msgid "Edit Connection: " msgstr "Izmjeni Selekciju Krivulje" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -707,17 +708,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -774,9 +772,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -806,7 +805,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -865,14 +864,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1044,8 +1035,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1212,8 +1202,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1283,11 +1274,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1295,12 +1290,12 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1336,7 +1331,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1394,8 +1390,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1411,24 +1406,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1445,27 +1427,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1493,7 +1475,11 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" msgstr "" #: editor/editor_help.cpp @@ -1508,11 +1494,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" +msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1522,11 +1508,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" +msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1535,11 +1521,53 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Kontanta" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1573,6 +1601,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1627,10 +1660,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1858,6 +1901,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1898,6 +1947,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1979,7 +2033,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2008,7 +2062,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2045,6 +2099,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2152,10 +2207,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2249,21 +2300,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2400,7 +2451,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2424,7 +2475,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2436,7 +2487,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2444,6 +2495,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2461,10 +2526,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2473,7 +2534,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2754,6 +2816,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2789,7 +2855,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2826,39 +2892,39 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +#: editor/filesystem_dock.cpp +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2869,6 +2935,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2889,11 +2963,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2901,20 +2975,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2931,27 +2997,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Whole words" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2968,6 +3026,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3124,17 +3186,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3372,6 +3429,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3740,10 +3802,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4065,6 +4123,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4125,6 +4187,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4219,6 +4285,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4269,6 +4339,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4704,8 +4778,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4734,6 +4807,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4803,11 +4881,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5136,22 +5214,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5181,6 +5259,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5277,11 +5359,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5352,7 +5430,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5360,10 +5438,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5398,16 +5472,7 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +msgid "Search Results" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5420,6 +5485,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5506,11 +5575,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5527,35 +5596,29 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "OtiÄ‘i Na Sljedeći Korak" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "OtiÄ‘i Na Prethodni Korak" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5647,6 +5710,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5811,6 +5882,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5910,10 +5985,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6312,6 +6383,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Uduplaj Selekciju" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6357,25 +6433,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "ObriÅ¡i Selekciju" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Animacija Promjeni Transformaciju" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6403,7 +6484,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6419,7 +6500,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6495,6 +6576,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6503,6 +6592,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6561,6 +6654,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7010,10 +7111,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7147,10 +7244,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7235,7 +7328,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7244,7 +7337,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7284,7 +7377,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7343,6 +7436,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7379,6 +7476,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7449,6 +7552,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7457,11 +7564,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7611,6 +7718,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7699,19 +7810,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7743,18 +7842,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8173,11 +8260,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8447,6 +8530,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8545,11 +8632,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8627,6 +8714,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8665,6 +8758,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8782,6 +8881,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8801,6 +8910,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8833,7 +8960,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8902,10 +9029,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8913,6 +9036,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index c9f39bdd5d..7ddf0a981d 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -28,7 +28,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -404,8 +404,7 @@ msgstr "Skala urval" msgid "Scale From Cursor" msgstr "Skala FrÃ¥n Muspekare" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Duplicera urval" @@ -420,11 +419,13 @@ msgid "Delete Selection" msgstr "Duplicera urval" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "GÃ¥ Till Nästa Steg" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Ge Till FöregÃ¥ende Steg" #: editor/animation_track_editor.cpp @@ -540,12 +541,12 @@ msgstr "Inga matchningar" msgid "Replaced %d occurrence(s)." msgstr "Ersatte %d förekomst(er)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp #, fuzzy msgid "Match Case" msgstr "Matcha gemener/versaler" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Hela Ord" @@ -581,10 +582,10 @@ msgstr "Varning" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zooma In" +msgid "Font Size:" +msgstr "Vy framifrÃ¥n" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Rad:" @@ -619,6 +620,7 @@ msgstr "Lägg till" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -705,7 +707,7 @@ msgid "Edit Connection: " msgstr "Anslutningsfel" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -765,18 +767,15 @@ msgstr "Senaste:" msgid "Search:" msgstr "Sök:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp #, fuzzy msgid "Matches:" msgstr "Matchar:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Beskrivning:" @@ -846,9 +845,10 @@ msgid "Search Replacement Resource:" msgstr "Sök Ersättningsresurs:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp #, fuzzy @@ -886,7 +886,7 @@ msgstr "Fel vid laddning:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "Scenen misslyckades att ladda pÃ¥ grund av att beroenden saknas:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -955,14 +955,6 @@ msgstr "Ändra Ordboksvärde" msgid "Thanks from the Godot community!" msgstr "Tack frÃ¥n Godot-gemenskapen!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp #, fuzzy msgid "Godot Engine contributors" @@ -1170,8 +1162,7 @@ msgid "Bus options" msgstr "Buss-alternativ" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicera" @@ -1375,8 +1366,9 @@ msgstr "Sökväg:" msgid "Node Name:" msgstr "Node Namn:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Namn" @@ -1455,13 +1447,18 @@ msgstr "Mallfil hittades inte:\n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy +msgid "Select Current Folder" +msgstr "Skapa Mapp" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy msgid "File Exists, Overwrite?" msgstr "Filen finns redan, skriv över?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" -msgstr "Skapa Mapp" +msgid "Select This Folder" +msgstr "Välj en Node" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy @@ -1470,13 +1467,13 @@ msgstr "Kopiera Sökvägen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Visa I Filhanteraren" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp #, fuzzy -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "Visa I Filhanteraren" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1514,7 +1511,8 @@ msgid "Open a File or Directory" msgstr "Öppna en Fil eller Katalog" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Spara" @@ -1576,8 +1574,7 @@ msgstr "Kataloger & Filer:" msgid "Preview:" msgstr "Förhandsvisning:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Fil:" @@ -1596,26 +1593,11 @@ msgstr "ScanSources" msgid "(Re)Importing Assets" msgstr "(Om)Importerar TillgÃ¥ngar" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Sök Hjälp" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Class List:" -msgstr "Klasslista:" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Search Classes" -msgstr "Sök Klasser" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Topp" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp #, fuzzy msgid "Class:" msgstr "Klass:" @@ -1636,31 +1618,32 @@ msgstr "Kort Beskrivning:" #: editor/editor_help.cpp #, fuzzy -msgid "Members" -msgstr "Medlemmar" +msgid "Properties" +msgstr "Egenskaper" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -#, fuzzy -msgid "Members:" -msgstr "Medlemmar:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Public Methods" -msgstr "Publika Metoder" +msgid "Methods" +msgstr "Metoder" #: editor/editor_help.cpp #, fuzzy -msgid "Public Methods:" -msgstr "Publika Metoder:" +msgid "Methods:" +msgstr "Metoder" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "Egenskaper" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties:" +msgstr "Egenskaper" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -1690,11 +1673,17 @@ msgid "Constants:" msgstr "Konstanter:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Beskrivning" #: editor/editor_help.cpp #, fuzzy +msgid "Class Description:" +msgstr "Beskrivning:" + +#: editor/editor_help.cpp +#, fuzzy msgid "Online Tutorials:" msgstr "Dokumentation Online" @@ -1710,12 +1699,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Properties" -msgstr "Egenskaper" +msgid "Property Descriptions" +msgstr "Egenskapsbeskrivning:" #: editor/editor_help.cpp #, fuzzy -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "Egenskapsbeskrivning:" #: editor/editor_help.cpp @@ -1729,12 +1718,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Methods" -msgstr "Metoder" +msgid "Method Descriptions" +msgstr "Metodbeskrivning:" #: editor/editor_help.cpp #, fuzzy -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "Metodbeskrivning:" #: editor/editor_help.cpp @@ -1746,12 +1735,61 @@ msgstr "" "Det finns för närvarande ingen beskrivning för denna metod. Snälla hjälp oss " "genom att [color=$color][url=$url]bidra med en[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Sök Hjälp" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Display All" +msgstr "Ersätt Alla" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Klasser" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metoder" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "Signaler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Konstanter" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" msgstr "Egenskaper" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Egenskaper" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Medlemmar" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Klass:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1789,6 +1827,11 @@ msgstr "Projekt exporten misslyckades med följande felmeddelande %d." msgid "Error saving resource!" msgstr "Fel vid sparande av resurs!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Spara Resurs Som..." @@ -1851,6 +1894,12 @@ msgid "This operation can't be done without a tree root." msgstr "Ã…tgärden kan inte göras utan en trädrot." #: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " @@ -1859,6 +1908,10 @@ msgstr "" "Kunde inte spara scenen. Förmodligen kunde inte beroenden (instanser) " "uppfyllas." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Can't load MeshLibrary for merging!" @@ -2152,6 +2205,15 @@ msgstr "Kunde inte ladda addon script frÃ¥n sökväg: '%s'" #: editor/editor_node.cpp #, fuzzy msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Kunde inte ladda addon script frÃ¥n sökväg: '%s' Skript är inte i " +"verktygsläge." + +#: editor/editor_node.cpp +#, fuzzy +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Kunde inte ladda addon script frÃ¥n sökväg: '%s' Bastyp är inte EditorPlugin." @@ -2205,6 +2267,12 @@ msgstr "Ta bort Layout" msgid "Default" msgstr "Standard" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Visa i Filsystemet" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2294,7 +2362,8 @@ msgid "Save Scene" msgstr "Spara Scen" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Spara alla Scener" #: editor/editor_node.cpp @@ -2326,7 +2395,7 @@ msgid "Undo" msgstr "Ã…ngra" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #, fuzzy msgid "Redo" msgstr "Ã…ngra" @@ -2367,6 +2436,7 @@ msgid "Quit to Project List" msgstr "Avsluta till Projektlistan" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp #, fuzzy msgid "Debug" msgstr "Debugga" @@ -2477,11 +2547,6 @@ msgstr "" msgid "Help" msgstr "Hjälp" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Classes" -msgstr "Klasser" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2582,26 +2647,26 @@ msgstr "Uppdatera Ändringar" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -#, fuzzy -msgid "Inspector" -msgstr "Inspektör" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Importera" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "" #: editor/editor_node.cpp #, fuzzy +msgid "Inspector" +msgstr "Inspektör" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_node.cpp +#, fuzzy msgid "Expand Bottom Panel" msgstr "Expandera alla" @@ -2741,7 +2806,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Tid:" @@ -2766,7 +2831,7 @@ msgstr "Tid:" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp #, fuzzy msgid "On" msgstr "PÃ¥" @@ -2779,7 +2844,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2788,6 +2853,20 @@ msgstr "" msgid "Assign.." msgstr "Tilldela" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2806,11 +2885,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy -msgid "Show in File System" -msgstr "Visa i Filsystemet" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2819,7 +2893,8 @@ msgstr "Visa i Filsystemet" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Klistra in" @@ -3128,6 +3203,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Favoriter:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -3166,7 +3246,7 @@ msgstr "Fel vid laddning:" msgid "Unable to update dependencies:" msgstr "Scen '%s' har trasiga beroenden:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -3209,32 +3289,23 @@ msgstr "Byter namn pÃ¥ mappen:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Expand all" -msgstr "Expandera alla" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "Byt namn..." +msgid "Open Scene(s)" +msgstr "Öppna Scen" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To..." -msgstr "Flytta Till..." +msgid "Instance" +msgstr "Instans" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "Öppna Scen" +msgid "Add to favorites" +msgstr "Favoriter:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Instance" -msgstr "Instans" +msgid "Remove from favorites" +msgstr "Ta bort frÃ¥n Grupp" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3245,6 +3316,11 @@ msgstr "" msgid "View Owners..." msgstr "Visa Ägare..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "Byt namn..." + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." @@ -3252,6 +3328,11 @@ msgstr "Duplicera" #: editor/filesystem_dock.cpp #, fuzzy +msgid "Move To..." +msgstr "Flytta Till..." + +#: editor/filesystem_dock.cpp +#, fuzzy msgid "New Script..." msgstr "Nytt Skript" @@ -3260,6 +3341,16 @@ msgstr "Nytt Skript" msgid "New Resource..." msgstr "Spara Resurs Som..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Expandera alla" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Stäng Alla" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3281,13 +3372,13 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Växla Favorit" +msgid "Toggle split mode" +msgstr "Växla Läge" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Skapa Mapp" +msgid "Search files" +msgstr "Sök Klasser" #: editor/filesystem_dock.cpp #, fuzzy @@ -3295,21 +3386,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "Instansiera valda scen(er) som barn till vald Node." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Sök Klasser" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Flytta" @@ -3328,31 +3410,22 @@ msgstr "Skapa Skript" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "%d fler filer" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Hitta" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Hela Ord" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Matcha gemener/versaler" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Skapa Mapp" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "Filtrera noder" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3373,6 +3446,11 @@ msgstr "Avbryt" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Hitta" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Ersätt" @@ -3542,19 +3620,15 @@ msgstr "" msgid "Failed to load resource." msgstr "Misslyckades att ladda resurs." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp #, fuzzy -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "Expandera alla" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "Expandera alla" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3808,6 +3882,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -4200,10 +4279,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4540,6 +4615,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4603,6 +4682,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Växla Läge" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4700,6 +4784,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Ã…terställer objektets barns egenskap att väljas." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Singleton" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4750,6 +4839,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -5203,8 +5296,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5234,6 +5326,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp #, fuzzy +msgid "Convert to CPUParticles" +msgstr "Konvertera till Versaler" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "Particles" msgstr "Partiklar" @@ -5304,13 +5402,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Konvertera till Versaler" +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5646,11 +5743,6 @@ msgid "Paste Resource" msgstr "Klistra in Resurs" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp #, fuzzy msgid "Instance:" @@ -5658,12 +5750,17 @@ msgstr "Instans:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp #, fuzzy msgid "Type:" msgstr "Typ:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Ladda Resurs" @@ -5699,6 +5796,11 @@ msgstr "Fel vid sparande av TileSet!" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Fel - Kunde inte skapa Skript i filsystemet." + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Fel - Kunde inte skapa Skript i filsystemet." @@ -5810,12 +5912,8 @@ msgstr "Kopiera Sökvägen" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "Visa i Filsystemet" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +msgid "History Previous" +msgstr "FöregÃ¥ende flik" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5891,7 +5989,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5899,10 +5997,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5941,19 +6035,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Sök Hjälp" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Sök Klasser" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5964,6 +6048,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Funktion:" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -6057,12 +6146,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "Konvertera till Versaler" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "Konvertera till %s" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -6079,22 +6170,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Uppercase" -msgstr "Konvertera till Versaler" +msgid "Go to Next Breakpoint" +msgstr "GÃ¥ Till Nästa Steg" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Lowercase" -msgstr "Konvertera till Gemener" +msgid "Go to Previous Breakpoint" +msgstr "Ge Till FöregÃ¥ende Steg" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -6102,16 +6185,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Filtrera Filer..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Ta bort Funktion" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "GÃ¥ till Rad" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -6212,6 +6297,15 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Pitch" +msgstr "Växla" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6392,6 +6486,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Visa Information" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6498,10 +6597,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6919,6 +7014,11 @@ msgid "Fix Invalid Tiles" msgstr "Ogiltigt namn." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Rensa Urval" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6967,24 +7067,29 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Ta bort Urval" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "Rotera 90 grader" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "Rotera 180 grader" +msgid "Flip vertically" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "Rotera 270 grader" +#, fuzzy +msgid "Clear transform" +msgstr "Transformera" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -7014,7 +7119,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -7030,7 +7135,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -7110,6 +7215,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "Exportera" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -7118,6 +7232,11 @@ msgid "Add..." msgstr "Lägg till..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Exportera Projekt" + +#: editor/project_export.cpp msgid "Resources" msgstr "Resurser" @@ -7179,6 +7298,16 @@ msgid "Export PCK/Zip" msgstr "Exportera PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Exportera Projekt" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Exportera" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7664,10 +7793,6 @@ msgstr "" msgid "General" msgstr "Allmänt" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7809,10 +7934,6 @@ msgstr "Välj en Node" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7902,7 +8023,7 @@ msgid "Step" msgstr "Steg (s):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7911,7 +8032,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7954,7 +8075,7 @@ msgstr "Versaler" msgid "Reset" msgstr "Ã…terställ Zoom" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp #, fuzzy msgid "Error" msgstr "Fel" @@ -8017,6 +8138,11 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Instance Child Scene" +msgstr "Instansiera Barn-Scen" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -8059,6 +8185,12 @@ msgid "Save New Scene As..." msgstr "Spara Ny Scen Som..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Editable Children" msgstr "Redigerbara Barn" @@ -8140,6 +8272,11 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Open documentation" +msgstr "Öppna Senaste" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Delete Node(s)" msgstr "Ta bort Nod(er)" @@ -8150,13 +8287,13 @@ msgstr "Lägg till Barn-Node" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Instance Child Scene" -msgstr "Instansiera Barn-Scen" +msgid "Change Type" +msgstr "Ändra Typ" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Change Type" -msgstr "Ändra Typ" +msgid "Extend Script" +msgstr "Öppna Skript" #: editor/scene_tree_dock.cpp #, fuzzy @@ -8321,6 +8458,11 @@ msgid "Path is empty" msgstr "Sökvägen är tom" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Sökvägen är tom" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -8417,22 +8559,8 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Varning" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Fel:" - -#: editor/script_editor_debugger.cpp -#, fuzzy -msgid "Source:" -msgstr "Källa:" - -#: editor/script_editor_debugger.cpp -#, fuzzy -msgid "Function:" -msgstr "Funktion:" +msgid "Stack Trace" +msgstr "" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8466,20 +8594,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy -msgid "Variable" -msgstr "Variabel" - -#: editor/script_editor_debugger.cpp -#, fuzzy -msgid "Errors:" -msgstr "Fel:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8926,11 +9040,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -9218,6 +9328,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Members:" +msgstr "Medlemmar:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Available Nodes:" msgstr "Tillgängliga Noder:" @@ -9323,11 +9438,11 @@ msgid "Search VisualScript" msgstr "Fäst Skript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9418,6 +9533,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9462,6 +9583,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp #, fuzzy msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9593,6 +9720,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9612,6 +9749,28 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D fungerar bara när den är satt som ett barn till en Path2D-Node." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D fungerar bara när den är satt som ett barn till en Path2D-Node." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9644,7 +9803,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9721,11 +9880,6 @@ msgstr "Varning!" msgid "Please Confirm..." msgstr "Vänligen Bekräfta..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "Välj en Node" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9733,6 +9887,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9804,6 +9962,92 @@ msgid "Varyings can only be assigned in vertex function." msgstr "" #, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zooma In" + +#, fuzzy +#~ msgid "Class List:" +#~ msgstr "Klasslista:" + +#, fuzzy +#~ msgid "Search Classes" +#~ msgstr "Sök Klasser" + +#, fuzzy +#~ msgid "Public Methods" +#~ msgstr "Publika Metoder" + +#, fuzzy +#~ msgid "Public Methods:" +#~ msgstr "Publika Metoder:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Egenskaper" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Växla Favorit" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Skapa Mapp" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Hela Ord" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Matcha gemener/versaler" + +#~ msgid "Ok" +#~ msgstr "Ok" + +#, fuzzy +#~ msgid "Show In File System" +#~ msgstr "Visa i Filsystemet" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Sök Klasser" + +#, fuzzy +#~ msgid "Convert To Uppercase" +#~ msgstr "Konvertera till Versaler" + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "Konvertera till Gemener" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Rotera 90 grader" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Rotera 180 grader" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Rotera 270 grader" + +#~ msgid "Warning" +#~ msgstr "Varning" + +#~ msgid "Error:" +#~ msgstr "Fel:" + +#, fuzzy +#~ msgid "Source:" +#~ msgstr "Källa:" + +#, fuzzy +#~ msgid "Variable" +#~ msgstr "Variabel" + +#, fuzzy +#~ msgid "Errors:" +#~ msgstr "Fel:" + +#, fuzzy #~ msgid "Change Comment" #~ msgstr "Ändra Kommentar" @@ -9933,10 +10177,6 @@ msgstr "" #~ msgstr "Sekvens" #, fuzzy -#~ msgid "Switch" -#~ msgstr "Växla" - -#, fuzzy #~ msgid "Iterator" #~ msgstr "Iterator" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index c3084b15ba..b6a30c7fe7 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -24,7 +24,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -383,8 +383,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -398,11 +397,11 @@ msgid "Delete Selection" msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -505,11 +504,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -542,10 +541,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -576,6 +575,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -654,7 +654,7 @@ msgid "Edit Connection: " msgstr "தேரà¯à®µà¯ வளைவை [Selection Curve] திரà¯à®¤à¯à®¤à¯" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -706,17 +706,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -773,9 +770,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -805,7 +803,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -864,14 +862,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1043,8 +1033,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1211,8 +1200,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1282,11 +1272,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1294,12 +1288,12 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1335,7 +1329,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1393,8 +1388,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1410,24 +1404,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1444,27 +1425,27 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1492,7 +1473,11 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" +msgid "Class Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class Description:" msgstr "" #: editor/editor_help.cpp @@ -1507,11 +1492,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" +msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1521,11 +1506,11 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" +msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Description:" +msgid "Method Descriptions:" msgstr "" #: editor/editor_help.cpp @@ -1534,11 +1519,52 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1572,6 +1598,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1626,10 +1657,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1857,6 +1898,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1897,6 +1944,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -1978,7 +2030,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2007,7 +2059,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2044,6 +2096,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2151,10 +2204,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2248,21 +2297,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2399,7 +2448,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2423,7 +2472,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2435,7 +2484,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2443,6 +2492,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2460,10 +2523,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2472,7 +2531,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2753,6 +2813,10 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2788,7 +2852,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2825,27 +2889,19 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "Remove from favorites" msgstr "" #: editor/filesystem_dock.cpp @@ -2856,12 +2912,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "அசைவூடà¯à®Ÿà¯ போலிபசà¯à®šà®¾à®µà®¿à®•ளà¯" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp msgid "New Script..." msgstr "" @@ -2869,6 +2933,14 @@ msgstr "" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2889,11 +2961,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2901,20 +2973,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2931,27 +2995,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2968,6 +3024,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3124,17 +3184,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3370,6 +3425,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3737,10 +3797,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4062,6 +4118,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4122,6 +4182,10 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4216,6 +4280,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4266,6 +4334,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4700,8 +4772,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4730,6 +4801,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4799,11 +4875,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5130,22 +5206,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5175,6 +5251,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5271,11 +5351,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5346,7 +5422,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5354,10 +5430,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5392,16 +5464,7 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" +msgid "Search Results" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5413,6 +5476,10 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5499,11 +5566,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5520,19 +5587,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5540,15 +5599,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5640,6 +5699,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5804,6 +5871,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5903,10 +5974,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6304,6 +6371,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6349,25 +6421,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "உரà¯à®®à®¾à®±à¯à®±à®®à¯ அசைவூடà¯à®Ÿà¯" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6395,7 +6472,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6411,7 +6488,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6487,6 +6564,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6495,6 +6580,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6553,6 +6642,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7001,10 +7098,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7138,10 +7231,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7226,7 +7315,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7235,7 +7324,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7275,7 +7364,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7334,6 +7423,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7370,6 +7463,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7440,6 +7539,10 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7448,11 +7551,11 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" +msgid "Extend Script" msgstr "" #: editor/scene_tree_dock.cpp @@ -7602,6 +7705,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7690,19 +7797,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7734,18 +7829,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8164,11 +8247,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8438,6 +8517,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8536,11 +8619,11 @@ msgid "Search VisualScript" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8618,6 +8701,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8656,6 +8745,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8773,6 +8868,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8792,6 +8897,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8824,7 +8947,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8893,10 +9016,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8904,6 +9023,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" diff --git a/editor/translations/th.po b/editor/translations/th.po index 7828977638..a8661d6968 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -25,7 +25,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "ตัวà¹à¸›à¸£à¹ƒà¸™ convert() ผิดพลาด ใช้ค่าคงที่ TYPE_* เท่านั้น" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ไบต์ไม่ครบหรืà¸à¸œà¸´à¸”รูปà¹à¸šà¸š ไม่สามารถà¹à¸›à¸¥à¸‡à¸„่าได้" @@ -407,8 +407,7 @@ msgstr "ปรับà¸à¸±à¸•ราส่วนเวลาคีย์ที่ msgid "Scale From Cursor" msgstr "ปรับà¸à¸±à¸•ราส่วนเวลาตามเคà¸à¸£à¹Œà¹€à¸‹à¸à¸£à¹Œ" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "ทำซ้ำที่เลืà¸à¸" @@ -422,11 +421,13 @@ msgid "Delete Selection" msgstr "ลบสิ่งที่เลืà¸à¸" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "ถัดไป" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/animation_track_editor.cpp @@ -529,11 +530,11 @@ msgstr "ไม่พบ" msgid "Replaced %d occurrence(s)." msgstr "à¹à¸—นที่à¹à¸¥à¹‰à¸§ %d ครั้ง" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "ตรงตามà¸à¸±à¸à¸©à¸£à¸žà¸´à¸¡à¸žà¹Œà¹€à¸¥à¹‡à¸-ใหà¸à¹ˆ" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "ทั้งคำ" @@ -568,10 +569,10 @@ msgstr "คำเตืà¸à¸™" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "ซูม (%):" +msgid "Font Size:" +msgstr "ขนาดฟà¸à¸™à¸•์ต้นฉบับ:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "บรรทัด:" @@ -602,6 +603,7 @@ msgstr "เพิ่ม" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -683,7 +685,7 @@ msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "ยืนยันà¸à¸²à¸£à¸£à¸±à¸™à¹‚ปรเจà¸à¸•์มาà¸à¸à¸§à¹ˆà¸² 1 โปรเจà¸à¸•์?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -738,17 +740,14 @@ msgstr "ล่าสุด:" msgid "Search:" msgstr "ค้นหา:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "พบ:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "รายละเà¸à¸µà¸¢à¸”:" @@ -809,9 +808,10 @@ msgid "Search Replacement Resource:" msgstr "ค้นหารีซà¸à¸£à¹Œà¸ªà¸¡à¸²à¹à¸—นที่:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -843,7 +843,8 @@ msgid "Error loading:" msgstr "ผิดพลาดขณะโหลด:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "โหลดฉาà¸à¹„ม่ได้เนื่à¸à¸‡à¸ˆà¸²à¸à¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸ªà¸¹à¸à¸«à¸²à¸¢:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -902,14 +903,6 @@ msgstr "à¹à¸à¹‰à¹„ขค่าดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µ" msgid "Thanks from the Godot community!" msgstr "ขà¸à¸‚à¸à¸šà¸„ุณจาà¸à¸Šà¸¸à¸¡à¸Šà¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "ตà¸à¸¥à¸‡" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "ผู้ช่วยพัฒนา Godot Engine" @@ -1084,8 +1077,7 @@ msgid "Bus options" msgstr "ตัวเลืà¸à¸ Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ทำซ้ำ" @@ -1252,8 +1244,9 @@ msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡:" msgid "Node Name:" msgstr "ชื่à¸à¹‚หนด:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "ชื่à¸" @@ -1323,12 +1316,17 @@ msgid "Template file not found:" msgstr "ไม่พบà¹à¸¡à¹ˆà¹à¸šà¸š:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "เลืà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "มีไฟล์นี้à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§ จะเขียนทับหรืà¸à¹„ม่?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "เลืà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" +#, fuzzy +msgid "Select This Folder" +msgstr "เลืà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¸™à¸µà¹‰" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1336,12 +1334,13 @@ msgstr "คัดลà¸à¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "à¹à¸ªà¸”งในตัวจัดà¸à¸²à¸£à¹„ฟล์" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "à¹à¸ªà¸”งในตัวจัดà¸à¸²à¸£à¹„ฟล์" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1377,7 +1376,8 @@ msgid "Open a File or Directory" msgstr "เปิดไฟล์หรืà¸à¹‚ฟลเดà¸à¸£à¹Œ" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "บันทึà¸" @@ -1435,8 +1435,7 @@ msgstr "ไฟล์à¹à¸¥à¸°à¹‚ฟลเดà¸à¸£à¹Œ:" msgid "Preview:" msgstr "ตัวà¸à¸¢à¹ˆà¸²à¸‡:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "ไฟล์:" @@ -1452,24 +1451,11 @@ msgstr "สà¹à¸à¸™à¸•้นฉบับ" msgid "(Re)Importing Assets" msgstr "นำเข้าทรัพยาà¸à¸£(à¸à¸µà¸à¸„รั้ง)" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "ค้นหาในคู่มืà¸" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "รายชื่à¸à¸„ลาส:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "ค้นหาคลาส" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "บนสุด" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "คลาส:" @@ -1486,28 +1472,31 @@ msgid "Brief Description:" msgstr "รายละเà¸à¸µà¸¢à¸”:" #: editor/editor_help.cpp -msgid "Members" -msgstr "ตัวà¹à¸›à¸£" +msgid "Properties" +msgstr "คุณสมบัติ" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "ตัวà¹à¸›à¸£:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "คุณสมบัติ:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "เมท็à¸à¸”" +msgid "Methods" +msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "เมท็à¸à¸”:" +#, fuzzy +msgid "Methods:" +msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "ตัวà¹à¸›à¸£à¸˜à¸µà¸¡" +#, fuzzy +msgid "Theme Properties" +msgstr "คุณสมบัติ" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "ตัวà¹à¸›à¸£à¸˜à¸µà¸¡:" +#, fuzzy +msgid "Theme Properties:" +msgstr "คุณสมบัติ:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1534,10 +1523,16 @@ msgid "Constants:" msgstr "ค่าคงที่:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "รายละเà¸à¸µà¸¢à¸”" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "รายละเà¸à¸µà¸¢à¸”:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "สà¸à¸™à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸à¸à¸™à¹„ลน์:" @@ -1551,11 +1546,13 @@ msgstr "" "color] หรืภ[color=$color][url=$url2]ขà¸à¹ƒà¸«à¹‰à¸ˆà¸±à¸”ทำ[/url][/color]" #: editor/editor_help.cpp -msgid "Properties" -msgstr "คุณสมบัติ" +#, fuzzy +msgid "Property Descriptions" +msgstr "รายละเà¸à¸µà¸¢à¸”ตัวà¹à¸›à¸£:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "รายละเà¸à¸µà¸¢à¸”ตัวà¹à¸›à¸£:" #: editor/editor_help.cpp @@ -1565,11 +1562,13 @@ msgid "" msgstr "คุณสมบัตินี้ยังไม่มีคำà¸à¸˜à¸´à¸šà¸²à¸¢ โปรดช่วย[color=$color][url=$url]à¹à¸à¹‰à¹„ข[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" +#, fuzzy +msgid "Method Descriptions" +msgstr "รายละเà¸à¸µà¸¢à¸”เมท็à¸à¸”:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "รายละเà¸à¸µà¸¢à¸”เมท็à¸à¸”:" #: editor/editor_help.cpp @@ -1578,12 +1577,61 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "เมท็à¸à¸”นี้ยังไม่มีคำà¸à¸˜à¸´à¸šà¸²à¸¢ โปรดช่วย[color=$color][url=$url]à¹à¸à¹‰à¹„ข[/url][/color]!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "ค้นหาในคู่มืà¸" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "à¹à¸ªà¸”งปà¸à¸•ิ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "คลาส" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "สัà¸à¸à¸²à¸“" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "ค่าคงที่" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Properties Only" +msgstr "คุณสมบัติ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "คุณสมบัติ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "ตัวà¹à¸›à¸£" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "คลาส:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "คุณสมบัติ:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "à¸à¸³à¸«à¸™à¸”" @@ -1617,6 +1665,11 @@ msgstr "" msgid "Error saving resource!" msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¸œà¸´à¸”พลาด!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "ตà¸à¸¥à¸‡" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¹€à¸›à¹‡à¸™..." @@ -1671,10 +1724,20 @@ msgstr "ทำไม่ได้ถ้าไม่มีฉาà¸" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "บันทึà¸à¸‰à¸²à¸à¹„ม่ได้ à¸à¸²à¸ˆà¸ˆà¸°à¸¡à¸µà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¹„ม่สมบูรณ์ (à¸à¸´à¸™à¸ªà¹à¸•นซ์หรืà¸à¸à¸²à¸£à¸ªà¸·à¸šà¸—à¸à¸”)" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "โหลด MeshLibrary เพื่à¸à¸£à¸§à¸¡à¹„ม่ได้!" @@ -1917,6 +1980,13 @@ msgid "Unable to load addon script from path: '%s'." msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '%s'" #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '%s' ไม่ใช่สคริปต์ tool" + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "ไม่สามารถโหลดสคริปต์จาà¸: '%s' ไม่ได้สืบทà¸à¸”จาภEditorPlugin" @@ -1962,6 +2032,12 @@ msgstr "ลบเลย์เà¸à¸²à¸•์" msgid "Default" msgstr "ค่าเริ่มต้น" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "เปิดในตัวจัดà¸à¸²à¸£à¹„ฟล์" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2045,7 +2121,8 @@ msgid "Save Scene" msgstr "บันทึà¸à¸‰à¸²à¸" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "บันทึà¸à¸—ุà¸à¸‰à¸²à¸" #: editor/editor_node.cpp @@ -2074,7 +2151,7 @@ msgid "Undo" msgstr "เลิà¸à¸—ำ" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "ทำซ้ำ" @@ -2112,6 +2189,7 @@ msgid "Quit to Project List" msgstr "ปิดà¹à¸¥à¸°à¸à¸¥à¸±à¸šà¸ªà¸¹à¹ˆà¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸à¹‚ปรเจà¸à¸•์" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "à¹à¸à¹‰à¸ˆà¸¸à¸”บà¸à¸žà¸£à¹ˆà¸à¸‡" @@ -2228,10 +2306,6 @@ msgstr "จัดà¸à¸²à¸£à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" msgid "Help" msgstr "ช่วยเหลืà¸" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "คลาส" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2326,24 +2400,24 @@ msgstr "à¸à¸±à¸žà¹€à¸”ทเมื่à¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡" msgid "Disable Update Spinner" msgstr "ปิดà¸à¸²à¸£à¸à¸±à¸žà¹€à¸”ทตัวหมุน" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "คุณสมบัติ" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "นำเข้า" #: editor/editor_node.cpp -msgid "Node" -msgstr "โหนด" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "ระบบไฟล์" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "คุณสมบัติ" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "โหนด" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "ขยายโฟลเดà¸à¸£à¹Œ" @@ -2481,7 +2555,7 @@ msgstr "% ขà¸à¸‡à¹€à¸Ÿà¸£à¸¡" msgid "Physics Frame %" msgstr "% ขà¸à¸‡à¹€à¸Ÿà¸£à¸¡à¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "เวลา:" @@ -2505,7 +2579,7 @@ msgstr "เวลา" msgid "Calls" msgstr "จำนวนครั้ง" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "เปิด" @@ -2518,7 +2592,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "บิต %d, ค่า %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[ว่างเปล่า]" @@ -2527,6 +2601,20 @@ msgstr "[ว่างเปล่า]" msgid "Assign.." msgstr "ระบุ" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "เลืà¸à¸ Viewport" @@ -2544,10 +2632,6 @@ msgstr "%s ใหม่" msgid "Make Unique" msgstr "ไม่ใช้ร่วมà¸à¸±à¸šà¸§à¸±à¸•ถุà¸à¸·à¹ˆà¸™" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "เปิดในตัวจัดà¸à¸²à¸£à¹„ฟล์" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2556,7 +2640,8 @@ msgstr "เปิดในตัวจัดà¸à¸²à¸£à¹„ฟล์" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "วาง" @@ -2845,6 +2930,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "เปิดไฟล์ file_type_cache.cch เพื่à¸à¹€à¸‚ียนไม่ได้ จะไม่บันทึà¸à¹à¸„ชขà¸à¸‡à¸Šà¸™à¸´à¸”ไฟล์!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "ที่ชื่นชà¸à¸š:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "ไม่สามารถไปยัง '%s' เนื่à¸à¸‡à¸ˆà¸²à¸à¹„ม่พบในระบบ!" @@ -2882,7 +2972,7 @@ msgstr "ผิดพลาดขณะทำซ้ำ:" msgid "Unable to update dependencies:" msgstr "ไม่สามารถà¸à¸±à¸žà¹€à¸”ทà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "ไม่ได้ระบุชื่à¸" @@ -2919,22 +3009,6 @@ msgid "Duplicating folder:" msgstr "ทำซ้ำโฟลเดà¸à¸£à¹Œ:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "ขยายโฟลเดà¸à¸£à¹Œ" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "ยุบโฟลเดà¸à¸£à¹Œ" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "เปลี่ยนชื่à¸..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "ย้ายไป..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "เปิดไฟล์ฉาà¸" @@ -2943,6 +3017,16 @@ msgid "Instance" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "ที่ชื่นชà¸à¸š:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "ลบà¸à¸à¸à¸ˆà¸²à¸à¸à¸¥à¸¸à¹ˆà¸¡" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡..." @@ -2950,11 +3034,19 @@ msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡..." msgid "View Owners..." msgstr "ดูเจ้าขà¸à¸‡..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "เปลี่ยนชื่à¸..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "ทำซ้ำ..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "ย้ายไป..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "สคริปต์ใหม่" @@ -2964,6 +3056,16 @@ msgstr "สคริปต์ใหม่" msgid "New Resource..." msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¹€à¸›à¹‡à¸™..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "ขยายโฟลเดà¸à¸£à¹Œ" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "ยุบโฟลเดà¸à¸£à¹Œ" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2985,28 +3087,19 @@ msgstr "สà¹à¸à¸™à¸£à¸°à¸šà¸šà¹„ฟล์ใหม่" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "สลับà¸à¸²à¸£à¹€à¸›à¹‡à¸™à¹‚ฟลเดà¸à¸£à¹Œà¸—ี่ชื่นชà¸à¸š" +msgid "Toggle split mode" +msgstr "สลับโหมด" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "เลืà¸à¸à¹„ทล์ย่à¸à¸¢à¸—ี่à¸à¸³à¸¥à¸±à¸‡à¸›à¸£à¸±à¸šà¹à¸•่ง" +msgid "Search files" +msgstr "ค้นหาคลาส" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸—ี่เลืà¸à¸à¹ƒà¸«à¹‰à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸à¸‚à¸à¸‡à¹‚หนดที่เลืà¸à¸" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "ค้นหาคลาส" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3014,7 +3107,7 @@ msgstr "" "à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¹„ฟล์,\n" "à¸à¸£à¸¸à¸“ารà¸..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "ย้าย" @@ -3033,32 +3126,23 @@ msgstr "สร้างสคริปต์" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "ค้นหา tile" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "ค้นหา" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "ทั้งคำ" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "ตรงตามà¸à¸±à¸à¸©à¸£à¸žà¸´à¸¡à¸žà¹Œà¹€à¸¥à¹‡à¸-ใหà¸à¹ˆ" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "ซ่à¸à¸™" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " -msgstr "ตัวà¸à¸£à¸à¸‡:" +msgid "Filters:" +msgstr "ตัวà¸à¸£à¸à¸‡" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3075,6 +3159,11 @@ msgstr "ยà¸à¹€à¸¥à¸´à¸" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "ค้นหา" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "à¹à¸—นที่" @@ -3239,17 +3328,14 @@ msgstr "นำเข้าใหม่" msgid "Failed to load resource." msgstr "โหลดรีซà¸à¸£à¹Œà¸ªà¹„ม่ได้" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "ตà¸à¸¥à¸‡" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "ขยายคุณสมบัติทั้งหมด" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "ยุบคุณสมบัติทั้งหมด" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3503,6 +3589,11 @@ msgstr "" msgid "Snap" msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "ผสม:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3885,10 +3976,6 @@ msgid "Amount:" msgstr "จำนวน:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "ผสม:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "ผสม 0:" @@ -4222,6 +4309,11 @@ msgstr "à¹à¸à¹‰à¹„ข CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "à¹à¸à¹‰à¹„ข CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "à¹à¸à¹‰à¹„ข CanvasItem" @@ -4285,6 +4377,11 @@ msgid "Rotate Mode" msgstr "โหมดหมุน" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "โหมดปรับขนาด (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4384,6 +4481,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "ทำให้เลืà¸à¸à¹‚หนดลูà¸à¹„ด้เหมืà¸à¸™à¹€à¸”ิม" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "โครงà¸à¸£à¸°à¸”ูà¸..." + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "à¹à¸ªà¸”งà¸à¸£à¸°à¸”ูà¸" @@ -4437,6 +4539,10 @@ msgid "Show Viewport" msgstr "1 มุมมà¸à¸‡" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "ให้สิ่งที่เลืà¸à¸à¸à¸¢à¸¹à¹ˆà¸à¸¥à¸²à¸‡à¸ˆà¸" @@ -4877,9 +4983,9 @@ msgid "Create Navigation Polygon" msgstr "สร้างรูปทรงนำทาง" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "สร้างเส้นà¸à¸£à¸à¸š" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "สร้างà¸à¸£à¸à¸šà¸à¸²à¸£à¸¡à¸à¸‡à¹€à¸«à¹‡à¸™" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4907,6 +5013,12 @@ msgstr "ลบ Mask à¸à¸²à¸£à¸›à¸¥à¹ˆà¸à¸¢" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์ใหà¸à¹ˆ" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "à¸à¸™à¸¸à¸ าค" @@ -4976,13 +5088,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "ต้à¸à¸‡à¸à¸²à¸£à¸§à¸±à¸ªà¸”ุประเภท 'ParticlesMaterial'" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "สร้างเส้นà¸à¸£à¸à¸š" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์ใหà¸à¹ˆ" +msgid "Generate AABB" +msgstr "สร้างเส้นà¸à¸£à¸à¸š" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5327,22 +5438,22 @@ msgid "Paste Resource" msgstr "วางรีซà¸à¸£à¹Œà¸ª" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "เปิดในโปรà¹à¸à¸£à¸¡à¹à¸à¹‰à¹„ข" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "ประเภท:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "เปิดในโปรà¹à¸à¸£à¸¡à¹à¸à¹‰à¹„ข" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "โหลดรีซà¸à¸£à¹Œà¸ª" @@ -5375,6 +5486,11 @@ msgstr "ผิดพลาดขณะย้ายไฟล์:\n" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "โหลดภาพไม่ได้" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "โหลดภาพไม่ได้" @@ -5476,11 +5592,8 @@ msgid "Copy Script Path" msgstr "คัดลà¸à¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸ªà¸„ริปต์" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "เปิดในตัวจัดà¸à¸²à¸£à¹„ฟล์" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "ประวัติà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/plugins/script_editor_plugin.cpp @@ -5551,7 +5664,8 @@ msgid "Keep Debugger Open" msgstr "เปิดตัวà¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸à¸‡à¸„้างไว้" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "à¹à¸à¹‰à¸ˆà¸¸à¸”บà¸à¸žà¸£à¹ˆà¸à¸‡à¸”้วยโปรà¹à¸à¸£à¸¡à¸à¸·à¹ˆà¸™" #: editor/plugins/script_editor_plugin.cpp @@ -5559,10 +5673,6 @@ msgid "Open Godot online documentation" msgstr "เปิดคู่มืà¸" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "ค้นหาคลาส" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "ค้นหาคู่มืà¸" @@ -5600,19 +5710,9 @@ msgstr "ตัวà¹à¸à¹‰à¹„ขจุดบà¸à¸žà¸£à¹ˆà¸à¸‡" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "ค้นหาในคู่มืà¸" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "ค้นหาคลาส" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "สคริปต์à¸à¸±à¸‡à¸ˆà¸°à¹à¸à¹‰à¹„ขได้ต่à¸à¹€à¸¡à¸·à¹ˆà¸à¸‰à¸²à¸à¸—ี่à¸à¸±à¸‡à¸ªà¸„ริปต์นั้นถูà¸à¹€à¸›à¸´à¸”à¸à¸¢à¸¹à¹ˆ" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5623,6 +5723,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "ไปยังฟังà¸à¹Œà¸Šà¸±à¸™..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "สามารถวางรีซà¸à¸£à¹Œà¸ªà¸ˆà¸²à¸à¸£à¸°à¸šà¸šà¹„ฟล์ได้เท่านั้น" @@ -5710,11 +5815,13 @@ msgid "Trim Trailing Whitespace" msgstr "ลบตัวà¸à¸±à¸à¸©à¸£à¸—ี่มà¸à¸‡à¹„ม่เห็น" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "ใช้เว้นวรรคเป็นย่à¸à¸«à¸™à¹‰à¸²" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "ใช้à¹à¸—็บเป็นย่à¸à¸«à¸™à¹‰à¸²" #: editor/plugins/script_text_editor.cpp @@ -5731,36 +5838,32 @@ msgid "Remove All Breakpoints" msgstr "ลบจุดพัà¸à¸—ั้งหมด" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "ไปจุดพัà¸à¸–ัดไป" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "ไปจุดพัà¸à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์ใหà¸à¹ˆ" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์เล็à¸" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "ค้นหาà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "คัดà¸à¸£à¸à¸‡à¹„ฟล์..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "ไปยังฟังà¸à¹Œà¸Šà¸±à¸™..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "ไปยังบรรทัด..." #: editor/plugins/script_text_editor.cpp @@ -5857,6 +5960,14 @@ msgid "Animation Key Inserted." msgstr "à¹à¸—รà¸à¸„ีย์à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "เสียงสูงต่ำ" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "จำนวนวัตถุที่วาด" @@ -6023,6 +6134,11 @@ msgid "Freelook Speed Modifier" msgstr "ปรับความเร็วมุมมà¸à¸‡à¸à¸´à¸ªà¸£à¸°" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "à¹à¸ªà¸”งข้à¸à¸¡à¸¹à¸¥" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" @@ -6125,11 +6241,6 @@ msgid "Tool Scale" msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¸›à¸£à¸±à¸šà¸‚นาด" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "เปิด/ปิดมุมมà¸à¸‡à¸à¸´à¸ªà¸£à¸°" @@ -6540,6 +6651,11 @@ msgid "Fix Invalid Tiles" msgstr "ชื่à¸à¸œà¸´à¸”พลาด" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "ให้สิ่งที่เลืà¸à¸à¸à¸¢à¸¹à¹ˆà¸à¸¥à¸²à¸‡à¸ˆà¸" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "วาด TileMap" @@ -6586,24 +6702,31 @@ msgstr "เลืà¸à¸ Tile" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "ลบที่เลืà¸à¸" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "หมุน 0 à¸à¸‡à¸¨à¸²" +#, fuzzy +msgid "Rotate left" +msgstr "โหมดหมุน" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "หมุน 90 à¸à¸‡à¸¨à¸²" +#, fuzzy +msgid "Rotate right" +msgstr "ย้ายไปขวา" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "หมุน 180 à¸à¸‡à¸¨à¸²" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "หมุน 270 à¸à¸‡à¸¨à¸²" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "เคลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6634,7 +6757,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6650,7 +6773,7 @@ msgid "Merge from scene?" msgstr "รวมจาà¸à¸‰à¸²à¸?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6737,6 +6860,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰à¸ªà¸¹à¸à¸«à¸²à¸¢/เสียหาย:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "เพิ่งปล่à¸à¸¢" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "ส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸š %s" + +#: editor/project_export.cpp msgid "Presets" msgstr "à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸" @@ -6745,6 +6878,11 @@ msgid "Add..." msgstr "เพิ่ม..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "ส่งà¸à¸à¸à¹‚ปรเจà¸à¸•์" + +#: editor/project_export.cpp msgid "Resources" msgstr "รีซà¸à¸£à¹Œà¸ª" @@ -6803,6 +6941,16 @@ msgid "Export PCK/Zip" msgstr "ส่งà¸à¸à¸ PCK/Zip" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "วิธีà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "ส่งà¸à¸à¸" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "ไม่พบà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰:" @@ -7270,10 +7418,6 @@ msgstr "ตัวเลืà¸à¸à¹‚ปรเจà¸à¸•์ (project.godot)" msgid "General" msgstr "ทั่วไป" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "คุณสมบัติ:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "à¸à¸³à¸«à¸™à¸”เฉพาะ..." @@ -7407,10 +7551,6 @@ msgstr "เลืà¸à¸à¹‚หนด" msgid "Bit %d, val %d." msgstr "บิต %d, ค่า %d" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "คุณสมบัติ:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "เลืà¸à¸à¸„ุณสมบัติ" @@ -7501,7 +7641,7 @@ msgid "Step" msgstr "ขนาด:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7510,7 +7650,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7555,7 +7695,7 @@ msgstr "ตัวพิมพ์ใหà¸à¹ˆ" msgid "Reset" msgstr "รีเซ็ตซูม" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "ผิดพลาด" @@ -7614,6 +7754,10 @@ msgid "Instance Scene(s)" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸¥à¸¹à¸" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "ลบสคริปต์" @@ -7650,6 +7794,12 @@ msgid "Save New Scene As..." msgstr "บันทึà¸à¸‰à¸²à¸à¹ƒà¸«à¸¡à¹ˆà¹€à¸›à¹‡à¸™..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "à¹à¸à¹‰à¹„ขโหนดลูà¸à¹„ด้" @@ -7726,6 +7876,11 @@ msgid "Clear Inheritance" msgstr "ลบà¸à¸²à¸£à¸ªà¸·à¸šà¸—à¸à¸”" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "เปิดคู่มืà¸" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "ลบโหนด" @@ -7734,15 +7889,16 @@ msgid "Add Child Node" msgstr "เพิ่มโหนดลูà¸" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸¥à¸¹à¸" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "เปลี่ยนประเภท" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "เปิดสคริปต์" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "เข้าใจ!" @@ -7905,6 +8061,11 @@ msgid "Path is empty" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸šà¸±à¸™à¸—ึà¸à¸§à¹ˆà¸²à¸‡à¹€à¸›à¸¥à¹ˆà¸²!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹„ม่ใช่ภายใน" @@ -7993,20 +8154,9 @@ msgid "Bytes:" msgstr "ไบต์:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "คำเตืà¸à¸™" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "ผิดพลาด:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "ต้นฉบับ:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "ฟังà¸à¹Œà¸Šà¸±à¸™:" +#, fuzzy +msgid "Stack Trace" +msgstr "สà¹à¸•ค" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8037,18 +8187,6 @@ msgid "Stack Frames" msgstr "สà¹à¸•ค" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "ตัวà¹à¸›à¸£" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "ข้à¸à¸œà¸´à¸”พลาด:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "สà¹à¸•ค (ถ้ามี):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "ประสิทธิภาพ" @@ -8475,12 +8613,8 @@ msgid "End of inner exception stack trace" msgstr "สิ้นสุดสà¹à¸•คข้à¸à¸œà¸´à¸”พลาดภายใน" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "สร้าง!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "สร้าง Mesh นำทาง" +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8752,6 +8886,10 @@ msgid "Base Type:" msgstr "ชนิด:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "ตัวà¹à¸›à¸£:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "โหนดที่มีให้ใช้:" @@ -8852,11 +8990,11 @@ msgid "Search VisualScript" msgstr "ลบโหนด" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "รับ" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8945,6 +9083,12 @@ msgid "" "shape resource for it!" msgstr "ต้à¸à¸‡à¸¡à¸µà¸£à¸¹à¸›à¸—รงเพื่à¸à¹ƒà¸«à¹‰ CollisionShape2D ทำงานได้ à¸à¸£à¸¸à¸“าสร้างรูปทรง!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8986,6 +9130,12 @@ msgid "" "imprinted." msgstr "ไม่ได้à¸à¸³à¸«à¸™à¸”วัสดุให้à¸à¸±à¸šà¸à¸™à¸¸à¸ าค" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D จะทำงานได้ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸à¸‚à¸à¸‡à¹‚หนด Path2D" @@ -9112,6 +9262,17 @@ msgid "" "shape resource for it!" msgstr "ต้à¸à¸‡à¸¡à¸µà¸£à¸¹à¸›à¸—รงเพื่à¸à¹ƒà¸«à¹‰ CollisionShape ทำงานได้ à¸à¸£à¸¸à¸“าสร้างรูปทรง!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "ไม่มีà¸à¸²à¸£à¹à¸ªà¸”งผลเนื่à¸à¸‡à¸ˆà¸²à¸à¹„ม่ได้à¸à¸³à¸«à¸™à¸” mesh ใน draw pass" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "วางà¹à¸™à¸§ meshes" @@ -9133,6 +9294,26 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "ไม่มีà¸à¸²à¸£à¹à¸ªà¸”งผลเนื่à¸à¸‡à¸ˆà¸²à¸à¹„ม่ได้à¸à¸³à¸«à¸™à¸” mesh ใน draw pass" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D จะทำงานได้ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸à¸‚à¸à¸‡à¹‚หนด Path2D" + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "PathFollow2D จะทำงานได้ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸à¸‚à¸à¸‡à¹‚หนด Path2D" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9168,7 +9349,7 @@ msgstr "" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9244,10 +9425,6 @@ msgstr "à¹à¸ˆà¹‰à¸‡à¹€à¸•ืà¸à¸™!" msgid "Please Confirm..." msgstr "à¸à¸£à¸¸à¸“ายืนยัน..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "เลืà¸à¸à¹‚ฟลเดà¸à¸£à¹Œà¸™à¸µà¹‰" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9257,6 +9434,10 @@ msgstr "" "ปà¸à¸•ิป๊à¸à¸›à¸à¸±à¸žà¸ˆà¸°à¸–ูà¸à¸‹à¹ˆà¸à¸™à¸ˆà¸™à¸à¸§à¹ˆà¸²à¸ˆà¸°à¸¡à¸µà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¸Ÿà¸±à¸‡à¸à¹Œà¸Šà¸±à¸™ popup() หรืภpopup*() " "โดยขณะà¹à¸à¹‰à¹„ขสามารถเปิดให้มà¸à¸‡à¹€à¸«à¹‡à¸™à¹„ด้ à¹à¸•่เมื่à¸à¹€à¸£à¸´à¹ˆà¸¡à¹‚ปรà¹à¸à¸£à¸¡à¸›à¹Šà¸à¸›à¸à¸±à¸žà¸ˆà¸°à¸–ูà¸à¸‹à¹ˆà¸à¸™" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9333,6 +9514,122 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "ซูม (%):" + +#~ msgid "Class List:" +#~ msgstr "รายชื่à¸à¸„ลาส:" + +#~ msgid "Search Classes" +#~ msgstr "ค้นหาคลาส" + +#~ msgid "Public Methods" +#~ msgstr "เมท็à¸à¸”" + +#~ msgid "Public Methods:" +#~ msgstr "เมท็à¸à¸”:" + +#~ msgid "GUI Theme Items" +#~ msgstr "ตัวà¹à¸›à¸£à¸˜à¸µà¸¡" + +#~ msgid "GUI Theme Items:" +#~ msgstr "ตัวà¹à¸›à¸£à¸˜à¸µà¸¡:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "คุณสมบัติ:" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "สลับà¸à¸²à¸£à¹€à¸›à¹‡à¸™à¹‚ฟลเดà¸à¸£à¹Œà¸—ี่ชื่นชà¸à¸š" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "เลืà¸à¸à¹„ทล์ย่à¸à¸¢à¸—ี่à¸à¸³à¸¥à¸±à¸‡à¸›à¸£à¸±à¸šà¹à¸•่ง" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "ทั้งคำ" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "ตรงตามà¸à¸±à¸à¸©à¸£à¸žà¸´à¸¡à¸žà¹Œà¹€à¸¥à¹‡à¸-ใหà¸à¹ˆ" + +#, fuzzy +#~ msgid "Filter: " +#~ msgstr "ตัวà¸à¸£à¸à¸‡:" + +#~ msgid "Ok" +#~ msgstr "ตà¸à¸¥à¸‡" + +#~ msgid "Show In File System" +#~ msgstr "เปิดในตัวจัดà¸à¸²à¸£à¹„ฟล์" + +#~ msgid "Search the class hierarchy." +#~ msgstr "ค้นหาคลาส" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "ค้นหาคลาส" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "สคริปต์à¸à¸±à¸‡à¸ˆà¸°à¹à¸à¹‰à¹„ขได้ต่à¸à¹€à¸¡à¸·à¹ˆà¸à¸‰à¸²à¸à¸—ี่à¸à¸±à¸‡à¸ªà¸„ริปต์นั้นถูà¸à¹€à¸›à¸´à¸”à¸à¸¢à¸¹à¹ˆ" + +#~ msgid "Convert To Uppercase" +#~ msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์ใหà¸à¹ˆ" + +#~ msgid "Convert To Lowercase" +#~ msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™à¸•ัวพิมพ์เล็à¸" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "หมุน 0 à¸à¸‡à¸¨à¸²" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "หมุน 90 à¸à¸‡à¸¨à¸²" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "หมุน 180 à¸à¸‡à¸¨à¸²" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "หมุน 270 à¸à¸‡à¸¨à¸²" + +#~ msgid "Warning" +#~ msgstr "คำเตืà¸à¸™" + +#~ msgid "Error:" +#~ msgstr "ผิดพลาด:" + +#~ msgid "Source:" +#~ msgstr "ต้นฉบับ:" + +#~ msgid "Function:" +#~ msgstr "ฟังà¸à¹Œà¸Šà¸±à¸™:" + +#~ msgid "Variable" +#~ msgstr "ตัวà¹à¸›à¸£" + +#~ msgid "Errors:" +#~ msgstr "ข้à¸à¸œà¸´à¸”พลาด:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "สà¹à¸•ค (ถ้ามี):" + +#~ msgid "Bake!" +#~ msgstr "สร้าง!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "สร้าง Mesh นำทาง" + +#~ msgid "Get" +#~ msgstr "รับ" + #~ msgid "Change Scalar Constant" #~ msgstr "à¹à¸à¹‰à¹„ขค่าคงที่สเà¸à¸¥à¸²à¸£à¹Œ" @@ -9733,9 +10030,6 @@ msgstr "" #~ msgid "Clear Emitter" #~ msgstr "ลบตัวปะทุ" -#~ msgid "Fold Line" -#~ msgstr "ซ่à¸à¸™" - #~ msgid " " #~ msgstr " " @@ -9822,9 +10116,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "บันทึภtexture ย่à¸à¸¢à¸‚à¸à¸‡ atlas ไม่ได้:" -#~ msgid "Exporting for %s" -#~ msgstr "ส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸š %s" - #~ msgid "Setting Up..." #~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸•ั้งค่า..." @@ -9929,9 +10220,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ฟà¸à¸™à¸•์ต้นฉบับ:" -#~ msgid "Source Font Size:" -#~ msgstr "ขนาดฟà¸à¸™à¸•์ต้นฉบับ:" - #~ msgid "Dest Resource:" #~ msgstr "นำเข้ามาเป็นรีซà¸à¸£à¹Œà¸ª:" @@ -10004,9 +10292,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "เริ่ม" -#~ msgid "Filters" -#~ msgstr "ตัวà¸à¸£à¸à¸‡" - #~ msgid "Source path is empty." #~ msgstr "ที่à¸à¸¢à¸¹à¹ˆà¹„ฟล์ต้นฉบับว่างเปล่า" @@ -10270,15 +10555,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "สเตà¸à¸£à¸´à¹‚à¸" -#~ msgid "Pitch" -#~ msgstr "เสียงสูงต่ำ" - #~ msgid "Window" #~ msgstr "หน้าต่าง" -#~ msgid "Move Right" -#~ msgstr "ย้ายไปขวา" - #~ msgid "Scaling to %s%%." #~ msgstr "ปรับขนาดเป็น %s%%" @@ -10349,9 +10628,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "เพิ่งà¸à¸”" -#~ msgid "just released" -#~ msgstr "เพิ่งปล่à¸à¸¢" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 6b9de6a394..a57b573cf9 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -18,18 +18,19 @@ # stnmycri <satenmeycri@gmail.com>, 2017-2018. # Yavuz Günay <yavuzgunay@gmail.com>, 2017. # Onur Sanır <onursanir@gmail.com>, 2018. +# OÄŸuzhan Özdemir <ozdemiroguzhan0@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-07 20:42+0000\n" -"Last-Translator: Onur Sanır <onursanir@gmail.com>\n" +"PO-Revision-Date: 2018-10-28 16:23+0000\n" +"Last-Translator: OÄŸuzhan Özdemir <ozdemiroguzhan0@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" "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 3.1-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -38,7 +39,7 @@ msgstr "" "convert() için geçersiz türde deÄŸiÅŸtirgen, TYPE_* sabitlerini kullanın." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Byte kodu çözmek için yetersiz byte, ya da Geçersiz format." @@ -81,7 +82,7 @@ msgstr "Ücretsiz" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "DengelenmiÅŸ" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -89,7 +90,6 @@ msgid "Mirror" msgstr "X'e Aynala" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" msgstr "Anahtar Gir" @@ -420,8 +420,7 @@ msgstr "Seçimi Ölçekle" msgid "Scale From Cursor" msgstr "İmleçten Ölçekle" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Seçimi ÇoÄŸalt" @@ -435,11 +434,13 @@ msgid "Delete Selection" msgstr "Seçilenleri Sil" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Sonraki Adıma Git" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Önceki Adıma Git" #: editor/animation_track_editor.cpp @@ -542,11 +543,11 @@ msgstr "EÅŸleÅŸme Yok" msgid "Replaced %d occurrence(s)." msgstr "DeÄŸiÅŸtirildi %d oluÅŸ(sn)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Büyük/Küçük Harf EÅŸleÅŸtir" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Tam Kelimeler" @@ -581,10 +582,10 @@ msgstr "Uyarılar" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "YaklaÅŸ (%):" +msgid "Font Size:" +msgstr "Kaynak Yazı Türü Boyutu:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Satır:" @@ -617,6 +618,7 @@ msgstr "Ekle" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -698,7 +700,7 @@ msgstr "BaÄŸlantıları Düzenle" #: editor/connections_dialog.cpp #, fuzzy -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "Birden fazla projeyi çalıştırmaya kararlı mısınız?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -753,17 +755,14 @@ msgstr "Yakın zamanda:" msgid "Search:" msgstr "Ara:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "EÅŸleÅŸmeler:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Açıklama:" @@ -824,9 +823,10 @@ msgid "Search Replacement Resource:" msgstr "Yerine Geçecek Kaynak Ara:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -858,7 +858,8 @@ msgid "Error loading:" msgstr "Yüklerken hata:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "Sahnedeki kayıp bağımlılıklar yüzünden sahneyi yükleme baÅŸarısız oldu:" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -917,14 +918,6 @@ msgstr "Sözlükteki DeÄŸeri DeÄŸiÅŸtir" msgid "Thanks from the Godot community!" msgstr "Godot topluluÄŸundan teÅŸekkürler!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Tamam" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Oyun Motoru katkı saÄŸlayanlar" @@ -1100,8 +1093,7 @@ msgid "Bus options" msgstr "Bus ayarları" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ÇoÄŸalt" @@ -1268,8 +1260,9 @@ msgstr "Dosya yolu:" msgid "Node Name:" msgstr "Düğüm adı:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Ad" @@ -1339,12 +1332,17 @@ msgid "Template file not found:" msgstr "Åžablon dosyası bulunamadı:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Geçerli Klasörü Seç" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Dosya var. Üzerine Yazılsın mı?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Geçerli Klasörü Seç" +#, fuzzy +msgid "Select This Folder" +msgstr "Bu Klasörü Seç" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1352,12 +1350,13 @@ msgstr "Dosya Yolunu Tıpkıla" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "Dosya Yöneticisinde Göster" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "Dosya Yöneticisinde Göster" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1393,7 +1392,8 @@ msgid "Open a File or Directory" msgstr "Bir Dosya ya da Dizin Aç" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Kaydet" @@ -1451,8 +1451,7 @@ msgstr "Dizinler & Dosyalar:" msgid "Preview:" msgstr "Önizleme:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Dosya:" @@ -1468,24 +1467,11 @@ msgstr "KaynaklarıTara" msgid "(Re)Importing Assets" msgstr "Varlıklar Yeniden-İçe Aktarılıyor" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Yardım Ara" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Sınıf Listesi:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Sınıfları Ara" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Üst" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Sınıf:" @@ -1502,28 +1488,31 @@ msgid "Brief Description:" msgstr "Kısa Açıklama:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Üyeler" +msgid "Properties" +msgstr "Özellikler" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Üyeler:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "Özellikler:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Açık Metodlar" +msgid "Methods" +msgstr "Metotlar" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Açık Metotlar:" +#, fuzzy +msgid "Methods:" +msgstr "Metotlar" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Grafik Arayüzü Tema Öğeleri" +#, fuzzy +msgid "Theme Properties" +msgstr "Özellikler" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Grafik Arayüzü Tema Öğeleri:" +#, fuzzy +msgid "Theme Properties:" +msgstr "Özellikler:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1550,10 +1539,16 @@ msgid "Constants:" msgstr "Sabitler:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" msgstr "Açıklama" #: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Açıklama:" + +#: editor/editor_help.cpp msgid "Online Tutorials:" msgstr "Çevrimiçi Rehberler:" @@ -1568,11 +1563,13 @@ msgstr "" "[color=$color][url=$url2]öneride bulunabilirsiniz[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "Özellikler" +#, fuzzy +msgid "Property Descriptions" +msgstr "Özellik Açıklaması:" #: editor/editor_help.cpp -msgid "Property Description:" +#, fuzzy +msgid "Property Descriptions:" msgstr "Özellik Açıklaması:" #: editor/editor_help.cpp @@ -1584,11 +1581,13 @@ msgstr "" "bulunarak[/url][/color] yardım edebilirsiniz!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Metotlar" +#, fuzzy +msgid "Method Descriptions" +msgstr "Metot Açıklaması:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Metot Açıklaması:" #: editor/editor_help.cpp @@ -1599,12 +1598,61 @@ msgstr "" "Bu metot için henüz bir açıklama yok. Bize [color=$color][url=$url]katkıda " "bulunarak[/url][/color] yardım edebilirsiniz!" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Yardım Ara" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "OlaÄŸanı Görüntüle" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Classes Only" +msgstr "Sınıflar" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Metotlar" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Signals Only" +msgstr "Sinyaller" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Sabitler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "Özellikler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "Özellikler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Üyeler" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Sınıf:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "Özellik:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Ayarla" @@ -1638,6 +1686,11 @@ msgstr "Proje dışa aktarımı %d hata koduyla baÅŸarısız." msgid "Error saving resource!" msgstr "Kaynak kaydedilirken hata!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Tamam" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Kaynağı Farklı Kaydet..." @@ -1692,12 +1745,22 @@ msgstr "Bu iÅŸlem bir kök sahne olmadan yapılamaz." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Sahne kaydedilemedi. Anlaşılan bağımlılıklar (örnekler ve kalıtımlar) " "karşılanamadı." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "BirleÅŸtirme için MeshLibrary yüklenemedi!" @@ -1955,6 +2018,13 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Yoldaki eklenti betiÄŸi yüklenemedi: '%s'." #: editor/editor_node.cpp +#, fuzzy +msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "Eklenti betiÄŸi '%s' yolundan yüklenemedi. Betik araç modunda deÄŸil." + +#: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2001,6 +2071,12 @@ msgstr "YerleÅŸim Düzenini Sil" msgid "Default" msgstr "Varsayılan" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Dosya Sisteminde Göster" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2084,7 +2160,8 @@ msgid "Save Scene" msgstr "Sahne Kaydet" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "Tüm Sahneleri Kaydet" #: editor/editor_node.cpp @@ -2113,7 +2190,7 @@ msgid "Undo" msgstr "Geri" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Geri" @@ -2151,6 +2228,7 @@ msgid "Quit to Project List" msgstr "Proje Listesine Çık" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "Hata Ayıklama" @@ -2279,10 +2357,6 @@ msgstr "Dışa Aktarım Åžablonlarını Yönet" msgid "Help" msgstr "Yardım" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "Sınıflar" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2377,24 +2451,24 @@ msgstr "DeÄŸiÅŸiklikleri güncelle" msgid "Disable Update Spinner" msgstr "Güncelleme Topacını Devre Dışı Bırak" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "Denetçi" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "İçe Aktar" #: editor/editor_node.cpp -msgid "Node" -msgstr "Düğüm" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "DosyaSistemi" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "Denetçi" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Düğüm" + +#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Hepsini geniÅŸlet" @@ -2532,7 +2606,7 @@ msgstr "Kare %" msgid "Physics Frame %" msgstr "Fizik Kare %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "Süre:" @@ -2556,7 +2630,7 @@ msgstr "Zaman" msgid "Calls" msgstr "ÇaÄŸrılar" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Açık" @@ -2569,7 +2643,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "Bit %d, val %d." -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[BoÅŸ]" @@ -2578,6 +2652,20 @@ msgstr "[BoÅŸ]" msgid "Assign.." msgstr "Ata" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "Bir Görüntükapısı Seçin" @@ -2595,10 +2683,6 @@ msgstr "Yeni %s" msgid "Make Unique" msgstr "Benzersiz Yap" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Dosya Sisteminde Göster" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2607,7 +2691,8 @@ msgstr "Dosya Sisteminde Göster" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Yapıştır" @@ -2900,6 +2985,11 @@ msgstr "" "kaydedilmiyor!" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "BeÄŸeniler:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "Gidilemiyor. '%s' bu dosya sisteminde bulunamadı!" @@ -2939,7 +3029,7 @@ msgstr "ÇoÄŸaltılırken hata:" msgid "Unable to update dependencies:" msgstr "Bağımlılıklar güncellenemedi:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "İsim saÄŸlanmadı" @@ -2976,22 +3066,6 @@ msgid "Duplicating folder:" msgstr "Klasör çoÄŸaltılıyor:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Hepsini geniÅŸlet" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Hepsini daralt" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Yeniden Adlandır..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Åžuraya Taşı..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Sahne(ler) Aç" @@ -3000,6 +3074,16 @@ msgid "Instance" msgstr "Örnek" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "BeÄŸeniler:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Öbekten Kaldır" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Bağımlılıkları Düzenle..." @@ -3007,11 +3091,19 @@ msgstr "Bağımlılıkları Düzenle..." msgid "View Owners..." msgstr "Sahipleri Görüntüle..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Yeniden Adlandır..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "ÇoÄŸalt..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Åžuraya Taşı..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Yeni Betik" @@ -3021,6 +3113,16 @@ msgstr "Yeni Betik" msgid "New Resource..." msgstr "Kaynağı Farklı Kaydet..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Hepsini geniÅŸlet" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Hepsini daralt" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3042,28 +3144,19 @@ msgstr "Dosya Düzenini Yeniden Tara" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Klasör durumunu BeÄŸenilen olarak deÄŸiÅŸtir" +msgid "Toggle split mode" +msgstr "Aç / Kapat Biçimi" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "Åžuanki düzenlenmiÅŸ alt-döşemeyi seç." +msgid "Search files" +msgstr "Sınıfları Ara" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Seçilen sahneyi/sahneleri seçilen düğüme çocuk olarak örneklendir." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Sınıfları Ara" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3071,7 +3164,7 @@ msgstr "" "Dosyalar Taranıyor,\n" "Lütfen Bekleyiniz..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Taşı" @@ -3090,32 +3183,23 @@ msgstr "Betik OluÅŸtur" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "Döşentiyi Bul" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Bul" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Tam Kelimeler" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Büyük/Küçük Harf EÅŸleÅŸtir" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Satırı Katla" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " -msgstr "Süzgeç:" +msgid "Filters:" +msgstr "Süzgeçler" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3132,6 +3216,11 @@ msgstr "Vazgeç" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Bul" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "DeÄŸiÅŸtir" @@ -3298,17 +3387,14 @@ msgstr "Yeniden İçe Aktar" msgid "Failed to load resource." msgstr "Kaynak yükleme baÅŸarısız oldu." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Tamam" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "Tüm özellikleri geniÅŸlet" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +#, fuzzy +msgid "Collapse All Properties" msgstr "Tüm özellikleri daralt" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3562,6 +3648,11 @@ msgstr "" msgid "Snap" msgstr "Yapış" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Karışma:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3944,10 +4035,6 @@ msgid "Amount:" msgstr "DeÄŸer:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Karışma:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Karışma 0:" @@ -4285,6 +4372,11 @@ msgstr "CanvasItem Düzenle" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy +msgid "Scale CanvasItem" +msgstr "CanvasItem Düzenle" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Move CanvasItem" msgstr "CanvasItem Düzenle" @@ -4350,6 +4442,11 @@ msgid "Rotate Mode" msgstr "Döndürme Biçimi" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Ölçek Biçimi (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4449,6 +4546,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "Nesnenin çocuÄŸunun seçilebilme yeteneÄŸini geri kazandırır." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "İskelet..." + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Kemikleri Göster" @@ -4500,6 +4602,10 @@ msgid "Show Viewport" msgstr "Görüntükapısını Göster" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "İçre Seçimi" @@ -4940,9 +5046,9 @@ msgid "Create Navigation Polygon" msgstr "Yönlendirici Çokgeni OluÅŸtur" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "AABB Üretimi" +#, fuzzy +msgid "Generating Visibility Rect" +msgstr "Görünebilirlik Dikdörtgeni Üret" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4970,6 +5076,12 @@ msgstr "Yayma Maskesini Temizle" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "Büyük Harfe Dönüştür" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "Parçacıklar" @@ -5039,13 +5151,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Bir iÅŸlemci malzeme türü 'ParticlesMaterial' gereklidir." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "AABB Üret" +msgid "Generating AABB" +msgstr "AABB Üretimi" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Büyük Harfe Dönüştür" +msgid "Generate AABB" +msgstr "AABB Üret" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5390,22 +5501,22 @@ msgid "Paste Resource" msgstr "Kaynağı Yapıştır" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Düzenleyicide Aç" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "Örnek:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Tür:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Düzenleyicide Aç" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Kaynak Yükle" @@ -5438,6 +5549,11 @@ msgstr "Bediz yüklenirken sorun oluÅŸtu:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "Bediz yüklenemedi" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "Bediz yüklenemedi" @@ -5539,11 +5655,8 @@ msgid "Copy Script Path" msgstr "Betik Yolunu Kopyala" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Dosya Sisteminde Göster" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +#, fuzzy +msgid "History Previous" msgstr "Öceki GeçmiÅŸ" #: editor/plugins/script_editor_plugin.cpp @@ -5614,7 +5727,8 @@ msgid "Keep Debugger Open" msgstr "Hata Ayıklayıcıyı Açık Tut" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +#, fuzzy +msgid "Debug with External Editor" msgstr "Harici düzenleyici ile hata ayıkla" #: editor/plugins/script_editor_plugin.cpp @@ -5622,10 +5736,6 @@ msgid "Open Godot online documentation" msgstr "Çevrimiçi Godot dökümanlarını aç" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Sınıf hiyerarÅŸisi ara." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "BaÅŸvuru belgelerinde arama yap." @@ -5663,21 +5773,9 @@ msgstr "Hata Ayıklayıcı" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "Yardım Ara" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Sınıfları Ara" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Gömülü betik dosyaları yalnızca ait oldukları sahne yüklendiÄŸinde " -"düzenlenebilirler" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5688,6 +5786,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "İşleve Git..." + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Sadece dosya sisteminden kaynaklar bırakılabilir." @@ -5775,11 +5878,13 @@ msgid "Trim Trailing Whitespace" msgstr "İzleyenin BoÅŸluklarını Kırp" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +#, fuzzy +msgid "Convert Indent to Spaces" msgstr "Girintileri BoÅŸluklara Dönüştür" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +#, fuzzy +msgid "Convert Indent to Tabs" msgstr "Girintileri Sekmelere Dönüştür" #: editor/plugins/script_text_editor.cpp @@ -5796,36 +5901,32 @@ msgid "Remove All Breakpoints" msgstr "Tüm Kesme Noktalarını Kaldır" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +#, fuzzy +msgid "Go to Next Breakpoint" msgstr "Sonraki Kesme Noktasına Git" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +#, fuzzy +msgid "Go to Previous Breakpoint" msgstr "Önceki Kesme Noktasına Git" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Büyük Harfe Dönüştür" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Küçük Harfe Dönüştür" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Öncekini Bul" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Dosyaları Süz..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +#, fuzzy +msgid "Go to Function..." msgstr "İşleve Git..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +#, fuzzy +msgid "Go to Line..." msgstr "Dizeye Git..." #: editor/plugins/script_text_editor.cpp @@ -5922,6 +6023,14 @@ msgid "Animation Key Inserted." msgstr "Animasyon Anahtarı Eklendi." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "Perde" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "ÇizilmiÅŸ Nesneler" @@ -6088,6 +6197,11 @@ msgid "Freelook Speed Modifier" msgstr "Serbestbakış Hız DeÄŸiÅŸtirici" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "Bilgi Göster" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XForm İletiÅŸim Kutusu" @@ -6190,11 +6304,6 @@ msgid "Tool Scale" msgstr "Ölçek Aracı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Izgaraya yapış" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "Serbestbakış Aç / Kapat" @@ -6602,6 +6711,11 @@ msgid "Fix Invalid Tiles" msgstr "Geçersiz ad." #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "İçre Seçimi" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "TileMap'i Boya" @@ -6648,24 +6762,31 @@ msgstr "Karo Seç" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "Seçimi Kaldır" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "0 Düzeyde Döndür" +#, fuzzy +msgid "Rotate left" +msgstr "Döndürme Biçimi" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "90 Düzeyde Döndür" +#, fuzzy +msgid "Rotate right" +msgstr "SaÄŸa Taşı" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "180 Düzeyde Döndür" +msgid "Flip horizontally" +msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "270 Düzeyde Döndür" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Dönüşüm" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6698,7 +6819,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6714,7 +6835,7 @@ msgid "Merge from scene?" msgstr "Sahneden birleÅŸtirilsin mi?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6802,6 +6923,16 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Bu platform için dışa aktarma ÅŸablonu eksik/bozuk:" #: editor/project_export.cpp +#, fuzzy +msgid "Release" +msgstr "yeni bırakıldı" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "%s için Dışa Aktarım" + +#: editor/project_export.cpp msgid "Presets" msgstr "Önayarlar" @@ -6810,6 +6941,11 @@ msgid "Add..." msgstr "Ekle..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "Ön Ayarları Dışa Aktar:" + +#: editor/project_export.cpp msgid "Resources" msgstr "Kaynaklar" @@ -6872,6 +7008,16 @@ msgid "Export PCK/Zip" msgstr "PCK/Zip Dışa Aktar" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Dışa Aktarma Biçimi:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Dışa Aktar" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Bu platform için dışa aktarma ÅŸablonu eksik:" @@ -7345,10 +7491,6 @@ msgstr "Proje Ayarları (proje.godot)" msgid "General" msgstr "Genel" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "Özellik:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Åžunun Üzerine Yaz..." @@ -7481,10 +7623,6 @@ msgstr "Bir Düğüm Seç" msgid "Bit %d, val %d." msgstr "Bit %d, val %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "Özellikler:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Özellik Seç" @@ -7575,7 +7713,7 @@ msgid "Step" msgstr "Adım:" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7584,7 +7722,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7629,7 +7767,7 @@ msgstr "Büyük harf" msgid "Reset" msgstr "YaklaÅŸmayı Sıfırla" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Hata" @@ -7690,6 +7828,10 @@ msgid "Instance Scene(s)" msgstr "Sahne(leri) Örnekle" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Çocuk Sahnesini Örnekle" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "BetiÄŸi Temizle" @@ -7726,6 +7868,12 @@ msgid "Save New Scene As..." msgstr "Yeni Sahneyi Farklı Kaydet ..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Düzenlenebilir Çocuklar" @@ -7802,6 +7950,11 @@ msgid "Clear Inheritance" msgstr "Kalıtı Temizle" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "Çevrimiçi Godot dökümanlarını aç" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Düğümleri Sil" @@ -7810,15 +7963,16 @@ msgid "Add Child Node" msgstr "Çocuk Düğüm Ekle" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Çocuk Sahnesini Örnekle" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Türü DeÄŸiÅŸtir" #: editor/scene_tree_dock.cpp #, fuzzy +msgid "Extend Script" +msgstr "Betik Aç" + +#: editor/scene_tree_dock.cpp +#, fuzzy msgid "Make Scene Root" msgstr "Anlamlı!" @@ -7983,6 +8137,11 @@ msgid "Path is empty" msgstr "Yol boÅŸ" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "Kayıt yolu boÅŸ!" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "Yol yerel deÄŸil" @@ -8071,20 +8230,9 @@ msgid "Bytes:" msgstr "Baytlar:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "Uyarı" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Hata:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Kaynak:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "Fonksiyon:" +#, fuzzy +msgid "Stack Trace" +msgstr "Çerçeveleri Yığ" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8115,18 +8263,6 @@ msgid "Stack Frames" msgstr "Çerçeveleri Yığ" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "DeÄŸiÅŸken" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Hatalar:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "İzi Yığ (uygulanabilirse):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "Kesitçi" @@ -8553,12 +8689,8 @@ msgid "End of inner exception stack trace" msgstr "İç özel durum yığını izlemesinin sonu" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "PiÅŸir!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Yönlendirici örüntüsünü piÅŸir." +msgid "Bake NavMesh" +msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8839,6 +8971,10 @@ msgid "Base Type:" msgstr "Taban Türü:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Üyeler:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "Kullanılabilir Düğümler:" @@ -8941,11 +9077,11 @@ msgid "Search VisualScript" msgstr "GörselBetik Düğümü Kaldır" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Al" +msgid "Get %s" +msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9042,6 +9178,12 @@ msgstr "" "CollisionShape2D'nin iÅŸlevini yerine getirmesi için ona bir ÅŸekil saÄŸlanması " "gerekmektedir. Lütfen onun için bir ÅŸekil kaynağı oluÅŸturun!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9091,6 +9233,12 @@ msgstr "" "Parçacıkları iÅŸlemek için bir materyal atanmış deÄŸil, bu yüzden etki eden " "davranış yok." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9231,6 +9379,18 @@ msgstr "" "CollisionShape'in çalışması için bir ÅŸekil verilmelidir. Lütfen bunun için " "bir ÅŸekil kaynağı oluÅŸturun!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" +"HiçbirÅŸey görünebilir deÄŸil çünkü örüntüler çizim geçiÅŸlerine atanmış deÄŸil." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Örüntüler Haritalanıyor" @@ -9255,6 +9415,28 @@ msgid "" msgstr "" "HiçbirÅŸey görünebilir deÄŸil çünkü örüntüler çizim geçiÅŸlerine atanmış deÄŸil." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +#, fuzzy +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D yalnızca Path2D düğümünün çocuÄŸu olarak ayarlanınca çalışır." + +#: scene/3d/path.cpp +#, fuzzy +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"PathFollow2D yalnızca Path2D düğümünün çocuÄŸu olarak ayarlanınca çalışır." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9296,7 +9478,7 @@ msgstr "" #: scene/3d/soft_body.cpp #, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9379,10 +9561,6 @@ msgstr "Uyarı!" msgid "Please Confirm..." msgstr "Lütfen DoÄŸrulayın..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Bu Klasörü Seç" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9393,6 +9571,10 @@ msgstr "" "olarak gizlenecektir. Onları düzenleme için görünür kılmak da iyidir, ancak " "çalışırken gizlenecekler." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9470,6 +9652,124 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "YaklaÅŸ (%):" + +#~ msgid "Class List:" +#~ msgstr "Sınıf Listesi:" + +#~ msgid "Search Classes" +#~ msgstr "Sınıfları Ara" + +#~ msgid "Public Methods" +#~ msgstr "Açık Metodlar" + +#~ msgid "Public Methods:" +#~ msgstr "Açık Metotlar:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Grafik Arayüzü Tema Öğeleri" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Grafik Arayüzü Tema Öğeleri:" + +#, fuzzy +#~ msgid "Property: " +#~ msgstr "Özellik:" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Klasör durumunu BeÄŸenilen olarak deÄŸiÅŸtir" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "Åžuanki düzenlenmiÅŸ alt-döşemeyi seç." + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Tam Kelimeler" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Büyük/Küçük Harf EÅŸleÅŸtir" + +#, fuzzy +#~ msgid "Filter: " +#~ msgstr "Süzgeç:" + +#~ msgid "Ok" +#~ msgstr "Tamam" + +#~ msgid "Show In File System" +#~ msgstr "Dosya Sisteminde Göster" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Sınıf hiyerarÅŸisi ara." + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Sınıfları Ara" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Gömülü betik dosyaları yalnızca ait oldukları sahne yüklendiÄŸinde " +#~ "düzenlenebilirler" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Büyük Harfe Dönüştür" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Küçük Harfe Dönüştür" + +#, fuzzy +#~ msgid "Snap To Floor" +#~ msgstr "Izgaraya yapış" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "0 Düzeyde Döndür" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "90 Düzeyde Döndür" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "180 Düzeyde Döndür" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "270 Düzeyde Döndür" + +#~ msgid "Warning" +#~ msgstr "Uyarı" + +#~ msgid "Error:" +#~ msgstr "Hata:" + +#~ msgid "Source:" +#~ msgstr "Kaynak:" + +#~ msgid "Function:" +#~ msgstr "Fonksiyon:" + +#~ msgid "Variable" +#~ msgstr "DeÄŸiÅŸken" + +#~ msgid "Errors:" +#~ msgstr "Hatalar:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "İzi Yığ (uygulanabilirse):" + +#~ msgid "Bake!" +#~ msgstr "PiÅŸir!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Yönlendirici örüntüsünü piÅŸir." + +#~ msgid "Get" +#~ msgstr "Al" + #~ msgid "Change Scalar Constant" #~ msgstr "Basamaklı Sabiti DeÄŸiÅŸtir" @@ -9874,9 +10174,6 @@ msgstr "" #~ msgid "Clear Emitter" #~ msgstr "Yayıcıyı Temizle" -#~ msgid "Fold Line" -#~ msgstr "Satırı Katla" - #~ msgid " " #~ msgstr " " @@ -9961,9 +10258,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "Atlas alt dokusu kaydedilemedi:" -#~ msgid "Exporting for %s" -#~ msgstr "%s için Dışa Aktarım" - #~ msgid "Setting Up..." #~ msgstr "Kurulum..." @@ -10062,9 +10356,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Yazı Türü Kaynağı:" -#~ msgid "Source Font Size:" -#~ msgstr "Kaynak Yazı Türü Boyutu:" - #~ msgid "Dest Resource:" #~ msgstr "Varış Kaynağı:" @@ -10141,9 +10432,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "BaÅŸlangıç(lar)" -#~ msgid "Filters" -#~ msgstr "Süzgeçler" - #~ msgid "Source path is empty." #~ msgstr "Kaynak yol boÅŸ." @@ -10418,15 +10706,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "Çiftli" -#~ msgid "Pitch" -#~ msgstr "Perde" - #~ msgid "Window" #~ msgstr "Pencere" -#~ msgid "Move Right" -#~ msgstr "SaÄŸa Taşı" - #~ msgid "Scaling to %s%%." #~ msgstr "Åžuna %s%% Ölçeklendiriliyor." @@ -10491,9 +10773,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "yeni basıldı" -#~ msgid "just released" -#~ msgstr "yeni bırakıldı" - #, fuzzy #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " @@ -10823,9 +11102,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "Tasarı Dışa Aktar" -#~ msgid "Export Preset:" -#~ msgstr "Ön Ayarları Dışa Aktar:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance, bir BakedLight kaynağı içermez." diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 153d01f551..befdfbd46d 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -9,11 +9,12 @@ # МакÑим Якимчук <xpinovo@gmail.com>, 2018. # ÐœÐ°Ñ€Ñ Ð¯Ð¼Ð±Ð°Ñ€ <mjambarmeta@gmail.com>, 2017-2018. # ОлекÑандр Пилипчук <pilipchukap@rambler.ru>, 2018. +# Kirill Omelchenko <kirill.omelchenko@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" -"PO-Revision-Date: 2018-07-26 10:17+0000\n" -"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: МакÑим Якимчук <xpinovo@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" "Language: uk\n" @@ -21,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -30,41 +31,39 @@ msgstr "" "Ðекоректний аргумент типу у convert(), Ñлід викориÑтовувати Ñталі TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ÐедоÑтатньо байтів Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ вказано некоректний формат." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ðекоректні вхідні дані %i (не передано) у виразі" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" +"не можна викориÑтовувати self, оÑкільки екземплÑÑ€ Ñ” порожнім (не передано)" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "Ðекоректна назва влаÑтивоÑті індекÑу, «%s», у вузлі %s." +msgstr "Ðекоректні операнди оператора %s, %s Ñ– %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Ðекоректна назва влаÑтивоÑті індекÑу, «%s», у вузлі %s." +msgstr "Ðекоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ‚Ð¸Ð¿Ñƒ %s Ð´Ð»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ типу %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Ðекоректний іменований Ñ–Ð½Ð´ÐµÐºÑ Â«%s» Ð´Ð»Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ типу %s" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": Ðеправильний тип аргументу: " +msgstr "Ðекоректні аргументи Ð´Ð»Ñ Ð¿Ð¾Ð±ÑƒÐ´Ð¾Ð²Ð¸ «%s»" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "При виклику «%s»:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -73,27 +72,23 @@ msgstr "Вивільнити" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "ЗбаланÑована" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Віддзеркалити за X" +msgstr "Віддзеркалити" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Ð’Ñтавити ключ" +msgstr "Тут Ñлід вÑтавити ключ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "Дублювати виділене" +msgstr "Дублювати позначені ключі" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Вилучити вибране" +msgstr "Вилучити позначені ключі" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -124,46 +119,40 @@ msgid "Anim Change Call" msgstr "Змінити виклик анімації" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "ВлаÑтивіÑть:" +msgstr "Доріжка влаÑтивоÑтей" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "Тип перетвореннÑ" +msgstr "Доріжка проÑторового перетвореннÑ" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Доріжка виклику методів" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Доріжка кривої Безьє" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Доріжка Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð²ÑƒÐºÑƒ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "Зупинити Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—. (S)" +msgstr "Доріжка Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Додати нову доріжку" +msgstr "Додати доріжку" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "ТриваліÑть анімації (в Ñекундах)." +msgstr "ТриваліÑть анімації (у Ñекундах)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "МаÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—." +msgstr "ЦиклічніÑть анімації" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -171,41 +160,36 @@ msgid "Functions:" msgstr "Функції:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "ПроÑÐ»ÑƒÑ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð²ÑƒÐºÑƒ" +msgstr "Звукові кліпи:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "Кліпи анімації:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "Перемкнути режим без відволіканнÑ." +msgstr "Увімкнути або вимкнути цю доріжку." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Оновити режим (ÑпоÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑті)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "Ðнімаційний вузол" +msgstr "Режим інтерполÑції" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Режим Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ð½Ñ (інтерполÑÑ†Ñ–Ñ Ð²Ð·Ð°Ñ”Ð¼Ð¾Ð´Ñ–Ñ— ÐºÑ–Ð½Ñ†Ñ Ñ–Ð· початком у циклі)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Вилучити обрану доріжку." +msgstr "Вилучити цю доріжку." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Ð§Ð°Ñ X-Fade (Ñ):" +msgstr "Ð§Ð°Ñ (Ñ): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -220,13 +204,12 @@ msgid "Trigger" msgstr "Триґер" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "МожливоÑті" +msgstr "ЗахопленнÑ" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Ðайближча" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -235,15 +218,15 @@ msgstr "Лінійний" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Кубічна" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "ЗатиÑнута інтерполÑÑ†Ñ–Ñ Ñ†Ð¸ÐºÐ»Ñƒ" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Загорнута інтерполÑÑ†Ñ–Ñ Ñ†Ð¸ÐºÐ»Ñƒ" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -251,14 +234,12 @@ msgid "Insert Key" msgstr "Ð’Ñтавити ключ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Дублювати вузли" +msgstr "Дублювати ключі" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Вилучити вузли" +msgstr "Вилучити ключі" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -288,7 +269,7 @@ msgstr "Ð’Ñтавити анімацію" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer не може анімувати Ñебе, лише інших відтворювачів." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -304,7 +285,7 @@ msgstr "Ð’Ñтавити ключ анімації" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Доріжки Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑовуютьÑÑ Ð»Ð¸ÑˆÐµ до вузлів на оÑнові Spatial." #: editor/animation_track_editor.cpp msgid "" @@ -313,44 +294,48 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Звукові доріжки можуть вказувати лише на вузли таких типів:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Доріжки анімації можуть вказувати лише на взули AnimationPlayer." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Відтворювач анімації не може відтворювати Ñам Ñебе, лише інші відтворювачі " +"анімації." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Ðе можна додавати нові доріжки без кореневого запиÑу" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "ШлÑÑ… доріжки Ñ” некоректним, отже не можна додавати ключ." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Доріжка не належить до типу Spatial, не можна вÑтавлÑти ключ" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "ШлÑÑ… доріжки Ñ” некоректним, отже не можна додавати ключ методу." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "Ðе знайдено VariableGet у Ñкрипті: " +msgstr "Ðе знайдено метод у об'єкті: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "ПереміÑтити ключі анімації" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Буфер обміну порожній!" +msgstr "Буфер обміну порожній" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -360,24 +345,25 @@ msgstr "МаÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð² анімації" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Цей параметр не працює Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ€Ð¸Ð²Ð¸Ñ… Безьє, оÑкільки це лише " +"одинарна доріжка." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Показувати доріжки лише Ð´Ð»Ñ Ð²ÑƒÐ·Ð»Ñ–Ð², Ñкі позначено у ієрархії." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." msgstr "" +"Групувати доріжки за вузлами або показувати Ñ—Ñ… у форматі проÑтого ÑпиÑку." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "Крок (Ñек.):" +msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ (Ñ): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Дерево анімації Ñ” дійÑним." +msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÑ€Ð¾ÐºÑƒ анімації." #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -389,19 +375,16 @@ msgid "Edit" msgstr "Редагувати" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "Дерево анімації" +msgstr "ВлаÑтивоÑті анімації." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Копіювати параметри" +msgstr "Копіювати доріжки" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Ð’Ñтавити параметри" +msgstr "Ð’Ñтавити доріжки" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -411,8 +394,7 @@ msgstr "Вибір маÑштабу" msgid "Scale From Cursor" msgstr "МаÑштаб від курÑору" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Дублювати виділене" @@ -421,17 +403,16 @@ msgid "Duplicate Transposed" msgstr "Дублювати транÑпоноване" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Вилучити вибране" +msgstr "Вилучити позначене" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" -msgstr "Перейти до наÑтупного кроку" +msgid "Go to Next Step" +msgstr "До наÑтупного кроку" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" -msgstr "ПовернутиÑÑ Ð´Ð¾ попереднього кроку" +msgid "Go to Previous Step" +msgstr "До попереднього кроку" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -443,11 +424,11 @@ msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Виберіть вузол, Ñкий буде анімовано:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "ВикориÑтовувати криві Безьє" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -455,7 +436,7 @@ msgstr "Оптимізатор Ðнімації" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" -msgstr "МакÑимальна лінійна похибка:" +msgstr "МакÑ. лінійна похибка:" #: editor/animation_track_editor.cpp msgid "Max. Angular Error:" @@ -495,7 +476,7 @@ msgstr "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ð¼Ð°Ñштабу:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "Виберіть доріжки Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -533,11 +514,11 @@ msgstr "Ðемає збігів" msgid "Replaced %d occurrence(s)." msgstr "Замінено %d випадок(-ів)." -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "Враховувати регіÑтр" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Цілі Ñлова" @@ -566,16 +547,15 @@ msgid "Reset Zoom" msgstr "Скинути маÑштаб" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "ПопередженнÑ" +msgstr "ПопередженнÑ:" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Збільшувати" +msgid "Font Size:" +msgstr "ВиглÑд Ñпереду" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Ð Ñдок:" @@ -608,6 +588,7 @@ msgstr "Додати" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -664,9 +645,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Від'єднати '%s' від '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "Від'єднати '%s' від '%s'" +msgstr "Від'єднати уÑе від Ñигналу: «%s»" #: editor/connections_dialog.cpp msgid "Connect..." @@ -678,19 +658,16 @@ msgid "Disconnect" msgstr "Роз'єднати" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñигналу:" +msgstr "З'єднати Ñигнал: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "Помилка з'єднаннÑ" +msgstr "Редагувати з’єднаннÑ: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "Ви Ñправді хочете запуÑтити декілька проектів одночаÑно?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Ви Ñправді хочете вилучити уÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· Ñигналу «%s»?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -698,22 +675,19 @@ msgstr "Сигнали" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Ви Ñправді хочете вилучити уÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· цього Ñигналу?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "Роз'єднати" +msgstr "Роз'єднати уÑÑ–" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Редагувати" +msgstr "Змінити…" #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Методи" +msgstr "Перейти до методу" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -744,17 +718,14 @@ msgstr "Ðещодавні:" msgid "Search:" msgstr "Пошук:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Збіги:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "ОпиÑ:" @@ -815,9 +786,10 @@ msgid "Search Replacement Resource:" msgstr "Знайти замінний реÑурÑ:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -850,8 +822,8 @@ msgid "Error loading:" msgstr "Помилка завантаженнÑ:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ у зв'Ñзку з відÑутніми залежноÑÑ‚Ñми Ñцени:" +msgid "Load failed due to missing dependencies:" +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ через неÑтачу залежноÑтей:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -909,14 +881,6 @@ msgstr "Змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñловника" msgid "Thanks from the Godot community!" msgstr "СпаÑибі від Ñпільноти Godot!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "Гаразд" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Ðвтори Ñ€ÑƒÑˆÑ–Ñ Godot" @@ -1092,8 +1056,7 @@ msgid "Bus options" msgstr "Опції шини" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Дублювати" @@ -1264,8 +1227,9 @@ msgstr "ШлÑÑ…:" msgid "Node Name:" msgstr "Ім'Ñ Ð’ÑƒÐ·Ð»Ð°:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "Ім'Ñ" @@ -1335,26 +1299,29 @@ msgid "Template file not found:" msgstr "Файл шаблону не знайдено:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Вибрати поточну теку" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Файл Ñ–Ñнує, перезапиÑати його?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "Вибрати поточну теку" +msgid "Select This Folder" +msgstr "Вибрати цю теку" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Копіювати шлÑÑ…" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "Показати в файловому менеджері" +msgid "Open in File Manager" +msgstr "Відкрити у менеджері файлів" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "Показати в файловому менеджері" +msgid "Show in File Manager" +msgstr "Показати у менеджері файлів" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1389,7 +1356,8 @@ msgid "Open a File or Directory" msgstr "Відкрити файл або каталог" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "Зберегти" @@ -1447,8 +1415,7 @@ msgstr "Каталоги та файли:" msgid "Preview:" msgstr "Попередній переглÑд:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "Файл:" @@ -1464,24 +1431,11 @@ msgstr "Сканувати Ñирці" msgid "(Re)Importing Assets" msgstr "Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ñ–Ð²" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "Пошук довідки" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "СпиÑок клаÑів:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "Пошук клаÑів" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "Верхівка" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "КлаÑ:" @@ -1498,28 +1452,28 @@ msgid "Brief Description:" msgstr "СтиÑлий опиÑ:" #: editor/editor_help.cpp -msgid "Members" -msgstr "Члени" +msgid "Properties" +msgstr "ВлаÑтивоÑті" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "Члени:" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "ВлаÑтивоÑті:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "Публічні методи" +msgid "Methods" +msgstr "Методи" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "Публічні методи:" +msgid "Methods:" +msgstr "Методи:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "Тема елементів ГІК" +msgid "Theme Properties" +msgstr "ВлаÑтивоÑті теми" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "Тема елементів ГІК:" +msgid "Theme Properties:" +msgstr "ВлаÑтивоÑті теми:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1546,12 +1500,16 @@ msgid "Constants:" msgstr "КонÑтанти:" #: editor/editor_help.cpp -msgid "Description" -msgstr "ОпиÑ" +msgid "Class Description" +msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу:" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "Підручники у інтернеті:" +msgstr "Підручники в інтернеті:" #: editor/editor_help.cpp msgid "" @@ -1564,12 +1522,12 @@ msgstr "" "щодо їхнього ÑтвореннÑ[/url][/color]." #: editor/editor_help.cpp -msgid "Properties" -msgstr "ВлаÑтивоÑті" +msgid "Property Descriptions" +msgstr "ОпиÑи влаÑтивоÑтей" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑтей:" +msgid "Property Descriptions:" +msgstr "ОпиÑи влаÑтивоÑтей:" #: editor/editor_help.cpp msgid "" @@ -1580,12 +1538,12 @@ msgstr "" "[url=$url]Ñтворіть його[/url][/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "Методи" +msgid "Method Descriptions" +msgstr "ОпиÑи методів" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ñ–Ð²:" +msgid "Method Descriptions:" +msgstr "ОпиÑи методів:" #: editor/editor_help.cpp msgid "" @@ -1595,18 +1553,58 @@ msgstr "" "У поточній верÑÑ–Ñ— немає опиÑу цього методу. Будь лаÑка, [color=$color][url=" "$url]Ñтворіть його[/url][/color]!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Пошук довідки" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Показати уÑе" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Лише клаÑи" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Лише методи" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Лише Ñигнали" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Лише Ñталі" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Лише влаÑтивоÑті" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "Лише влаÑтивоÑті теми" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Тип члена" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "КлаÑ" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "ВлаÑтивіÑть:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Множина" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "Ð’Ñтановити кратніÑть:" #: editor/editor_log.cpp msgid "Output:" @@ -1634,6 +1632,11 @@ msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати проект, код пом msgid "Error saving resource!" msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÑурÑу!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "Гаразд" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "Зберегти реÑÑƒÑ€Ñ Ñк..." @@ -1652,7 +1655,7 @@ msgstr "Помилка при збереженні." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s». Файл могло бути переÑунуто або вилучено." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1688,12 +1691,22 @@ msgstr "Ð¦Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ може бути виконана без кР#: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ñцену. Вірогідно, залежноÑті (екземплÑри або " "уÑпадковані) не задоволені." +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Ðеможливо перезапиÑати Ñцену, Ñка Ñ” ще відкритою!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ бібліотеку Ñіток Ð´Ð»Ñ Ð·Ð»Ð¸Ñ‚Ñ‚Ñ!" @@ -1952,6 +1965,14 @@ msgstr "Ðеможливо завантажити Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÑкриР#: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" +"Ðеможливо завантажити Ñкрипт Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· шлÑху «%s». ЗдаєтьÑÑ, у коді Ñ” " +"помилка, будь лаÑка, перевірте ÑинтакÑиÑ." + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Ðе вдаєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñкрипт Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· шлÑху: '%s' Базовий тип не Ñ” " @@ -2001,15 +2022,18 @@ msgstr "Видалити компонуваннÑ" msgid "Default" msgstr "Типовий" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "Показати у файловій ÑиÑтемі" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Відтворити Ñцену" +msgstr "Відтворити цю Ñцену" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Закрити інші вкладки" +msgstr "Закрити вкладку" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2084,7 +2108,7 @@ msgid "Save Scene" msgstr "Зберегти Ñцену" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "Зберегти вÑÑ– Ñцени" #: editor/editor_node.cpp @@ -2113,7 +2137,7 @@ msgid "Undo" msgstr "СкаÑувати" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Повернути" @@ -2142,15 +2166,15 @@ msgid "Tools" msgstr "ІнÑтрументи" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Відкрити менеджер проектів?" +msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚ÐµÐºÐ¸ даних проекту" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "Вийти в ÑпиÑок проектів" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "ДіагноÑтика" @@ -2258,18 +2282,16 @@ msgid "Toggle Fullscreen" msgstr "Перемикач повноекранного режиму" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Параметри редактора" +msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚ÐµÐºÐ¸ даних/параметрів редактора" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚ÐµÐºÐ¸ даних редактора" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Параметри редактора" +msgstr "Відкрити теку параметрів редактора" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2279,10 +2301,6 @@ msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ екÑпорту" msgid "Help" msgstr "Довідка" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "КлаÑи" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2353,13 +2371,12 @@ msgstr "Відтворити вибіркову Ñцену" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "Зміна відеодрайвера потребує перезапуÑку редактора." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Зберегти та вийти" +msgstr "Зберегти Ñ– перезапуÑтити" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2377,27 +2394,26 @@ msgstr "Оновлювати зміни" msgid "Disable Update Spinner" msgstr "Вимкнути Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "ІнÑпектор" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Імпортувати" #: editor/editor_node.cpp -msgid "Node" -msgstr "Вузол" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "Файлова ÑиÑтема" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "ІнÑпектор" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "Вузол" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Розгорнути вÑе" +msgstr "Розгорнути нижню панель" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2476,9 +2492,8 @@ msgid "Thumbnail..." msgstr "Мініатюра..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Редагувати полігон" +msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ°" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2502,15 +2517,13 @@ msgid "Status:" msgstr "СтатуÑ:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "Редагувати" +msgstr "Редагувати:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Почати!" +msgstr "Початок" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2532,7 +2545,7 @@ msgstr "Кадр %" msgid "Physics Frame %" msgstr "Фізичний кадр %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "ЧаÑ:" @@ -2556,27 +2569,46 @@ msgstr "ЧаÑ" msgid "Calls" msgstr "Виклики" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "Увімкнено" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Шар" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "Біт %d, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %d." +msgstr "Біт %d, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[Порожньо]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "Призначити" +msgstr "Призначити…" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"Ðеможливо Ñтворити ViewportTexture на оÑнові реÑурÑів, Ñкі збережено Ñк " +"файл.\n" +"РеÑÑƒÑ€Ñ Ð¼Ð°Ñ” належати до Ñцени." + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"Ðеможливо Ñтворити ViewportTexture на оÑнові цього реÑурÑу, оÑкільки його не " +"вÑтановлено Ñк локальний щодо Ñцени.\n" +"Будь лаÑка, увімкніть влаÑтивіÑть «Локальний щодо Ñцени» Ð´Ð»Ñ Ð½ÑŒÐ¾Ð³Ð¾ (Ñ– уÑÑ–Ñ… " +"реÑурÑів, що його міÑÑ‚Ñть, аж до вузла)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2595,10 +2627,6 @@ msgstr "Ðовий %s" msgid "Make Unique" msgstr "Зробити унікальним" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "Показати в файловій ÑиÑтемі" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2607,7 +2635,8 @@ msgstr "Показати в файловій ÑиÑтемі" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "Ð’Ñтавити" @@ -2620,9 +2649,8 @@ msgstr "Перетворити на %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Відкрити в редакторі" +msgstr "Відкрити вікно редактора" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -2630,25 +2658,23 @@ msgstr "Позначений вузол не Ñ” панеллю переглÑÐ´Ñ #: editor/editor_properties_array_dict.cpp msgid "Size: " -msgstr "" +msgstr "Розмір: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "Сторінка: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "Ðова назва:" +msgstr "Ðовий ключ:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Ðова назва:" +msgstr "Ðове значеннÑ:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "Додати пару ключ-значеннÑ" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2741,9 +2767,8 @@ msgid "Can't open export templates zip." msgstr "Ðеможливо відкрити ZIP-файл шаблону екÑпорту." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "Ðеправильний формат version.txt у шаблонах." +msgstr "Ðеправильний формат version.txt у шаблонах: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2808,6 +2833,8 @@ msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Ðе вдалоÑÑ Ð²Ñтановити шаблони. Проблемні архіви із шаблонами можна знайти " +"тут: «%s»." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2888,9 +2915,8 @@ msgid "Download Templates" msgstr "Завантажити шаблони" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "Виберіть дзеркало зі ÑпиÑку: " +msgstr "Виберіть дзеркало зі ÑпиÑку: (Shift+клацаннÑ: відкрити у браузері)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -2899,19 +2925,21 @@ msgstr "" "тип кешу!" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "Вибране" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" "Ðеможливо перейти до '%s' , оÑкільки він не був знайдений в файловій ÑиÑтемі!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "ПереглÑд елементів у виглÑді Ñітки мініатюр" +msgstr "ПереглÑд елементів у виглÑді Ñітки еÑкізів." #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "ПереглÑд елементів Ñк ÑпиÑок" +msgstr "ПереглÑд елементів Ñк ÑпиÑок." #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2939,7 +2967,7 @@ msgstr "Помилка дублюваннÑ:" msgid "Unable to update dependencies:" msgstr "Ðеможливо оновити залежноÑті:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "Ім'Ñ Ð½Ðµ вказано" @@ -2976,22 +3004,6 @@ msgid "Duplicating folder:" msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÐ¸:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Розгорнути вÑе" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Згорнути вÑе" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Перейменувати..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "ПереміÑтити до..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Відкрити Ñцену(и)" @@ -3000,6 +3012,14 @@ msgid "Instance" msgstr "ЕкземплÑÑ€" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "Додати до вибраного" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "Вилучити з вибраного" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Редагувати залежноÑті..." @@ -3007,19 +3027,33 @@ msgstr "Редагувати залежноÑті..." msgid "View Owners..." msgstr "ПереглÑнути влаÑників..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Перейменувати..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Дублювати..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "ПереміÑтити до..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "Ðовий Ñкрипт" +msgstr "Створити Ñкрипт…" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Зберегти реÑÑƒÑ€Ñ Ñк..." +msgstr "Створити реÑурÑ…" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "Розгорнути вÑе" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "Згорнути вÑе" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3041,29 +3075,18 @@ msgid "Re-Scan Filesystem" msgstr "ПереÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "Переключити ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ‚ÐµÐºÐ¸ Ñк обране" +msgid "Toggle split mode" +msgstr "Перемкнути режим поділу" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "Вибрати поточну редаговану вкладену плитку." +msgid "Search files" +msgstr "Шукати файли" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "Додати вибрану Ñцену(и), Ñк нащадка вибраного вузла." #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Пошук клаÑів" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3071,51 +3094,37 @@ msgstr "" "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²,\n" "будь лаÑка, зачекайте..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "ПереміÑтити" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "У вказаному каталозі вже міÑтитьÑÑ Ñ‚ÐµÐºÐ° із вказано назвою." +msgstr "У вказаному каталозі вже міÑтитьÑÑ Ñ‚ÐµÐºÐ° або файл із вказано назвою." #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "ПерезапиÑати" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "Створити Ñценарій" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "Знайти плитку" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "Знайти" +msgstr "Створити Ñкрипт" #: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "Цілі Ñлова" +msgid "Find in Files" +msgstr "Знайти у файлах" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "Враховувати регіÑтр" +msgid "Find:" +msgstr "Знайти:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "Тека:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "Режим фільтруваннÑ:" +msgid "Filters:" +msgstr "Фільтри:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3131,52 +3140,48 @@ msgid "Cancel" msgstr "СкаÑувати" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "Знайти: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "Замінити" +msgstr "Замінити: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "Замінити вÑÑ–" +msgstr "Замінити вÑе (без ÑкаÑовуваннÑ)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "ЗбереженнÑ..." +msgstr "Шукаємо…" #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "Шукати текÑÑ‚" +msgstr "Пошук завершено" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "ПОМИЛКÐ: Ðазва анімації вже Ñ–Ñнує!" +msgstr "Група із такою назвою вже Ñ–Ñнує." #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "Ðекоректна назва." +msgstr "некоректна назва групи." #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Групи" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "Додати до групи" +msgstr "Вузли поза групою" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "Фільтрувати вузли" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "Додати до групи" +msgstr "Вузли у групі" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3187,9 +3192,8 @@ msgid "Remove from Group" msgstr "Вилучити з групи" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "Групи" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð°Ð¼Ð¸" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3296,17 +3300,12 @@ msgstr "Переімпортувати" msgid "Failed to load resource." msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ реÑурÑ." -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Гаразд" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "Розгорнути вÑÑ– влаÑтивоÑті" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "Згорнути вÑÑ– влаÑтивоÑті" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3323,9 +3322,8 @@ msgid "Paste Params" msgstr "Ð’Ñтавити параметри" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Ð’ буфері обміну немає реÑурÑу!" +msgstr "Редагувати буфер реÑурÑів" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3368,9 +3366,8 @@ msgid "Object properties." msgstr "ВлаÑтивоÑті об'єкта." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Фільтрувати вузли" +msgstr "Фільтрувати влаÑтивоÑті" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3385,37 +3382,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "Виберіть вузол Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñигналів та груп." #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Редагувати полігон" +msgstr "Редагувати додаток" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Створити розв'Ñзок C#" +msgstr "Створити додаток" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Плаґіни" +msgstr "Ðазва додатка:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "Підтека:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Мова" +msgstr "Мова:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Скрипт Ñ” коректним" +msgstr "Ðазва Ñкрипту:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "ЗадіÑти зараз?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3474,15 +3466,16 @@ msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "Завантажити" +msgstr "Завантажити…" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." msgstr "" +"Ðе можна викориÑтовувати цей тип вузлів. Можна викориÑтовувати лише кореневі " +"вузли." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3492,66 +3485,66 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree Ñ” неактивним.\n" +"Ðктивуйте, щоб уможливити відтвореннÑ. ОзнайомтеÑÑ Ñ–Ð· попередженнÑми щодо " +"вузлів, Ñкщо не вдаєтьÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Ð’Ñтановити позицію Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñƒ проÑторі" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." msgstr "" +"Виберіть Ñ– переÑуньте точки. Створити точки можна за допомогою ÐºÐ»Ð°Ñ†Ð°Ð½Ð½Ñ " +"правою кнопкою миші." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Видалити точки" +msgstr "Створити точки." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "ПКМ: Стерти точку." +msgstr "Витерти точки." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "ПереміÑтити точку" +msgstr "Точка" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Ðнімаційний вузол" +msgstr "Відкрити вузол анімації" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð´Ñ–Ñ— «%s» вже Ñ–Ñнує!" +msgstr "Трикутник вже Ñ–Ñнує" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D не належить до вузла AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Трикутників не Ñ–Ñнує, отже Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½Ðµ Ñ” можливим." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "Створити трикутники з'єднаннÑм точок." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." -msgstr "" +msgstr "Вилучити точки Ñ– трикутники." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Створити трикутники Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾ (а не вручну)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3559,6 +3552,11 @@ msgstr "" msgid "Snap" msgstr "ПрилипаннÑ" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "Змішувати:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3566,20 +3564,25 @@ msgstr "Редагувати фільтри" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Вузол Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ðµ можна додавати до дерева злиттÑ." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"Ðе вдалоÑÑ Ð·'єднати. Можливо, порт вже викориÑтано або з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ” " +"некоректним." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" +"Ðе вÑтановлено відтворювача анімації, отже неможливо отримати назви доріжок." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." msgstr "" +"Ðабір шлÑхів відтворювача Ñ” некоректним, тому неможливо отримати назви " +"доріжок." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -3587,23 +3590,22 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Відтворювач анімації не має коректного шлÑху до кореневого вузла, тому " +"неможливо отримати назви доріжок." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "Додати вузол" +msgstr "Додати вузол…" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Редагувати фільтри" +msgstr "Редагувати фільтровані доріжки:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "Редагований дочірній елемент" +msgstr "Увімкнути фільтруваннÑ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3631,14 +3633,12 @@ msgid "Remove Animation" msgstr "Вилучити анімацію" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "ПОМИЛКÐ: неправильне ім'Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—!" +msgstr "Ðекоректна назва анімації!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "ПОМИЛКÐ: Ðазва анімації вже Ñ–Ñнує!" +msgstr "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ–Ð· такою назвою вже Ñ–Ñнує!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3662,14 +3662,12 @@ msgid "Duplicate Animation" msgstr "Дублювати анімацію" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ПОМИЛКÐ: Ðемає анімації Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ!" +msgstr "Ðемає анімації Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "ПОМИЛКÐ: Ðемає анімаційного реÑурÑу в буфері обміну!" +msgstr "У буфері обміну немає реÑурÑу анімації!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3680,9 +3678,8 @@ msgid "Paste Animation" msgstr "Ð’Ñтавити анімацію" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ПОМИЛКÐ: Ðемає анімації Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ!" +msgstr "Ðемає анімації Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3727,14 +3724,12 @@ msgid "New" msgstr "Ðовий" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Переходи" +msgstr "Редагувати переходи…" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "Відкрити в редакторі" +msgstr "Відкрити в інÑпекторі" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3793,9 +3788,8 @@ msgid "Include Gizmos (3D)" msgstr "Включити ÒÑ–Ð·Ð¼Ð¾Ñ (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Ð’Ñтавити анімацію" +msgstr "Пришпилити AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3827,32 +3821,31 @@ msgstr "Ð§Ð°Ñ Ð¼Ñ–Ð¶ анімаціÑми" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "" +msgstr "Кінець" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Ðегайно" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Синхронізувати" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Ðа кінець" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Подорож" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð¾Ð³Ð¾ переходу потрібен початковий Ñ– кінцевий вузол." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Ðе в реÑурÑному шлÑху." +msgstr "Ðе вÑтановлено реÑурÑу Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñƒ шлÑху: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3860,34 +3853,35 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Позначте Ñ– переÑуньте вузли.\n" +"ÐšÐ»Ð°Ñ†Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¾ÑŽ — додати нові вузли.\n" +"Shift+ÐºÐ»Ð°Ñ†Ð°Ð½Ð½Ñ Ð»Ñ–Ð²Ð¾ÑŽ — Ñтворити з'єднаннÑ." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Створити новий %s" +msgstr "Створити вузли." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Приєднати вузли" +msgstr "З'єднати вузли." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "Вилучити обрану доріжку." +msgstr "Вилучити позначений вузол або перехід" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Увімкнути або вимкнути автоматичне Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— анімації при запуÑку, " +"перезапуÑку або позиціюванні на нуль." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Ð’Ñтановити кінець анімації. КориÑно Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… переходів." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Перехід" +msgstr "Перехід: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3941,10 +3935,6 @@ msgid "Amount:" msgstr "ОбÑÑг:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "Змішувати:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "Ð—Ð¼Ñ–ÑˆÑƒÐ²Ð°Ð½Ð½Ñ 0:" @@ -4085,14 +4075,12 @@ msgid "Asset Download Error:" msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ñƒ:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "ЗавантаженнÑ" +msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ (%s з %s)…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "ЗавантаженнÑ" +msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…â€¦" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4119,14 +4107,12 @@ msgid "Download for this asset is already in progress!" msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ активу вже виконуєтьÑÑ!" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "перший" +msgstr "Перший" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°" +msgstr "Ðазад" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4134,7 +4120,7 @@ msgstr "Далі" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "ОÑтанній" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4261,29 +4247,28 @@ msgid "Create new horizontal and vertical guides" msgstr "Створити нові горизонтальні та вертикальні напрÑмні" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "ПереміÑтити опорну точку" +msgstr "ПереÑунути опорну точку" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "Редагувати CanvasItem" +msgstr "Обертати CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "ПереміÑтити дію" +msgstr "ПереÑунути прив'Ñзку" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "Редагувати CanvasItem" +msgstr "Змінити розмір CanvasItem" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "МаÑштабувати CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "Редагувати CanvasItem" +msgstr "ПереÑунути CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4302,19 +4287,16 @@ msgid "Paste Pose" msgstr "Ð’Ñтавити позу" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" -msgstr "ЗменшеннÑ" +msgstr "Зменшити" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" -msgstr "ЗменшеннÑ" +msgstr "Відновити початковий маÑштаб" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" -msgstr "Збільшувати" +msgstr "Збільшити" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Select Mode" @@ -4347,6 +4329,10 @@ msgid "Rotate Mode" msgstr "Режим повороту" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "Режим маÑштабуваннÑ" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4364,16 +4350,14 @@ msgid "Pan Mode" msgstr "Режим панорамуваннÑ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "Перемикає прив'ÑзуваннÑ" +msgstr "Увімкнути або вимкнути прив'ÑзуваннÑ." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "За допомогою функції прив'Ñзки" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "Параметри прив'Ñзки" @@ -4415,9 +4399,8 @@ msgid "Snap to node sides" msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð´Ð¾ боків вузла" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð´Ð¾ прив'Ñзки вузла" +msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð´Ð¾ центру вузла" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4446,6 +4429,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "Відновлює можливіÑть вибору нащадків об'єкта." #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "Параметри каркаÑа" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "Показати кіÑтки" @@ -4459,12 +4446,11 @@ msgstr "ОчиÑтити ІК-ланцюг" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Створити нетипові кіÑтки з вузлів" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "ОчиÑтити кіÑтки" +msgstr "ОчиÑтити нетипові кіÑтки" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4497,6 +4483,10 @@ msgid "Show Viewport" msgstr "Показати панель переглÑду" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "Показати піктограми Ð³Ñ€ÑƒÐ¿ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° блокуваннÑ" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "Центрувати на вибраному" @@ -4509,9 +4499,8 @@ msgid "Layout" msgstr "Макет" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Ð’Ñтавити ключі" +msgstr "Ð’Ñтавити ключі." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4577,9 +4566,8 @@ msgid "Set Handle" msgstr "Ð’Ñтановити обробник" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "ЧаÑтинки" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4737,7 +4725,7 @@ msgstr "Вбудована Ñітка не має типу ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "UV розгортка не вдалаÑÑ, можливо у поліÑеткі не однозв'Ñзна форма?" +msgstr "UV-розгортка не вдалаÑÑ, можливо у поліÑеткі не однозв'Ñзна форма?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." @@ -4938,9 +4926,8 @@ msgid "Create Navigation Polygon" msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ полігону" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ AABB" +msgid "Generating Visibility Rect" +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ð°Ñті видимоÑті" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4969,6 +4956,11 @@ msgstr "ОчиÑтити маÑку випромінюваннÑ" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "Перетворити на CPUParticles" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "ЧаÑтинки" @@ -5038,13 +5030,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "Потрібен матеріал типу 'ParticlesMaterial'." #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "Генерувати AABB" +msgid "Generating AABB" +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ AABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "Конвертувати у ВЕРХÐІЙ РЕГІСТР" +msgid "Generate AABB" +msgstr "Генерувати AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5132,12 +5123,12 @@ msgstr "Параметри" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Віддзеркалити кути елемента керуваннÑ" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Віддзеркалити довжини елемента керуваннÑ" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5172,90 +5163,79 @@ msgid "Remove In-Control Point" msgstr "Вилучити вхідну керувальну точку" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "ПереміÑтити точку" +msgstr "ПереÑунути з'єднаннÑ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "ВлаÑтивіÑть skeleton Polygon2D не вказує на вузол Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Показати кіÑтки" +msgstr "Синхронізувати кіÑтки" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "Створити UV карту" +msgstr "Створити UV-карту" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Створити полігон" +msgstr "Створити полігон Ñ– UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Розділити точку." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "Поділ не може Ñтворювати наÑвного ребра." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð´Ñ–Ñ— «%s» вже Ñ–Ñнує!" +msgstr "Поділ вже Ñ–Ñнує." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Додати точку" +msgstr "Додати поділ" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Ðеправильний шлÑÑ…" +msgstr "Ðекоректний поділ: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "Вилучити точку" +msgstr "Вилучити поділ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "Перетворити UV карту" +msgstr "Перетворити UV-карту" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Малювати ваги кіÑток" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "Polygon 2D UV редактор" +msgstr "Редактор плоÑких полігонів UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Редагувати полігон" +msgstr "Полігон" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Розділити шлÑÑ…" +msgstr "ДробленнÑ" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Зробити кіÑтки" +msgstr "КіÑтки" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "Створити полігон" @@ -5289,24 +5269,23 @@ msgstr "МаÑштабувати полігон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "З'єднати дві точки Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ñ€Ñ–Ð·Ñƒ" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Спочатку виберіть елемент параметра!" +msgstr "Виберіть поділ Ð´Ð»Ñ Ð²Ð¸Ñ‚Ð¸Ñ€Ð°Ð½Ð½Ñ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Малювати ваги вказаною інтенÑивніÑтю" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "СкаÑувати Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð°Ð³Ð¸ вказаною інтенÑивніÑтю" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "РадіуÑ:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5321,9 +5300,8 @@ msgid "Clear UV" msgstr "ОчиÑтити UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Параметри GridMap" +msgstr "Параметри Ñітки" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5334,34 +5312,28 @@ msgid "Grid" msgstr "Сітка" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ð²'Ñзки" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñітки:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "ВідÑтуп Ñітки:" +msgstr "ВідÑтуп Ñітки за X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "ВідÑтуп Ñітки:" +msgstr "ВідÑтуп Ñітки за Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Крок Ñітки:" +msgstr "Крок Ñітки за X:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Крок Ñітки:" +msgstr "Крок Ñітки за Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "МаÑштабувати полігон" +msgstr "Синхронізувати кіÑтки з полігоном" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5389,22 +5361,22 @@ msgid "Paste Resource" msgstr "Ð’Ñтавити реÑурÑ" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "Відкрити в редакторі" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "ЕкземплÑÑ€:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "Тип:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "Відкрити в редакторі" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "Завантажити реÑурÑ" @@ -5415,12 +5387,11 @@ msgstr "Передзавантажувач реÑурÑів" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree не міÑтить вÑтановлено шлÑху до AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Дерево анімації недійÑне." +msgstr "ШлÑÑ… до AnimationPlayer Ñ” некоректним" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5431,19 +5402,20 @@ msgid "Close and save changes?" msgstr "Закрити та зберегти зміни?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ тайлів!" +msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запиÑати TextFile:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Помилка: не вдалоÑÑ Ñтворити Ñкрипт у файловій ÑиÑтемі." +msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ тайлів!" +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5462,19 +5434,16 @@ msgid "Error importing" msgstr "Помилка імпортуваннÑ" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Створити теку..." +msgstr "Створити текÑтовий файл…" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "Відкрити файл" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Зберегти Ñк..." +msgstr "Зберегти файл Ñк…" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5490,7 +5459,7 @@ msgstr " ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° клаÑ" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Увімкнути або вимкнути упорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° абеткою у ÑпиÑку методів." #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5510,20 +5479,19 @@ msgstr "ПереміÑтити вниз" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "ÐаÑтупний Ñценарій" +msgstr "ÐаÑтупний Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "Попередній Ñценарій" +msgstr "Попередній Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "File" msgstr "Файл" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "ПереглÑд файлів" +msgstr "Ðовий текÑтовий файл" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5531,19 +5499,15 @@ msgstr "Зберегти вÑе" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "М'Ñко перезавантажити Ñценарії" +msgstr "М'Ñко перезавантажити Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" msgstr "Копіювати шлÑÑ… до Ñкрипту" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "Показати в файловій ÑиÑтемі" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "Попередній файл" +msgid "History Previous" +msgstr "Попередній у журналі" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5584,7 +5548,7 @@ msgstr "ЗапуÑтити" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Перемкнути панель Ñценаріїв" +msgstr "Перемкнути панель Ñкриптів" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5613,7 +5577,7 @@ msgid "Keep Debugger Open" msgstr "Залишити зневаджувач відкритим" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "Ð—Ð½ÐµÐ²Ð°Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою зовнішнього редактора" #: editor/plugins/script_editor_plugin.cpp @@ -5621,10 +5585,6 @@ msgid "Open Godot online documentation" msgstr "Відкрити онлайнову документацію Godot" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "Пошук в ієрархії клаÑів." - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "Пошук довідкової документації." @@ -5661,39 +5621,28 @@ msgid "Debugger" msgstr "Зневаджувач" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "Пошук довідки" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "Пошук клаÑів" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" -"Вбудовані Ñкрипти можна змінити тільки тоді, коли завантажено Ñцену, до Ñкої " -"вони належать" +msgid "Search Results" +msgstr "Результати пошуку" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Ð Ñдок:" +msgstr "Ð Ñдок" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ігнорувати)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "Перейти до функції" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Можна перетÑгнути тільки реÑÑƒÑ€Ñ Ð· файлової ÑиÑтеми." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "Завершити Ñимвол" +msgstr "Шукати Ñимвол" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5717,11 +5666,11 @@ msgstr "З Великої" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "ЗаÑіб підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÑинтакÑиÑу" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Стандартний" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5774,11 +5723,11 @@ msgid "Trim Trailing Whitespace" msgstr "Обрізати кінцевий пробіл" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "Перетворити відÑтуп на пропуÑки" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "Перетворити відÑтуп на табулÑції" #: editor/plugins/script_text_editor.cpp @@ -5795,36 +5744,27 @@ msgid "Remove All Breakpoints" msgstr "Вилучити вÑÑ– точки зупинки" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "Перейти до наÑтупної точки зупинки" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "Перейти до попередньої точки зупинки" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "Конвертувати у ВЕРХÐІЙ РЕГІСТР" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "Конвертувати в нижній регіÑтр" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Знайти попереднє" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "Фільтрувати файли..." +msgid "Find in Files..." +msgstr "Знайти у файлах…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." +msgid "Go to Function..." msgstr "Перейти до функції..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "Перейти до Ñ€Ñдка..." #: editor/plugins/script_text_editor.cpp @@ -5837,40 +5777,35 @@ msgstr "Шейдер" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "У цього каркаÑа немає кіÑток, Ñтворіть хоч ÑкіÑÑŒ дочірні вузли Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Одинак (шаблон проектуваннÑ)" +msgstr "ПлоÑкий каркаÑ" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Створити вільну позу (з кіÑток)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Ð’Ñтановити кіÑтки Ð´Ð»Ñ Ð²Ñ–Ð»ÑŒÐ½Ð¾Ñ— пози" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Створити навігаційну Ñітку" +msgstr "Створити фізичний кіÑÑ‚Ñк" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Одинак (шаблон проектуваннÑ)" +msgstr "КаркаÑ" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Створити розв'Ñзок C#" +msgstr "Створити фізичний каркаÑ" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Відтворити" +msgstr "Відтворити IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5921,6 +5856,14 @@ msgid "Animation Key Inserted." msgstr "Ð’Ñтавлено ключ анімації." #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "ХилитаннÑ" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "ВідхиленнÑ" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "Ðамальовано об'єктів" @@ -6005,9 +5948,8 @@ msgid "This operation requires a single selected node." msgstr "Ð¦Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” одного обраного вузла." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "ПереглÑд відомоÑтей" +msgstr "ЗафікÑувати Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6054,9 +5996,8 @@ msgid "Doppler Enable" msgstr "Ефект Доплера" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду Ñітки" +msgstr "Кінематичний переглÑд" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6087,6 +6028,10 @@ msgid "Freelook Speed Modifier" msgstr "Коефіцієнт швидкоÑті оглÑду" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду заблоковано" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "Вікно XForm" @@ -6189,11 +6134,6 @@ msgid "Tool Scale" msgstr "ІнÑтрумент маÑштабуваннÑ" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "Прив'Ñзати до Ñітки" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¾Ð³Ð»Ñду" @@ -6203,7 +6143,7 @@ msgstr "ПеретвореннÑ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "Приліпити об'єкт до підлоги" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6234,9 +6174,8 @@ msgid "4 Viewports" msgstr "4 панелі переглÑду" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "ПереглÑд гаджетів" +msgstr "Гаджети" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6312,50 +6251,46 @@ msgid "Post" msgstr "ПіÑлÑ" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Сітка порожнÑ!" +msgstr "Спрайт порожній!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." msgstr "" +"Ðеможливо перетворити Ñпрайт, викориÑтовуючи кадри анімації Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ " +"Ñітки." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Ðекоректна геометріÑ, неможливо замінити Ñіткою." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "Кадри Ñпрайта" +msgstr "Спрайт" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Перетворити на %s" +msgstr "Перетворити на плоÑку Ñітку" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Створити Ñітку обведеннÑ" +msgstr "Створити плоÑку Ñітку" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "СпрощеннÑ: " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "" +msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Попередній переглÑд" +msgstr "Оновити переглÑд" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Параметри" +msgstr "Параметри:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6459,10 +6394,9 @@ msgstr "Крок:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Інт.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "ОблаÑть текÑтури" @@ -6595,9 +6529,12 @@ msgid "Erase Selection" msgstr "Витерти позначене" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "Ðекоректна назва." +msgstr "Виправити некоректні плитки" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "Вирізати позначене" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6620,7 +6557,6 @@ msgid "Erase TileMap" msgstr "Витерти карту плиток" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" msgstr "Знайти плитку" @@ -6645,35 +6581,36 @@ msgid "Pick Tile" msgstr "Вибрати плитку" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "Вилучити виділене" +msgid "Copy Selection" +msgstr "Копіювати позначене" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 0 градуÑів" +msgid "Rotate left" +msgstr "Обертати ліворуч" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 90 градуÑів" +msgid "Rotate right" +msgstr "Обертати праворуч" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 180 градуÑів" +msgid "Flip horizontally" +msgstr "Відзеркалити горизонтально" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 270 градуÑів" +msgid "Flip vertically" +msgstr "Віддзеркалити вертикально" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" +msgstr "ЗнÑти перетвореннÑ" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "Додати вузли з дерева" +msgstr "Додати текÑтури до TileSet" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "Видалити поточне поле" +msgstr "Вилучити поточну текÑтуру з TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6693,15 +6630,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Показувати назви плиток (Ñкщо утримують клавішу Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "Вилучити позначену текÑтуру Ñ– уÑÑ– плитки, у Ñких Ñ—Ñ— викориÑтано?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Вами не позначено текÑтури Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6712,76 +6649,76 @@ msgid "Merge from scene?" msgstr "Об'єднати зі Ñцени?" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +msgid "%s file(s) were not added because was already on the list." +msgstr "%s файлів не додано, оÑкільки вони вже були у ÑпиÑку." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"ПеретÑгніть елементи керуваннÑ, щоб змінити прÑмокутник.\n" +"Клацніть на іншій плитці, щоб редагувати Ñ—Ñ—." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" -"Ліва кнопка: вÑтановити.\n" -"Права кнопка: знÑти." +"Ліва кнопка: вÑтановити біт.\n" +"Права кнопка: знÑти біт.\n" +"Клацніть на іншій плитці, щоб редагувати Ñ—Ñ—." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Вибрати поточну редаговану вкладену плитку." +msgstr "" +"Вибрати поточну редаговану вкладену плитку.\n" +"Клацніть на іншій плитці, щоб редагувати Ñ—Ñ—." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" "Виберіть підплитку Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñк піктограми. Її також буде викориÑтано " -"Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… прив'Ñзок у режимі автоплитки." +"Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… прив'Ñзок у режимі автоплитки.\n" +"Клацніть на іншій плитці, щоб редагувати Ñ—Ñ—." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "Позначте підплитку Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ Ñ—Ñ— пріоритетноÑті." +msgstr "" +"Позначте підплитку Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ Ñ—Ñ— пріоритетноÑті.\n" +"Клацніть на іншій плитці, щоб редагувати Ñ—Ñ—." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Ð¦Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ може бути виконана без Ñцени." +msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑті не можна змінювати." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "Ðабір плитки" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "Вершини" +msgstr "Вершина" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" -msgstr "" +msgstr "Фрагмент" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Справа" +msgstr "Світло" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Шейдер" +msgstr "Візуальний шейдер" #: editor/project_export.cpp msgid "Runnable" @@ -6801,6 +6738,14 @@ msgstr "" "Ðе виÑтачає шаблонів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸ або шаблони пошкоджено:" #: editor/project_export.cpp +msgid "Release" +msgstr "ВипуÑк" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑього" + +#: editor/project_export.cpp msgid "Presets" msgstr "Ðабори" @@ -6809,6 +6754,10 @@ msgid "Add..." msgstr "Додати..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "ШлÑÑ… екÑпорту:" + +#: editor/project_export.cpp msgid "Resources" msgstr "РеÑурÑи" @@ -6871,6 +6820,14 @@ msgid "Export PCK/Zip" msgstr "ЕкÑпортувати PCK/Zip" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "Режим екÑпортуваннÑ?" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "ЕкÑпортувати уÑе" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Ðемає шаблонів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— платформи:" @@ -6883,22 +6840,20 @@ msgid "The path does not exist." msgstr "ШлÑху не Ñ–Ñнує." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "Будь лаÑка, виберіть теку, у Ñкій не міÑтитьÑÑ Ñ„Ð°Ð¹Ð»Ð° «project.godot»." +msgstr "Ðекоректний файл проекту «.zip»: у ньому немає файла «project.godot»." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Будь лаÑка, виберіть порожню теку." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Будь лаÑка, виберіть файл «project.godot»." +msgstr "Будь лаÑка, виберіть файл «project.godot» або «.zip»." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "У каталозі вже міÑтитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚ Godot." #: editor/project_manager.cpp msgid "Imported Project" @@ -6989,9 +6944,8 @@ msgid "Project Path:" msgstr "ШлÑÑ… проекту:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "ШлÑÑ… проекту:" +msgstr "ШлÑÑ… вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ:" #: editor/project_manager.cpp msgid "Browse" @@ -7113,7 +7067,6 @@ msgid "Mouse Button" msgstr "Кнопка миші" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" @@ -7130,18 +7083,16 @@ msgid "Rename Input Action Event" msgstr "Перейменувати подію за вхідною дією" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Змінити ім'Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—:" +msgstr "Змінити «мертву» зону дії" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Додати подію за вхідною дією" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "ПриÑтрій" +msgstr "УÑÑ– приÑтрої" #: editor/project_settings_editor.cpp msgid "Device" @@ -7188,24 +7139,20 @@ msgid "Wheel Down Button" msgstr "Кнопка коліщатка вниз" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Кнопка коліщатка вгору" +msgstr "Кнопка коліщатка ліворуч" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Права кнопка" +msgstr "Кнопка коліщатка праворуч" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Кнопка 6" +msgstr "Кнопка X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Кнопка 6" +msgstr "Кнопка X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7347,17 +7294,13 @@ msgstr "Параметри проекту (project.godot)" msgid "General" msgstr "\"Загальне\"" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "ВлаÑтивіÑть:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "Перевизначити на..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Щоб зміни набули чинноÑті редактор Ñлід перезапуÑтити" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7368,13 +7311,12 @@ msgid "Action:" msgstr "ДіÑ:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "ДіÑ:" +msgstr "ДіÑ" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "«Мертва» зона" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7484,10 +7426,6 @@ msgstr "Вибрати вузол" msgid "Bit %d, val %d." msgstr "Біт %d, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "ВлаÑтивоÑті:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "Вибір влаÑтивоÑті" @@ -7510,129 +7448,124 @@ msgstr "" "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ перетворене Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою заÑобу PVRTC:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Перейменувати" +msgstr "Пакетне перейменуваннÑ" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "ПрефікÑ" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "СуфікÑ" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Параметри прив'Ñзки" +msgstr "Додаткові параметри" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "ПідÑтавити" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Ім'Ñ Ð’ÑƒÐ·Ð»Ð°:" +msgstr "Ðазва вузла" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Ðазва батьківÑького запиÑу вузла, Ñкщо такий Ñ”" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Знайти тип вузла" +msgstr "Тип вузлів" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Поточна Ñцена" +msgstr "Ðазва поточної Ñцени" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Перейменувати" +msgstr "Ðазва кореневого вузла" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"ПоÑлідовний цілочиÑельний лічильник.\n" +"ПорівнÑйте параметри лічильника." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Лічильник на рівень" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" msgstr "" +"Якщо позначено, лічильник перезапуÑкатиметьÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— групи дочірніх " +"вузлів" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Початкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Крок:" +msgstr "Крок" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "Величина, на Ñку збільшуєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ вузла" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "ФаÑка" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Мінімальна кількіÑть цифр Ð´Ð»Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°.\n" +"Якщо цифр буде менше, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÑŽÐ²Ð°Ñ‚Ð¸Ð¼ÐµÑ‚ÑŒÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ð¼Ð¸ нулÑми." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Змінити вираз" +msgstr "Формальні вирази" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "ПоÑÑ‚-обробка" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "Ðе змінювати" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "ГорбатийРегіÑтр у під_креÑлюваннÑ" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "під_креÑÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ ГорбатийРегіÑтр" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "РегіÑтр" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" msgstr "нижній регіÑтр" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" msgstr "ВЕРХÐІЙ РЕГІСТР" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Скинути маÑштаб" +msgstr "Скинути" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "Помилка" @@ -7693,6 +7626,10 @@ msgid "Instance Scene(s)" msgstr "Сцени екземплÑра" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "Створити екземплÑÑ€ дочірньої Ñцени" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "Вилучити Ñкрипт" @@ -7729,6 +7666,14 @@ msgid "Save New Scene As..." msgstr "Зберегти нову Ñцену Ñк..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" +"Ð’Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Â«editable_instance» призведе до Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… значень Ð´Ð»Ñ " +"уÑÑ–Ñ… влаÑтивоÑтей вузла." + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "Редагований дочірній елемент" @@ -7737,34 +7682,28 @@ msgid "Load As Placeholder" msgstr "Завантажити Ñк заповнювач" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "Локальний" +msgstr "Зробити локальним" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Створити вузол" +msgstr "Створити кореневий вузол:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Сцена" +msgstr "ПлоÑка Ñцена" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Сцена" +msgstr "ПроÑторова Ñцена" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "УÑунути уÑпадкуваннÑ" +msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Вирізати вузли" +msgstr "Ðетиповий вузол" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7807,6 +7746,10 @@ msgid "Clear Inheritance" msgstr "УÑунути уÑпадкуваннÑ" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "Відкрити документацію" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "Вилучити вузли" @@ -7815,17 +7758,16 @@ msgid "Add Child Node" msgstr "Додати дочірній вузол" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "Створити екземплÑÑ€ дочірньої Ñцени" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Змінити тип" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "Розширити Ñкрипт" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "У цьому Ñ” ÑенÑ!" +msgstr "Зробити кореневим Ð´Ð»Ñ Ñцени" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7876,7 +7818,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Вилучити уÑпадковуваннÑ? (Без можливоÑті ÑкаÑувати!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Перемкнути видиміÑть" @@ -7885,12 +7826,11 @@ msgid "Node configuration warning:" msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑƒÐ·Ð»Ð°:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"Вузол міÑтить з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– групи\n" +"Вузол міÑтить з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– групи.\n" "Клацніть, щоб переглÑнути панель Ñигналів." #: editor/scene_tree_editor.cpp @@ -7910,27 +7850,24 @@ msgstr "" "Клацніть, щоб переглÑнути панель груп." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Відкрити Ñкрипт" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "Вузол заблоковано.\n" -"ÐатиÑніть, щоб розблокувати" +"ÐатиÑніть, щоб розблокувати." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "Дочірні об'єкти не можна позначити.\n" -"Клацніть, щоб зробити Ñ—Ñ… придатними до позначеннÑ" +"Клацніть, щоб зробити Ñ—Ñ… придатними до позначеннÑ." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7941,6 +7878,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer пришпилено.\n" +"ÐатиÑніть, щоб відшпилити." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7979,15 +7918,18 @@ msgid "N/A" msgstr "Ð/З" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Відкрити редактор Ñкриптів" +msgstr "Відкрити Ñкрипт або вибрати міÑце" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Порожній шлÑÑ…" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "Ðазва файла Ñ” порожньою" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "ШлÑÑ… не Ñ” локальним" @@ -8076,20 +8018,8 @@ msgid "Bytes:" msgstr "Байтів:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "ПопередженнÑ" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "Помилка:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "Джерело:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "ФункціÑ:" +msgid "Stack Trace" +msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8120,18 +8050,6 @@ msgid "Stack Frames" msgstr "СтоÑувати кадри" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "Змінна" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "Помилки:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека (Ñкщо заÑтоÑовне):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "ЗаÑіб профілюваннÑ" @@ -8220,9 +8138,8 @@ msgid "Change Camera Size" msgstr "Змінити розмір камери" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Змінити розміри заÑобу ÑповіщеннÑ" +msgstr "Змінити AABB ÑповіщеннÑ" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8249,38 +8166,32 @@ msgid "Change Capsule Shape Height" msgstr "Змінити виÑоту форми капÑули" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ñ„Ð¾Ñ€Ð¼Ð¸ капÑули" +msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ñ„Ð¾Ñ€Ð¼Ð¸ циліндра" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Змінити виÑоту форми капÑули" +msgstr "Змінити виÑоту форми циліндра" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Змінити довжину форми променÑ" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ð¾ÑвітленнÑ" +msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ñ†Ð¸Ð»Ñ–Ð½Ð´Ñ€Ð°" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Змінити виÑоту форми капÑули" +msgstr "Змінити виÑоту циліндра" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ñферичної форми" +msgstr "Змінити внутрішній Ñ€Ð°Ð´Ñ–ÑƒÑ Ñ‚Ð¾Ñ€Ð°" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ð¾ÑвітленнÑ" +msgstr "Змінити зовнішній Ñ€Ð°Ð´Ñ–ÑƒÑ Ñ‚Ð¾Ñ€Ð°" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8401,9 +8312,8 @@ msgid "GridMap Delete Selection" msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ GridMap" +msgstr "Вибір Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8486,9 +8396,8 @@ msgid "Clear Selection" msgstr "ОчиÑтити позначене" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "УÑе позначене" +msgstr "Заповнити позначене" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8559,12 +8468,8 @@ msgid "End of inner exception stack trace" msgstr "Кінець траÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ виключеннÑ" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "Запекти!" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "Створити навігаційну Ñітку." +msgid "Bake NavMesh" +msgstr "Запекти NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8791,14 +8696,12 @@ msgid "Connect Nodes" msgstr "Приєднати вузли" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Приєднати вузли" +msgstr "Приєднати дані вузла" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Приєднати вузли" +msgstr "Приєднати поÑлідовніÑть вузлів" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8845,6 +8748,10 @@ msgid "Base Type:" msgstr "Базовий тип:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Члени:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "ДоÑтупні вузли:" @@ -8881,9 +8788,8 @@ msgid "Paste Nodes" msgstr "Ð’Ñтавити вузли" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Члени" +msgstr "Редагувати член" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8942,17 +8848,16 @@ msgstr "" "out) або Ñ€Ñдок (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Вилучити вузол VisualScript" +msgstr "Шукати VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "Отримати" +msgid "Get %s" +msgstr "Отримати %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "Ð’Ñтановити %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9003,14 +8908,13 @@ msgstr "" "CanvasModulate. Працюватиме перший зі Ñтворених, решту буде проігноровано." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"У цього вузла немає дочірніх форм, отже він не може взаємодіÑти із " -"проÑтором.\n" +"У цього вузла немає форми, отже він не може взаємодіÑти із іншими " +"об'єктами.\n" "Спробуйте додати дочірні вузли CollisionShape2D або CollisionPolygon2D Ð´Ð»Ñ " "Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¹Ð¾Ð³Ð¾ форми." @@ -9046,6 +8950,14 @@ msgstr "" "Ð”Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ñ†ÐµÐ·Ð´Ð°Ñ‚Ð½Ð¾Ñті CollisionShape2D Ñлід надати форму. Будь " "лаÑка, Ñтворіть реÑÑƒÑ€Ñ Ñ„Ð¾Ñ€Ð¼Ð¸ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ елемента!" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ CPUParticles2D потребує викориÑÑ‚Ð°Ð½Ð½Ñ CanvasItemMaterial із " +"увімкненим параметром «ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñток»." + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9097,6 +9009,14 @@ msgstr "" "Ðе визначено матеріалу Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ чаÑток, тому ніÑкої поведінки не " "відтворюватиметьÑÑ." +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Particles2D потребує викориÑÑ‚Ð°Ð½Ð½Ñ CanvasItemMaterial із увімкненим " +"параметром «ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñток»." + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2D працюватиме лише Ñк дочірній елемент вузла Path2D." @@ -9119,16 +9039,18 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Цей ланцюжок Bone2D має завершуватиÑÑ Ð²ÑƒÐ·Ð»Ð¾Ð¼ Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." -msgstr "" +msgstr "Bone2D працює лише із Skeleton2D або іншим батьківÑьким вузлом Bone2D." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Цій кіÑтці бракує належної пози REST. Перейдіть до вузла Skeleton2D Ñ– " +"вÑтановіть Ñ—Ñ—." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9195,14 +9117,13 @@ msgid "Lighting Meshes: " msgstr "ОÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ Ñітки: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"У цього вузла немає дочірніх форм, отже він не може взаємодіÑти із " -"проÑтором.\n" +"У цього вузла немає форми, отже він не може ÑтикатиÑÑ Ð°Ð±Ð¾ взаємодіÑти із " +"іншими об'єктами.\n" "Спробуйте додати дочірні вузли CollisionShape або CollisionPolygon Ð´Ð»Ñ " "Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¹Ð¾Ð³Ð¾ форми." @@ -9238,6 +9159,19 @@ msgstr "" "Ð”Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ñ†ÐµÐ·Ð´Ð°Ñ‚Ð½Ð¾Ñті CollisionShape Ñлід надати форму. Будь " "лаÑка, Ñтворіть реÑÑƒÑ€Ñ Ñ„Ð¾Ñ€Ð¼Ð¸ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ елемента!" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Ðічого не видно, оÑкільки не призначено Ñітки." + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ CPUParticles потребує викориÑÑ‚Ð°Ð½Ð½Ñ SpatialMaterial із увімкненим " +"параметром «ЧаÑтки дошки»." + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "Побудова Ñітки" @@ -9245,8 +9179,8 @@ msgstr "Побудова Ñітки" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" -"РеÑÑƒÑ€Ñ Ðавігаційна Ñітка повинен бути вÑтановлений або Ñтворений Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ " -"цього вузла." +"Ð”Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ цього вузла Ñлід вÑтановити або Ñтворити реÑÑƒÑ€Ñ Â«Ðавігаційна " +"Ñітка»." #: scene/3d/navigation_mesh.cpp msgid "" @@ -9262,6 +9196,27 @@ msgid "" msgstr "" "Ðічого не видно, оÑкільки Ñітки не було пов'Ñзано із проходами малюваннÑ." +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñток потребує викориÑÑ‚Ð°Ð½Ð½Ñ SpatialMaterial із увімкненим " +"параметром «ЧаÑтки дошки»." + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollow працюватиме лише Ñк дочірній елемент вузла Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "OrientedPathFollow працюватиме лише Ñк дочірній елемент вузла Path." + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" +"OrientedPathFollow потребує Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ñ–Ð² у його батьківÑькому Path." + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9300,17 +9255,15 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "Це тіло буде проігноровано, аж доки ви не вÑтановите Ñітку" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Зміни розмірів RigidBody (у режимах character або rigid) буде перевизначено " -"фізичним рушієм під Ñ‡Ð°Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸.\n" +"Зміни розмірів SoftBody буде перевизначено фізичним рушієм під Ñ‡Ð°Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸.\n" "ЗаміÑть цієї зміни, вам варто змінити розміри дочірніх форм зіткненнÑ." #: scene/3d/sprite_3d.cpp @@ -9331,44 +9284,40 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "У вузлі BlendTree «%s» не знайдено анімації: «%s»" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "ІнÑтрументи анімації" +msgstr "Ðе знайдено анімації: «%s»" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "У вузлі «%s», некоректна анімаціÑ: «%s»." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ПОМИЛКÐ: неправильне ім'Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—!" +msgstr "Ðекоректна анімаціÑ: «%s»." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Від'єднати '%s' від '%s'" +msgstr "Ðічого не з'єднано із входом «%s» вузла «%s»." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "Кореневий елемент AnimationNode Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ñƒ не вÑтановлено." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Виберіть AnimationPlayer з дерева Ñцен Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—." +msgstr "ШлÑÑ… до вузла AnimationPlayer, де міÑÑ‚ÑтьÑÑ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—, не вÑтановлено." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"ШлÑÑ…, вÑтановлений Ð´Ð»Ñ AnimationPlayer, не веде до вузла AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Дерево анімації недійÑне." +msgstr "Кореневий елемент AnimationPlayer не Ñ” коректним вузлом." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9386,10 +9335,6 @@ msgstr "Увага!" msgid "Please Confirm..." msgstr "Будь лаÑка, підтвердьте..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Обрати цю теку" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9400,6 +9345,10 @@ msgstr "" "ÑкуÑÑŒ із функцій popup*(). Втім, робити Ñ—Ñ… видимими Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ â€” звична " "практика. Втім, Ñлід пам'Ñтати, що під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку Ñ—Ñ… буде приховано." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "Якщо exp_edit має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, min_value має бути > 0." + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9452,31 +9401,140 @@ msgid "Invalid font size." msgstr "Ðекоректний розмір шрифту." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Додати вхід" +msgstr "Вхідні дані" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<Ðемає>" +msgstr "Ðемає" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Ðекоректний розмір шрифту." +msgstr "Ðекоректне джерело програми побудови тіней." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ñ€Ñ–Ð´Ð½Ð¾Ð³Ð¾." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Змінні величини можна пов'Ñзувати лише із функцією вузлів." + +#~ msgid "Zoom:" +#~ msgstr "МаÑштаб:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Ви Ñправді хочете вилучити уÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· Ñигналу \"" + +#~ msgid "Class List:" +#~ msgstr "СпиÑок клаÑів:" + +#~ msgid "Search Classes" +#~ msgstr "Пошук клаÑів" + +#~ msgid "Public Methods" +#~ msgstr "Публічні методи" + +#~ msgid "Public Methods:" +#~ msgstr "Публічні методи:" + +#~ msgid "GUI Theme Items" +#~ msgstr "Тема елементів ГІК" + +#~ msgid "GUI Theme Items:" +#~ msgstr "Тема елементів ГІК:" + +#~ msgid "Property: " +#~ msgstr "ВлаÑтивіÑть: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "Перемкнути Ñтан теки Ñк вибраної." + +#~ msgid "Show current scene file." +#~ msgstr "Показати файл поточної Ñцени." + +#~ msgid "Enter tree-view." +#~ msgstr "Увійти до ієрархічного ÑпиÑку." + +#~ msgid "Whole words" +#~ msgstr "Цілі Ñлова" + +#~ msgid "Match case" +#~ msgstr "Із ураховуваннÑм регіÑтру" + +#~ msgid "Ok" +#~ msgstr "Гаразд" + +#~ msgid "Show In File System" +#~ msgstr "Показати в файловій ÑиÑтемі" + +#~ msgid "Search the class hierarchy." +#~ msgstr "Пошук в ієрархії клаÑів." + +#~ msgid "Search in files" +#~ msgstr "Шукати у файлах" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "" +#~ "Вбудовані Ñкрипти можна змінити тільки тоді, коли завантажено Ñцену, до " +#~ "Ñкої вони належать" + +#~ msgid "Convert To Uppercase" +#~ msgstr "Конвертувати у ВЕРХÐІЙ РЕГІСТР" + +#~ msgid "Convert To Lowercase" +#~ msgstr "Конвертувати в нижній регіÑтр" + +#~ msgid "Snap To Floor" +#~ msgstr "Приліпити до підлоги" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 0 градуÑів" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 90 градуÑів" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 180 градуÑів" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° 270 градуÑів" + +#~ msgid "Warning" +#~ msgstr "ПопередженнÑ" + +#~ msgid "Error:" +#~ msgstr "Помилка:" + +#~ msgid "Source:" +#~ msgstr "Джерело:" + +#~ msgid "Function:" +#~ msgstr "ФункціÑ:" + +#~ msgid "Variable" +#~ msgstr "Змінна" + +#~ msgid "Errors:" +#~ msgstr "Помилки:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека (Ñкщо заÑтоÑовне):" + +#~ msgid "Bake!" +#~ msgstr "Запекти!" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "Створити навігаційну Ñітку." + +#~ msgid "Get" +#~ msgstr "Отримати" #~ msgid "Change Scalar Constant" #~ msgstr "Змінити чиÑлову Ñталу" @@ -9791,9 +9849,6 @@ msgstr "" #~ msgid "Sequence" #~ msgstr "ПоÑлідовніÑть" -#~ msgid "Switch" -#~ msgstr "Перемикач" - #~ msgid "Iterator" #~ msgstr "Ітератор" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 47be7ef1d1..688f386b3c 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -25,7 +25,7 @@ msgstr "" ".استمال کیجۓ TYPE_* constants .Ú©Û’ لیے غلط Ûیں convert() دیے گئے ارگمنٹس." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "یا تو ڈیکوڈ کرنے Ú©Û’ لئے بائیٹس Ú©Ù… Ûیں یا پھر ناقص ÙØ§Ø±Ù…یٹ Ú¾Û’." @@ -382,8 +382,7 @@ msgstr "" msgid "Scale From Cursor" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "" @@ -397,11 +396,11 @@ msgid "Delete Selection" msgstr ".تمام کا انتخاب" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "" #: editor/animation_track_editor.cpp @@ -504,11 +503,11 @@ msgstr "" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "" @@ -541,10 +540,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "" @@ -575,6 +574,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -653,7 +653,7 @@ msgid "Edit Connection: " msgstr "" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -706,17 +706,14 @@ msgstr "" msgid "Search:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "" @@ -773,9 +770,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -805,7 +803,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -864,14 +862,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -1045,8 +1035,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1216,8 +1205,9 @@ msgstr "" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "" @@ -1287,11 +1277,15 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" +msgid "Select This Folder" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1299,12 +1293,13 @@ msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "سب سکریپشن بنائیں" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +msgid "Show in File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1340,7 +1335,8 @@ msgid "Open a File or Directory" msgstr "" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "" @@ -1400,8 +1396,7 @@ msgstr "" msgid "Preview:" msgstr "" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "" @@ -1417,24 +1412,11 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1451,27 +1433,28 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" +msgid "Methods:" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr ".تمام کا انتخاب" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1500,7 +1483,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Description" +msgid "Class Description" +msgstr "سب سکریپشن بنائیں" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp @@ -1515,12 +1503,13 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp #, fuzzy -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp @@ -1530,12 +1519,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp msgid "" @@ -1543,11 +1534,52 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Classes Only" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1582,6 +1614,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1636,10 +1673,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1868,6 +1915,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1908,6 +1961,11 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -1990,7 +2048,7 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "" #: editor/editor_node.cpp @@ -2019,7 +2077,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2056,6 +2114,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2163,10 +2222,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2260,21 +2315,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2412,7 +2467,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2436,7 +2491,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2448,7 +2503,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2456,6 +2511,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2474,10 +2543,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2486,7 +2551,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2770,6 +2836,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Ù¾Ø³Ù†Ø¯ÛŒØ¯Û Ø§ÙˆÙ¾Ø± منتقل کریں" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2805,7 +2876,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2842,39 +2913,40 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" +msgid "Open Scene(s)" msgstr "" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." +#: editor/filesystem_dock.cpp +msgid "Add to favorites" msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "" +#, fuzzy +msgid "Remove from favorites" +msgstr ".تمام کا انتخاب" #: editor/filesystem_dock.cpp -msgid "Open Scene(s)" +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Instance" +msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp -msgid "Edit Dependencies..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners..." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate..." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2886,6 +2958,14 @@ msgstr "سب سکریپشن بنائیں" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2906,11 +2986,11 @@ msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -msgid "Toggle folder status as Favorite." +msgid "Toggle split mode" msgstr "" #: editor/filesystem_dock.cpp -msgid "Show current scene file." +msgid "Search files" msgstr "" #: editor/filesystem_dock.cpp @@ -2918,20 +2998,12 @@ msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Search files" -msgstr "" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -2948,27 +3020,19 @@ msgid "Create Script" msgstr "" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" - -#: editor/find_in_files.cpp -msgid "Find: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Whole words" +msgid "Find in Files" msgstr "" #: editor/find_in_files.cpp -msgid "Match case" +msgid "Find:" msgstr "" #: editor/find_in_files.cpp -msgid "Folder: " +msgid "Folder:" msgstr "" #: editor/find_in_files.cpp -msgid "Filter: " +msgid "Filters:" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -2985,6 +3049,10 @@ msgid "Cancel" msgstr "" #: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp msgid "Replace: " msgstr "" @@ -3141,17 +3209,12 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" +msgid "Collapse All Properties" msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp @@ -3391,6 +3454,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3761,10 +3829,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4091,6 +4155,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4152,6 +4220,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "ایکشن منتقل کریں" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4246,6 +4319,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4296,6 +4374,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4733,8 +4815,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4763,6 +4844,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4832,11 +4918,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5170,22 +5256,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5215,6 +5301,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5313,11 +5403,7 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5388,7 +5474,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5396,10 +5482,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5434,17 +5516,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "Search in files" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +#, fuzzy +msgid "Search Results" +msgstr "سب سکریپشن بنائیں" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5455,6 +5529,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5541,11 +5620,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5562,19 +5641,11 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" +msgid "Go to Next Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" +msgid "Go to Previous Breakpoint" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5582,15 +5653,16 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find in files..." +msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr ".تمام کا انتخاب" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." +msgid "Go to Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5683,6 +5755,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5847,6 +5927,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5949,10 +6033,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6356,6 +6436,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6401,23 +6486,27 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr ".تمام کا انتخاب" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip vertically" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Clear transform" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6448,7 +6537,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6464,7 +6553,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6540,6 +6629,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6548,6 +6645,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6606,6 +6707,14 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7059,10 +7168,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7196,10 +7301,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7283,7 +7384,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7292,7 +7393,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7332,7 +7433,7 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7391,6 +7492,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "سب سکریپشن بنائیں" @@ -7428,6 +7533,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7500,15 +7611,15 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)" +msgid "Open documentation" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Add Child Node" +msgid "Delete Node(s)" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp @@ -7516,6 +7627,11 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "سب سکریپشن بنائیں" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" msgstr "" @@ -7664,6 +7780,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7757,19 +7877,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7801,18 +7909,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8237,11 +8333,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8515,6 +8607,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8614,11 +8710,11 @@ msgid "Search VisualScript" msgstr "سب سکریپشن بنائیں" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8697,6 +8793,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8735,6 +8837,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8852,6 +8960,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8871,6 +8989,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8903,7 +9039,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8972,10 +9108,6 @@ msgstr "" msgid "Please Confirm..." msgstr "" -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -8983,6 +9115,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 18d0de7612..f6e694d4e5 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -11,15 +11,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-22 06:42+0000\n" -"Last-Translator: 38569459 <xxx38569459@gmail.com>\n" +"PO-Revision-Date: 2018-10-05 02:39+0000\n" +"Last-Translator: 01lifeleft <01lifeleft@gmail.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +27,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -85,7 +85,7 @@ msgstr "Nhân đôi lá»±a chá»n" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "" +msgstr "Xoá Key(s) được chá»n" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -212,16 +212,17 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Gần nhất" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "Tuyến" +msgstr "Tịnh tuyến" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Cubic" -msgstr "" +msgstr "Báºc ba" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" @@ -234,7 +235,7 @@ msgstr "" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "Chèn Key" #: editor/animation_track_editor.cpp #, fuzzy @@ -394,8 +395,7 @@ msgstr "Chá»n Scale" msgid "Scale From Cursor" msgstr "Scale từ trá» chuá»™t" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "Nhân đôi lá»±a chá»n" @@ -409,11 +409,13 @@ msgid "Delete Selection" msgstr "Nhân đôi lá»±a chá»n" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "Äến Step tiếp theo" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "Äến Step trước đó" #: editor/animation_track_editor.cpp @@ -426,7 +428,7 @@ msgstr "Dá»n dẹp Animation" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Chá»n node để được là m diá»…n hoạt:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" @@ -517,12 +519,12 @@ msgstr "Không tìm thấy" msgid "Replaced %d occurrence(s)." msgstr "" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp #, fuzzy msgid "Match Case" msgstr "Trùng khá»›p" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "Cả từ" @@ -555,11 +557,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Phóng to" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "Dòng:" @@ -593,6 +594,7 @@ msgstr "Thêm" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -676,8 +678,9 @@ msgid "Edit Connection: " msgstr "Sá»a Curve đã chá»n" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" -msgstr "" +#, fuzzy +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "Bạn có chắc muốn xóa bá» tất cả kết nối từ tÃn hiệu nà y?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -685,7 +688,7 @@ msgstr "TÃn hiệu" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Bạn có chắc muốn xóa bá» tất cả kết nối từ tÃn hiệu nà y?" #: editor/connections_dialog.cpp #, fuzzy @@ -694,11 +697,11 @@ msgstr "Há»§y kết nối" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "" +msgstr "Chỉnh sá»a..." #: editor/connections_dialog.cpp msgid "Go To Method" -msgstr "" +msgstr "Äến Method" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -729,17 +732,14 @@ msgstr "Gần đây:" msgid "Search:" msgstr "Tìm kiếm:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "Phù hợp:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "Mô tả:" @@ -797,9 +797,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -829,7 +830,7 @@ msgid "Error loading:" msgstr "" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -888,14 +889,6 @@ msgstr "" msgid "Thanks from the Godot community!" msgstr "" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "" @@ -910,51 +903,51 @@ msgstr "" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "" +msgstr "Quản là dá»± án " #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "Nhà phát triển" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "Tác giả" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "" +msgstr "Nhà tà i trợ Bạch Kim" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "" +msgstr "Nhà tà i trợ Và ng" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "" +msgstr "Nhà tà i trợ Nhá»" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "Ngưá»i á»§ng há»™ Và ng" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "" +msgstr "Ngưá»i á»§ng há»™ Bạc" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "" +msgstr "Ngưá»i á»§ng há»™ Äồng" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "Ngưá»i á»§ng há»™" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "Cấp phép" #: editor/editor_about.cpp msgid "Thirdparty License" -msgstr "" +msgstr "Cấp phép nhóm thứ ba" #: editor/editor_about.cpp msgid "" @@ -1067,8 +1060,7 @@ msgid "Bus options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -1204,19 +1196,19 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "" +msgstr "Mở" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "Sắp xếp lại Autoloads" #: editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "" +msgstr "ÄÆ°á»ng dẫn sai." #: editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "" +msgstr "File không tồn tại." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." @@ -1224,29 +1216,30 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Thêm AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp msgid "Path:" -msgstr "" +msgstr "ÄÆ°á»ng dẫn:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "Tên Node:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" -msgstr "" +msgstr "Tên" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "Singleton" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "Cáºp nháºt Scene" #: editor/editor_data.cpp msgid "Storing local changes..." @@ -1254,15 +1247,15 @@ msgstr "" #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "" +msgstr "Äang cáºp nháºt scene..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" -msgstr "" +msgstr "[rá»—ng]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[chưa save]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1275,23 +1268,23 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "Tạo Folder" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp #: scene/gui/file_dialog.cpp msgid "Name:" -msgstr "" +msgstr "Tên:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "Không thể tạo folder." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "Chá»n" #: editor/editor_export.cpp msgid "Storing File:" @@ -1306,33 +1299,40 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "Chá»n Folder hiện tại" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "File đã tồn tại, Viết đè?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "" +#, fuzzy +msgid "Select This Folder" +msgstr "Chá»n folder nà y" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "Copy ÄÆ°á»ng dẫn" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "Open In File Manager" -msgstr "" +#, fuzzy +msgid "Open in File Manager" +msgstr "Mở trong Trình quản là file" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "Hiển thị trong Trình quản là file" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." -msgstr "" +msgstr "Folder Má»›i..." #: editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "Là m má»›i" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" @@ -1340,91 +1340,95 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Tất cả Files (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Mở má»™t File" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Mở File(s)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy msgid "Open a Directory" -msgstr "" +msgstr "Mở má»™t Äịa chỉ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy msgid "Open a File or Directory" -msgstr "" +msgstr "Mở má»™t File hoặc Äịa chỉ" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "" +msgstr "Lưu" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Lưu thà nh File" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "Trở lại" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "Tiến tá»›i" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Äi Lên" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Báºt tắt File ẩn" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "Báºt tắt Ưa thÃch" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "Báºt tắt Chức năng" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Táºp trung ÄÆ°á»ng dẫn" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "Di chuyển Ưa thÃch lên" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "Di chuyển Ưa thÃch xuống" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy msgid "Go to parent folder" -msgstr "" +msgstr "Äến folder parent" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Những địa chỉ & File:" #: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp #: editor/plugins/style_box_editor_plugin.cpp msgid "Preview:" -msgstr "" +msgstr "Xem thá»:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" -msgstr "" +msgstr "File" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy msgid "Must use a valid extension." -msgstr "" +msgstr "Phải sá» dụng extension có hiệu lá»±c" #: editor/editor_file_system.cpp msgid "ScanSources" @@ -1434,61 +1438,49 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "" +msgstr "Trên đầu" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" -msgstr "" +msgstr "Class:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "Thừa kế:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "ÄÆ°á»£c thừa kế bởi:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "Mô tả ngắn gá»n:" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" +msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "" +#, fuzzy +msgid "Methods:" +msgstr "Äến Method" #: editor/editor_help.cpp -msgid "GUI Theme Items" +msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "GUI Theme Items:" +msgid "Theme Properties:" msgstr "" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp @@ -1516,8 +1508,14 @@ msgid "Constants:" msgstr "" #: editor/editor_help.cpp -msgid "Description" -msgstr "" +#, fuzzy +msgid "Class Description" +msgstr "Mô tả:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" +msgstr "Mô tả:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1531,12 +1529,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "Mô tả ngắn gá»n:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "Mô tả ngắn gá»n:" #: editor/editor_help.cpp msgid "" @@ -1545,12 +1545,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Methods" -msgstr "" +#, fuzzy +msgid "Method Descriptions" +msgstr "Mô tả:" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "Mô tả:" #: editor/editor_help.cpp msgid "" @@ -1558,11 +1560,58 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Tìm sá»± giúp đỡ" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "Thay thế tất cả" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "Chỉ lá»±a chá»n" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "TÃn hiệu" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "Cố định" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Member Type" +msgstr "Những Thà nh viên" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Class:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1596,6 +1645,11 @@ msgstr "" msgid "Error saving resource!" msgstr "" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "" @@ -1650,10 +1704,20 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1755,27 +1819,27 @@ msgstr "" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "" +msgstr "Mở Scene" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "" +msgstr "Mở Scene Mẫu" #: editor/editor_node.cpp msgid "Quick Open Scene..." -msgstr "" +msgstr "Mở Scene nhanh..." #: editor/editor_node.cpp msgid "Quick Open Script..." -msgstr "" +msgstr "Mở Script nhanh..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "Lưu & Äóng" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Lưu thay đổi và o '%s' trước khi đóng?" #: editor/editor_node.cpp msgid "Save Scene As..." @@ -1783,11 +1847,11 @@ msgstr "Lưu Scene vá»›i tên..." #: editor/editor_node.cpp msgid "No" -msgstr "" +msgstr "Không" #: editor/editor_node.cpp msgid "Yes" -msgstr "" +msgstr "Có" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" @@ -1795,59 +1859,61 @@ msgstr "Scene nà y chưa được lưu. Lưu trước khi chạy?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Thao tác nà y phải có scene má»›i là m được." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "" +msgstr "Xuất Mesh Library" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "" +msgstr "Thao tác nà y phải có root node má»›i là m được." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "" +msgstr "Xuất Tile Set" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "Thao tác nà y phải có node được chá»n má»›i là m được." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "Scene hiện tại chưa save. Kệ mở luôn?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "Không thể reload má»™t scene mà chưa save bao giá»." #: editor/editor_node.cpp +#, fuzzy msgid "Revert" -msgstr "" +msgstr "Trở lại" #: editor/editor_node.cpp +#, fuzzy msgid "This action cannot be undone. Revert anyway?" -msgstr "" +msgstr "Hà nh động nà y không thể hoà n tác. Kệ trở lại luôn?" #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "" +msgstr "Chạy Scene nhanh..." #: editor/editor_node.cpp msgid "Quit" -msgstr "" +msgstr "Thoát" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "" +msgstr "Thoát editor?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "" +msgstr "Mở Project Manager?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "" +msgstr "Lưu & Thoát" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" @@ -1862,10 +1928,12 @@ msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" +"Tùy chỉnh nà y đã quá date. Những tùy huống mà phải bị bắt phải refresh bây " +"giỠđược xem là lá»—i. Xin hãy báo lại." #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "" +msgstr "Chá»n má»™t Scene chÃnh" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -1881,6 +1949,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1923,6 +1997,12 @@ msgstr "" msgid "Default" msgstr "" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "Quét lại hệ thống táºp tin" + #: editor/editor_node.cpp msgid "Play This Scene" msgstr "" @@ -2005,8 +2085,9 @@ msgid "Save Scene" msgstr "" #: editor/editor_node.cpp -msgid "Save all Scenes" -msgstr "" +#, fuzzy +msgid "Save All Scenes" +msgstr "Lưu Scene vá»›i tên..." #: editor/editor_node.cpp msgid "Close Scene" @@ -2034,7 +2115,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -2072,6 +2153,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2179,10 +2261,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2278,21 +2356,21 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "Nháºp từ bên ngoà i" #: editor/editor_node.cpp -msgid "Node" +msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" msgstr "" #: editor/editor_node.cpp @@ -2430,7 +2508,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2454,7 +2532,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2466,7 +2544,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2474,6 +2552,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2491,10 +2583,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2503,7 +2591,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2596,7 +2685,7 @@ msgstr "Nháºp từ Node:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Tải lại" #: editor/export_template_manager.cpp msgid "Uninstall" @@ -2604,20 +2693,20 @@ msgstr "" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(Äã cà i đặt)" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download" -msgstr "" +msgstr "Tải" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(Thiếu)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(Hiện tại)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." @@ -2637,7 +2726,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "Không thấy version.txt trong templates." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" @@ -2665,17 +2754,17 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "" +msgstr "Không thể kết nối." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Không phản hồi." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "" +msgstr "Yêu cầu thất bại." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2685,11 +2774,11 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" +msgstr "Thất bại." #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Tải xong." #: editor/export_template_manager.cpp msgid "" @@ -2707,7 +2796,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "" +msgstr "Äứt kết nối" #: editor/export_template_manager.cpp msgid "Resolving" @@ -2720,7 +2809,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connecting..." -msgstr "" +msgstr "Äang kết nối..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2733,39 +2822,39 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Requesting..." -msgstr "" +msgstr "Äang yêu cầu..." #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "Äang tải" #: editor/export_template_manager.cpp msgid "Connection Error" -msgstr "" +msgstr "Kết nối bị lá»—i" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "Lá»—i SSL Handshake" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Phiên bản hiện tại:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Phiên bản đã cà i:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Cà i đặt từ File" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "" +msgstr "Xóa Template" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "" +msgstr "Chá»n file template" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -2773,7 +2862,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Download Templates" -msgstr "" +msgstr "Tải Templates" #: editor/export_template_manager.cpp msgid "Select mirror from list: (Shift+Click: Open in Browser)" @@ -2784,6 +2873,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "Ưa thÃch:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2819,7 +2913,7 @@ msgstr "" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2856,22 +2950,6 @@ msgid "Duplicating folder:" msgstr "Tạo bản sao folder:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "Mở rá»™ng tất cả" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "Thu gá»n tất cả" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Äổi tên..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "Di chuyển đến..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "Mở Scene" @@ -2880,6 +2958,16 @@ msgid "Instance" msgstr "Thêm và o scene" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Add to favorites" +msgstr "Ưa thÃch:" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Remove from favorites" +msgstr "Xóa khá»i Nhóm" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "Chỉnh sá»a các File phụ thuá»™c..." @@ -2887,11 +2975,19 @@ msgstr "Chỉnh sá»a các File phụ thuá»™c..." msgid "View Owners..." msgstr "Xem các scene sở hữu..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Äổi tên..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "Nhân đôi..." #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "Di chuyển đến..." + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "Tạo Script" @@ -2900,6 +2996,16 @@ msgstr "Tạo Script" msgid "New Resource..." msgstr "" +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Expand All" +msgstr "Mở rá»™ng tất cả" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "Thu gá»n tất cả" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2921,27 +3027,19 @@ msgstr "Quét lại hệ thống táºp tin" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "(Bá») Chá»n thư mục Hay sá» dụng" +msgid "Toggle split mode" +msgstr "Báºt tắt Chức năng" #: editor/filesystem_dock.cpp -msgid "Show current scene file." -msgstr "" +#, fuzzy +msgid "Search files" +msgstr "Tìm kiếm:" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "Tìm kiếm:" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -2949,7 +3047,7 @@ msgstr "" "Äang quét file,\n" "Chá» môt chút..." -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "Di chuyển" @@ -2967,31 +3065,24 @@ msgid "Create Script" msgstr "Tạo Script" #: editor/find_in_files.cpp -msgid "Find in files" -msgstr "" +#, fuzzy +msgid "Find in Files" +msgstr "Tìm..." #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "Tìm tiếp theo" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "Cả từ" +msgid "Folder:" +msgstr "Tạo Folder" #: editor/find_in_files.cpp #, fuzzy -msgid "Match case" -msgstr "Trùng khá»›p" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" - -#: editor/find_in_files.cpp -msgid "Filter: " -msgstr "" +msgid "Filters:" +msgstr "Lá»c..." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3008,6 +3099,11 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "Tìm tiếp theo" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "Thay thế" @@ -3170,18 +3266,14 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "Thu gá»n tất cả" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3421,6 +3513,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3611,43 +3708,44 @@ msgstr "Xem Khung hình Liên tiếp" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" -msgstr "" +msgstr "Hướng Ä‘i" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "" +msgstr "Quá khứ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "Tương lai" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "" +msgstr "Chiá»u sâu" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "1 bước" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 bước" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 bước" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Differences Only" -msgstr "" +msgstr "Chỉ khác biệt" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Bắt buá»™c Modulate trắng" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Kèm Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -3656,11 +3754,11 @@ msgstr "Dán Animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "Tạo Animation má»›i" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "Tên Animation:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp @@ -3668,7 +3766,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Error!" -msgstr "" +msgstr "Lá»—i!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" @@ -3692,7 +3790,7 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "Äồng bá»™ hoá" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" @@ -3718,9 +3816,8 @@ msgid "" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Tạo %s Má»›i" +msgstr "Tạo nodes má»›i." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy @@ -3735,37 +3832,39 @@ msgstr "Bá» track Ä‘ang chá»n." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Báºt tắt tá»± động chạy cá»§a animation nà y khi bắt đầu, khởi động lại hoặc lùi " +"vá» 0." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Äặt kết thúc animation. Hữu dụng cho sub-transitions." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Chuyển tiếp" +msgstr "Chuyển tiếp: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "AnimationTree" -msgstr "" +msgstr "AnimationTree" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "Tên má»›i:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "Tá»· lệ:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy msgid "Fade In (s):" -msgstr "" +msgstr "Tăng dần (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "" +msgstr "Giảm dần (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" @@ -3777,28 +3876,24 @@ msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Tá»± khởi động lại:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "Khởi động lại (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "" +msgstr "Khởi động lại ngẫu nhiên (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Start!" -msgstr "" +msgstr "Chạy!" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" +msgstr "Số lượng:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" @@ -3814,35 +3909,36 @@ msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" -msgstr "" +msgstr "Hiện tại:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Add Input" -msgstr "" +msgstr "Thêm Input" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "" +msgstr "Xoá Auto-Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Äặt Auto-Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" -msgstr "" +msgstr "Xoá Input" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "" +msgstr "Animation tree khả dụng." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "" +msgstr "Animation tree vô hiệu." #: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy msgid "Animation Node" -msgstr "" +msgstr "Animation Node" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "OneShot Node" @@ -3882,19 +3978,19 @@ msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Chỉnh sá»a lá»c Node" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." -msgstr "" +msgstr "Lá»c..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "" +msgstr "Ná»™i dung:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "" +msgstr "Xem Files" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -3906,19 +4002,20 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "" +msgstr "Không thể kết nối tá»›i host:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "" +msgstr "Không có phản hồi từ host:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "Yêu cầu thất bại, trả lại code:" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Request failed, too many redirects" -msgstr "" +msgstr "Yêu cầu thất bại, gá»i lại quá nhiá»u" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -3926,11 +4023,11 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "Mong đợi:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "Nháºn được:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" @@ -3942,31 +4039,31 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." -msgstr "" +msgstr "Äang tải (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading..." -msgstr "" +msgstr "Äang tải..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." -msgstr "" +msgstr "Äang giải thuáºt..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "" +msgstr "Lá»—i tạo yêu cầu" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "" +msgstr "Chạy không" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "Thá» lại" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "Lá»—i tải" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" @@ -3974,7 +4071,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" -msgstr "" +msgstr "Äầu tiên" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3988,12 +4085,12 @@ msgstr "Tìm tiếp theo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Cuối cùng" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "Tất cả" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -4125,6 +4222,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4188,6 +4289,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "Báºt tắt Chức năng" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4282,6 +4388,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "Xóa Point" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4332,6 +4443,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4370,11 +4485,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "" +msgstr "Thêm %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "" +msgstr "Äang thêm %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." @@ -4392,7 +4507,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change default type" -msgstr "" +msgstr "Äổi dạng mặc định" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -4732,15 +4847,15 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "" +msgstr "Trục-X" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "" +msgstr "Trục-Y" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" -msgstr "" +msgstr "Trục-Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" @@ -4767,8 +4882,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4797,6 +4911,11 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4866,11 +4985,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Convert to CPUParticles" +msgid "Generate AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp @@ -5202,22 +5321,22 @@ msgid "Paste Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5247,6 +5366,10 @@ msgid "Error writing TextFile:" msgstr "" #: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." msgstr "" @@ -5346,12 +5469,9 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "Thư mục trước" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5421,7 +5541,7 @@ msgid "Keep Debugger Open" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5429,10 +5549,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5467,18 +5583,9 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search results" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search in files" -msgstr "Äổi tên file:" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" +msgid "Search Results" +msgstr "Tìm sá»± giúp đỡ" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -5490,6 +5597,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "Thêm Hà m" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5576,11 +5688,11 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" +msgid "Convert Indent to Tabs" msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5597,20 +5709,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "" +#, fuzzy +msgid "Go to Next Breakpoint" +msgstr "Äến Step tiếp theo" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "" +#, fuzzy +msgid "Go to Previous Breakpoint" +msgstr "Äến Step trước đó" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5618,16 +5724,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "Tìm..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "Xoá Function" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "Äến Dòng" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5719,6 +5827,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -5883,6 +5999,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -5982,10 +6102,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6384,6 +6500,11 @@ msgid "Fix Invalid Tiles" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "Nhân đôi lá»±a chá»n" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6430,40 +6551,45 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" -msgstr "Bá» lá»±a chá»n" +msgid "Copy Selection" +msgstr "Di chuyển Lá»±a chá»n" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "Äổi Transform Animation" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" -msgstr "" +msgstr "Chèn Texture(s) và o TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove current Texture from TileSet" -msgstr "" +msgstr "Xóa Texture hiện tại từ TileSet" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "" +msgstr "Tạo từ Scene" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Gá»™p từ Scene" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6476,7 +6602,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6492,7 +6618,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6568,6 +6694,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6576,6 +6710,10 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +msgid "Export Path:" +msgstr "" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6634,6 +6772,16 @@ msgid "Export PCK/Zip" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "Nháºp từ Node:" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "Xuất Tile Set" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7087,10 +7235,6 @@ msgstr "" msgid "General" msgstr "Tổng quan" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7224,10 +7368,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7315,7 +7455,7 @@ msgid "Step" msgstr "Bước (s):" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7324,7 +7464,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7365,7 +7505,7 @@ msgstr "" msgid "Reset" msgstr "Äặt lại phóng" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7424,6 +7564,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7441,11 +7585,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "" +msgstr "Nhân đôi Node(s)" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "" +msgstr "Xóa Node(s)?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -7460,6 +7604,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7472,27 +7622,24 @@ msgid "Make Local" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Kết nối đến Node:" +msgstr "Tạo Root Node:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Tạo Scene Má»›i" +msgstr "2D Scene" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Tạo Scene Má»›i" +msgstr "3D Scene" #: editor/scene_tree_dock.cpp msgid "User Interface" -msgstr "" +msgstr "Giao diện ngưá»i dùng" #: editor/scene_tree_dock.cpp msgid "Custom Node" -msgstr "" +msgstr "Node tùy chá»n" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7504,11 +7651,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Attach Script" -msgstr "" +msgstr "ÄÃnh kèm Script" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "" +msgstr "Xóa Node(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -7518,7 +7665,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "" +msgstr "Lá»—i khi lưu scene." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." @@ -7533,15 +7680,15 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)" +msgid "Open documentation" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Add Child Node" -msgstr "" +msgid "Delete Node(s)" +msgstr "Xóa Node(s)" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp @@ -7549,6 +7696,11 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Tạo Script" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" msgstr "" @@ -7696,6 +7848,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7784,19 +7940,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7828,18 +7972,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8261,11 +8393,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8388,27 +8516,27 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" -msgstr "" +msgstr "Äổi tên Hà m" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Variable" -msgstr "" +msgstr "Äổi tên Biến" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Signal" -msgstr "" +msgstr "Äổi tên TÃn hiệu" #: modules/visual_script/visual_script_editor.cpp msgid "Add Function" -msgstr "" +msgstr "Thêm Hà m" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" -msgstr "" +msgstr "Thêm Biến" #: modules/visual_script/visual_script_editor.cpp msgid "Add Signal" -msgstr "" +msgstr "Thêm TÃn hiệu" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" @@ -8472,7 +8600,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" -msgstr "" +msgstr "Di chuyển Node(s)" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" @@ -8514,31 +8642,35 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" -msgstr "" +msgstr "Xoá Function" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" -msgstr "" +msgstr "Xoá Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Variable:" -msgstr "" +msgstr "Chỉnh sá»a Variable:" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" -msgstr "" +msgstr "Xoá Signal" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Signal:" -msgstr "" +msgstr "Chỉnh sá»a Signal:" #: modules/visual_script/visual_script_editor.cpp msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "Những Thà nh viên:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" -msgstr "" +msgstr "Nodes khả dụng:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit graph" @@ -8550,15 +8682,15 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" -msgstr "" +msgstr "Chỉnh sá»a Variable:" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "" +msgstr "Xoá lá»±a chá»n" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "" +msgstr "Tìm loại Node" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -8632,19 +8764,19 @@ msgstr "" #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" -msgstr "" +msgstr "Tìm VisualScript" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "" +msgstr "Chạy trong Trình duyệt web" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." @@ -8652,7 +8784,7 @@ msgstr "" #: platform/javascript/export/export.cpp msgid "Could not write file:" -msgstr "" +msgstr "Không viết được file:" #: platform/javascript/export/export.cpp msgid "Could not open template for export:" @@ -8668,11 +8800,11 @@ msgstr "" #: platform/javascript/export/export.cpp msgid "Could not read boot splash image file:" -msgstr "" +msgstr "Không Ä‘á»c được file hình khởi động:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." -msgstr "" +msgstr "Sá» dụng hình khởi động mặc định." #: scene/2d/animated_sprite.cpp msgid "" @@ -8717,6 +8849,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8755,6 +8893,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -8872,6 +9016,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -8891,6 +9045,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -8923,7 +9095,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -8945,23 +9117,20 @@ msgid "On BlendTree node '%s', animation not found: '%s'" msgstr "" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Các Công cụ Animation" +msgstr "Không tìm thấy Animation: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "Trong node '%s', animation vô hiệu: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "Lá»–I: Tên animation không hợp lệ!" +msgstr "Animation vô hiệu: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Há»§y kết nối '%s' từ '%s'" +msgstr "Không có kết nối đến input '%s' cá»§a node '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." @@ -8996,10 +9165,6 @@ msgstr "Cảnh báo!" msgid "Please Confirm..." msgstr "Xin hãy xác nháºn..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "Chá»n folder nà y" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9010,6 +9175,10 @@ msgstr "" "có dạng popup*(). Có thể để popup nhìn thấy được để chỉnh sá»a, nhưng chúng " "sẽ ẩn khi chạy." +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9053,16 +9222,15 @@ msgstr "KÃch thước font không hợp lệ." #: scene/resources/visual_shader.cpp msgid "Input" -msgstr "" +msgstr "Nháºp" #: scene/resources/visual_shader.cpp msgid "None" -msgstr "" +msgstr "Không có" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "KÃch thước font không hợp lệ." +msgstr "nguồn vô hiệu cho shader." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -9076,6 +9244,47 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Phóng to" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "Bạn có chắc muốn xóa bá» tất cả kết nối từ \"" + +#~ msgid "Class List:" +#~ msgstr "Danh sách Class:" + +#~ msgid "Search Classes" +#~ msgstr "Tìm Class" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "(Bá») Chá»n thư mục Hay sá» dụng" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "Cả từ" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "Trùng khá»›p" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "Äổi tên file:" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "Xoay 0 độ" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "Xoay 90 độ" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "Xoay 180 độ" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "Xoay 270 độ" + #~ msgid "Disabled" #~ msgstr "Tắt" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index d1d840a745..512589d2df 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -13,7 +13,7 @@ # Geequlim <geequlim@gmail.com>, 2016-2018. # jie Shi <meishijiemeimeimei@gmail.com>, 2018. # Jingtian Pan <panjingtian@126.com>, 2018. -# lalalaring <783482203@qq.com>, 2017. +# lalalaring <783482203@qq.com>, 2017, 2018. # Luo Jun <vipsbpig@gmail.com>, 2016-2017, 2018. # oberon-tonya <360119124@qq.com>, 2016. # plumsky <x-wolf@163.com>, 2018. @@ -27,12 +27,21 @@ # Zae Chao <zae.vito@live.com>, 2018. # zwj36028 <23732399@qq.com>, 2018. # Hobr <mkowes@vip.qq.com>, 2018. +# Dante Lucifer <firecloud888@gmail.com>, 2018. +# carlcc <carlmarxchen@foxmail.com>, 2018. +# AColdCube <761397398@qq.com>, 2018. +# å°è è粑粑 <2062152083@qq.com>, 2018. +# 刘庆文 <liuqingwen@163.com>, 2018. +# Haowen Liu <liu.haowen.andy@gmail.com>, 2018. +# tangdou1 <1093505442@qq.com>, 2018. +# yzt <834950797@qq.com>, 2018. +# DKLost <514dklost@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2018-07-27 02:37+0000\n" -"Last-Translator: Hobr <mkowes@vip.qq.com>\n" +"PO-Revision-Date: 2018-12-04 05:19+0000\n" +"Last-Translator: tangdou1 <1093505442@qq.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" "Language: zh_CN\n" @@ -40,7 +49,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -48,41 +57,38 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "convertå‡½æ•°å‚æ•°ç±»åž‹éžæ³•ï¼Œè¯·ä¼ å…¥ä»¥â€œTYPE_â€æ‰“头的常é‡ã€‚" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "没有足够的å—节æ¥è§£ç æˆ–æ ¼å¼ä¸æ£ç¡®ã€‚" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "表达å¼ä¸æœ‰éžæ³•的输入 %i (未通过)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "è‡ªèº«æ— æ³•ä½¿ç”¨å› ä¸ºå®žä¾‹ä¸ºç©º" #: core/math/expression.cpp -#, fuzzy msgid "Invalid operands to operator %s, %s and %s." -msgstr "'%s'这个属性å的在节点'%s'ä¸ä¸å˜åœ¨ã€‚" +msgstr "è¿ç®—符%s,%s和%sçš„æ“ä½œæ•°æ— æ•ˆã€‚" #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "'%s'这个属性å的在节点'%s'ä¸ä¸å˜åœ¨ã€‚" +msgstr "æ— æ•ˆå†…å˜åœ°å€ç±»åž‹ %s,基类 %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "对基础类型 %s éžæ³•的具å索引 '%s'" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr "ï¼šæ— æ•ˆå‚æ•°ç±»åž‹ï¼š " +msgstr "ï¼šæ— æ•ˆå‚æ•°ç±»åž‹ï¼š '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "在对 '%s' 的调用ä¸:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -91,27 +97,23 @@ msgstr "释放" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "平衡的" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "沿X轴翻转" +msgstr "镜åƒ" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "æ’入关键帧" +msgstr "æ¤å¤„æ’入帧" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "å¤åˆ¶é€‰ä¸é¡¹" +msgstr "å¤åˆ¶å·²é€‰å¸§" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "åˆ é™¤å·²é€‰ä¸" +msgstr "åˆ é™¤å·²é€‰å¸§" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -142,46 +144,40 @@ msgid "Anim Change Call" msgstr "修改回调" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "属性:" +msgstr "属性轨é“" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "å˜æ¢ç±»åž‹" +msgstr "3Då˜æ¢è½¨é“" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "调用方法轨é“" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "è´å¡žå°”曲线轨迹" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "音频回放轨é“" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "åœæ¢åŠ¨ç”»å›žæ”¾ã€‚(S)" +msgstr "动画回放轨é“" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" msgstr "æ·»åŠ è½¨é“" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Length Time (seconds)" -msgstr "动画时长(秒)。" +msgstr "动画时长(秒)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "动画时间缩放。" +msgstr "动画循环" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -189,42 +185,36 @@ msgid "Functions:" msgstr "函数:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "音频监å¬å™¨" +msgstr "音频剪辑:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "片段" +msgstr "动画剪辑:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "åˆ‡æ¢æ— 干扰模å¼ã€‚" +msgstr "切æ¢å½“å‰è½¨é“开关。" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "更新模å¼ï¼ˆå¦‚何设置æ¤å±žæ€§ï¼‰" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "动画节点" +msgstr "æ’值模å¼" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "循环包裹模å¼ï¼ˆæ’入开始循环结æŸï¼‰" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "移除选ä¸è½¨é“。" +msgstr "移除当å‰è½¨é“。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "X-Fade(äº¤å‰æ·¡åŒ–)æ—¶é—´(s):" +msgstr "时间(秒): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -239,13 +229,12 @@ msgid "Trigger" msgstr "触å‘器" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "功能" +msgstr "截图" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "最近的" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -254,16 +243,15 @@ msgstr "线性" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "立方体" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "修改动画循环" +msgstr "切æ–循环æ’值器" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "环绕间隔" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -271,14 +259,12 @@ msgid "Insert Key" msgstr "æ’入关键帧" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "å¤åˆ¶èŠ‚ç‚¹" +msgstr "å¤åˆ¶å¸§" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "åˆ é™¤èŠ‚ç‚¹" +msgstr "åˆ é™¤å¸§" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -308,7 +294,7 @@ msgstr "æ’入动画" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "åŠ¨ç”»æ’æ”¾å™¨ä¸èƒ½å¯¹è‡ªå·±åšåŠ¨ç”»ï¼Œåªæœ‰å…¶å®ƒæ’放器æ‰å¯ä»¥ã€‚" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -324,7 +310,7 @@ msgstr "æ’入关键帧" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "å˜æ¢è½¨è¿¹ä»…适用于基于空间的节点。" #: editor/animation_track_editor.cpp msgid "" @@ -333,44 +319,46 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"音轨åªèƒ½æŒ‡å‘以下类型的节点:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "动画轨迹åªèƒ½æŒ‡å‘AnimationPlayer节点。" #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "åŠ¨ç”»æ’æ”¾å™¨ä¸èƒ½æ’放本身,åªèƒ½æ’æ”¾å…¶ä»–æ’æ”¾å™¨ã€‚" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "æ— æ³•åœ¨æ²¡æœ‰rootçš„æƒ…å†µä¸‹æ·»åŠ æ–°è½¨é“" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "轨é“è·¯å¾„æ— æ•ˆï¼Œå› æ¤æ— æ³•æ·»åŠ é”®ã€‚" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Track䏿˜¯Spatial类型,ä¸èƒ½ä½œä¸ºé”®å€¼æ’å…¥" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "è·Ÿè¸ªè·¯å¾„æ— æ•ˆï¼Œæ‰€ä»¥ä¸èƒ½æ·»åŠ æ–¹æ³•å¸§ã€‚" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "è„šæœ¬ä¸æœªæ‰¾åˆ°VariableGet: " +msgstr "方法未找到: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "移动关键帧" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "å‰ªè´´æ¿æ˜¯ç©ºçš„ ï¼" +msgstr "å‰ªè´´æ¿æ˜¯ç©ºçš„" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -379,25 +367,23 @@ msgstr "缩放关键帧" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "" +msgstr "æ¤é€‰é¡¹ä¸é€‚用于Bezierç¼–è¾‘ï¼Œå› ä¸ºå®ƒåªæ˜¯ä¸€ä¸ªè½¨è¿¹ã€‚" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "ä»…æ˜¾ç¤ºåœ¨æ ‘ä¸é€‰æ‹©çš„节点的轨é“。" #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "按节点分组或将它们显示为普通列表。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap (s): " -msgstr "å¸é™„(åƒç´ ):" +msgstr "å¸é™„: " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "åŠ¨ç”»æ ‘å¯ç”¨ã€‚" +msgstr "动画æ¥è¿›å€¼ã€‚" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -409,19 +395,16 @@ msgid "Edit" msgstr "编辑" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "åŠ¨ç”»æ ‘" +msgstr "动画属性。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "æ‹·è´å‚æ•°" +msgstr "å¤åˆ¶è½¨é“" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "粘贴帧" +msgstr "粘贴轨é“" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -431,8 +414,7 @@ msgstr "缩放选ä¸é¡¹" msgid "Scale From Cursor" msgstr "é€šè¿‡å…‰æ ‡ç¼©æ”¾" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "å¤åˆ¶é€‰ä¸é¡¹" @@ -441,17 +423,16 @@ msgid "Duplicate Transposed" msgstr "å¤åˆ¶å¹¶è½¬ç½®" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "åˆ é™¤å·²é€‰ä¸" +msgstr "åˆ é™¤å·²é€‰ä¸é¡¹" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "å‰å¾€ä¸‹ä¸€æ¥" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" -msgstr "å‰å¾€ä¸Šä¸€æ¥" +msgid "Go to Previous Step" +msgstr "返回上一æ¥" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -463,11 +444,11 @@ msgstr "清空动画" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "选å–动画ä¸çš„节点:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "使用è´å¡žå°”曲线" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -515,7 +496,7 @@ msgstr "缩放比率:" #: editor/animation_track_editor.cpp msgid "Select tracks to copy:" -msgstr "" +msgstr "选择è¦å¤åˆ¶çš„轨é“:" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -553,11 +534,11 @@ msgstr "æ— åŒ¹é…项" msgid "Replaced %d occurrence(s)." msgstr "替æ¢äº†%d项。" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "大å°å†™åŒ¹é…" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "å…¨å—匹é…" @@ -586,16 +567,15 @@ msgid "Reset Zoom" msgstr "é‡ç½®ç¼©æ”¾" #: editor/code_editor.cpp -#, fuzzy msgid "Warnings:" -msgstr "è¦å‘Š" +msgstr "è¦å‘Šï¼š" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "缩放(%):" +msgid "Font Size:" +msgstr "æºå—体大å°:" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "行:" @@ -626,6 +606,7 @@ msgstr "æ·»åŠ " #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -682,9 +663,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "å–æ¶ˆ'%s'的连接'%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "å–æ¶ˆ'%s'的连接'%s'" +msgstr "å–æ¶ˆå¹¿æ’ '%s' 的所有连接" #: editor/connections_dialog.cpp msgid "Connect..." @@ -696,19 +676,16 @@ msgid "Disconnect" msgstr "åˆ é™¤ä¿¡å·è¿žæŽ¥" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect Signal: " -msgstr "连接信å·:" +msgstr "连接信å·ï¼š " #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection: " -msgstr "编辑事件连接" +msgstr "编辑广æ’订阅: " #: editor/connections_dialog.cpp -#, fuzzy -msgid "Are you sure you want to remove all connections from the \"" -msgstr "æ‚¨ç¡®å®šè¦æ‰§è¡Œå¤šä¸ªé¡¹ç›®å—?" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "ä½ ç¡®å®šè¦ä»Žä¿¡å· “%s†ä¸ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -716,22 +693,19 @@ msgstr "ä¿¡å·" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "ä½ ç¡®å®šè¦ä»Žè¯¥å¹¿æ’ä¿¡å·ä¸ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "åˆ é™¤ä¿¡å·è¿žæŽ¥" +msgstr "å–æ¶ˆæ‰€æœ‰å¹¿æ’ä¿¡å·è¿žæŽ¥" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "编辑" +msgstr "编辑…" #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "方法" +msgstr "定ä½åˆ°æ–¹æ³•" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -762,17 +736,14 @@ msgstr "最近文件:" msgid "Search:" msgstr "æœç´¢:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "匹é…项:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "æè¿°:" @@ -829,9 +800,10 @@ msgid "Search Replacement Resource:" msgstr "查找替æ¢èµ„æº:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -861,8 +833,8 @@ msgid "Error loading:" msgstr "åŠ è½½å‡ºé”™:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" -msgstr "åŠ è½½åœºæ™¯å¤±è´¥ï¼Œæ‰¾ä¸åˆ°ä»¥ä¸‹ä¾èµ–项目:" +msgid "Load failed due to missing dependencies:" +msgstr "由于缺少ä¾èµ–项, åŠ è½½å¤±è´¥ï¼š" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -920,14 +892,6 @@ msgstr "改å˜å—典的值" msgid "Thanks from the Godot community!" msgstr "感谢Godot社区!" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "好的" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot引擎贡献者" @@ -1101,8 +1065,7 @@ msgid "Bus options" msgstr "音频总线选项" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "æ‹·è´" @@ -1269,8 +1232,9 @@ msgstr "路径:" msgid "Node Name:" msgstr "节点åç§°:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "åç§°" @@ -1340,26 +1304,29 @@ msgid "Template file not found:" msgstr "找ä¸åˆ°æ¨¡æ¿æ–‡ä»¶:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "选择当å‰ç›®å½•" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "文件已å˜åœ¨ï¼Œç¡®å®šè¦è¦†ç›–它å—?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "选择当å‰ç›®å½•" +msgid "Select This Folder" +msgstr "é€‰æ‹©æ¤æ–‡ä»¶å¤¹" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "æ‹·è´è·¯å¾„" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy -msgid "Open In File Manager" -msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" +msgid "Open in File Manager" +msgstr "在文件管ç†å™¨ä¸æ‰“å¼€" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" +msgid "Show in File Manager" +msgstr "在文件管ç†å™¨ä¸æ˜¾ç¤º" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1383,7 +1350,7 @@ msgstr "打开å•个文件" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "打开文件" +msgstr "打开一个或多个文件" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" @@ -1394,7 +1361,8 @@ msgid "Open a File or Directory" msgstr "打开文件或目录" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "ä¿å˜" @@ -1452,8 +1420,7 @@ msgstr "目录|文件:" msgid "Preview:" msgstr "预览:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "文件:" @@ -1469,24 +1436,11 @@ msgstr "æ‰«ææºæ–‡ä»¶" msgid "(Re)Importing Assets" msgstr "导入(釿–°)资æº" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "æœç´¢å¸®åŠ©" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "类型列表:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "æœç´¢ç±»åž‹" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" msgstr "顶部" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "ç±»:" @@ -1503,28 +1457,28 @@ msgid "Brief Description:" msgstr "简介:" #: editor/editor_help.cpp -msgid "Members" -msgstr "æˆå‘˜" +msgid "Properties" +msgstr "属性" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" -msgstr "æˆå‘˜ï¼š" +#: editor/editor_help.cpp +msgid "Properties:" +msgstr "属性:" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "公共方法" +msgid "Methods" +msgstr "方法" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "公共方法:" +msgid "Methods:" +msgstr "方法:" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "GUI主题项目" +msgid "Theme Properties" +msgstr "主题属性" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "GUI主题:" +msgid "Theme Properties:" +msgstr "Theme Properties:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1551,8 +1505,12 @@ msgid "Constants:" msgstr "常é‡:" #: editor/editor_help.cpp -msgid "Description" -msgstr "æè¿°" +msgid "Class Description" +msgstr "类说明" + +#: editor/editor_help.cpp +msgid "Class Description:" +msgstr "类说明:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1568,12 +1526,12 @@ msgstr "" "url][/color]的方å¼å¸®åŠ©æˆ‘ä»¬å®Œå–„æ–‡æ¡£ã€‚" #: editor/editor_help.cpp -msgid "Properties" -msgstr "属性" +msgid "Property Descriptions" +msgstr "属性说明" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "属性æè¿°ï¼š" +msgid "Property Descriptions:" +msgstr "属性说明:" #: editor/editor_help.cpp msgid "" @@ -1584,12 +1542,12 @@ msgstr "" "[/color]!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "方法" +msgid "Method Descriptions" +msgstr "方法说明" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "方法æè¿°:" +msgid "Method Descriptions:" +msgstr "方法说明:" #: editor/editor_help.cpp msgid "" @@ -1599,18 +1557,58 @@ msgstr "" "当剿²¡æœ‰æ¤æ–¹æ³•çš„æè¿°ã€‚请帮助我们通过 [color=$color] [url=$url] 贡献一个 [/" "url][/color]!" -#: editor/editor_inspector.cpp -#, fuzzy -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "æœç´¢å¸®åŠ©" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "全部显示" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "ä»…é™ç±»" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "仅方法" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "ä»…ä¿¡å·" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "仅常é‡" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "仅属性" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "仅主题属性" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "æˆå‘˜ç±»åž‹" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "ç±»" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "属性:" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "Set" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "" +msgstr "设置乘数:" #: editor/editor_log.cpp msgid "Output:" @@ -1638,6 +1636,11 @@ msgstr "项目导出失败,错误代ç %d。" msgid "Error saving resource!" msgstr "ä¿å˜èµ„æºå‡ºé”™ï¼" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "好的" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "资æºå¦å˜ä¸º..." @@ -1656,7 +1659,7 @@ msgstr "ä¿å˜å‡ºé”™ã€‚" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "" +msgstr "ä¸èƒ½æ‰“å¼€ '%s' 。文件å¯èƒ½å·²è¢«ç§»åŠ¨æˆ–åˆ é™¤ã€‚" #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1692,10 +1695,20 @@ msgstr "æ¤æ“ä½œå¿…é¡»åœ¨æ‰“å¼€ä¸€ä¸ªåœºæ™¯åŽæ‰èƒ½æ‰§è¡Œã€‚" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "æ— æ³•ä¿å˜åœºæ™¯ï¼Œä¾èµ–项(实例或基类)验è¯å¤±è´¥ã€‚" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "æ— æ³•è¦†ç›–ä»å¤„于打开状æ€çš„场景!" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "æ— æ³•åŠ è½½è¦åˆå¹¶çš„MeshLibraryï¼" @@ -1939,6 +1952,12 @@ msgstr "æ— æ³•ä»Žè·¯å¾„ä¸åŠ è½½æ’件脚本: \"%s\"。" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "æ— æ³•ä»Žè·¯å¾„åŠ è½½æ’件脚本: ‘%s’ 脚本看上去似乎有代ç é”™è¯¯ï¼Œè¯·æ£€æŸ¥å…¶è¯æ³•。" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "æ— æ³•ä»Žè·¯å¾„åŠ è½½æ’件脚本: \"%s\" åŸºç±»åž‹ä¸æ˜¯ EditorPlugin 的。" @@ -1982,15 +2001,18 @@ msgstr "åˆ é™¤å¸ƒå±€" msgid "Default" msgstr "默认" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "åœ¨æ–‡ä»¶ç³»ç»Ÿä¸æ˜¾ç¤º" + #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "è¿è¡Œåœºæ™¯" +msgstr "è¿è¡Œæ¤åœºæ™¯" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "å…³é—å…¶ä»–æ ‡ç¾é¡µ" +msgstr "关闿 ‡ç¾é¡µ" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2010,7 +2032,7 @@ msgstr "%d 个文件未展示" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "åœé ä½ç½®" +msgstr "颿¿ä½ç½®" #: editor/editor_node.cpp msgid "Distraction Free Mode" @@ -2065,7 +2087,7 @@ msgid "Save Scene" msgstr "ä¿å˜åœºæ™¯" #: editor/editor_node.cpp -msgid "Save all Scenes" +msgid "Save All Scenes" msgstr "ä¿å˜æ‰€æœ‰åœºæ™¯" #: editor/editor_node.cpp @@ -2094,7 +2116,7 @@ msgid "Undo" msgstr "撤销" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "é‡åš" @@ -2120,18 +2142,18 @@ msgstr "导出" #: editor/editor_node.cpp msgid "Tools" -msgstr "工具(tools)" +msgstr "工具" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "打开项目管ç†å™¨ï¼Ÿ" +msgstr "æ‰“å¼€é¡¹ç›®æ•°æ®æ–‡ä»¶å¤¹" #: editor/editor_node.cpp msgid "Quit to Project List" msgstr "退出到项目列表" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "调试" @@ -2229,18 +2251,16 @@ msgid "Toggle Fullscreen" msgstr "免屿¨¡å¼" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "编辑器设置" +msgstr "打开“编辑器设置/æ•°æ®\"文件夹" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "æ‰“å¼€ç¼–è¾‘å™¨æ•°æ®æ–‡ä»¶å¤¹" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "编辑器设置" +msgstr "æ‰“å¼€â€œç¼–è¾‘å™¨è®¾ç½®â€æ–‡ä»¶å¤¹" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" @@ -2250,10 +2270,6 @@ msgstr "管ç†å¯¼å‡ºæ¨¡æ¿" msgid "Help" msgstr "帮助" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "类型" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2324,13 +2340,12 @@ msgstr "è¿è¡Œè‡ªå®šä¹‰åœºæ™¯" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "" +msgstr "改å˜è§†é¢‘驱动需è¦é‡å¯ç¼–辑器。" #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "ä¿å˜å¹¶é‡æ–°å¯¼å…¥" +msgstr "ä¿å˜å¹¶é‡å¯" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2348,27 +2363,26 @@ msgstr "有更改时更新UI" msgid "Disable Update Spinner" msgstr "ç¦ç”¨è‡ªåŠ¨æ›´æ–°" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "å±žæ€§é¢æ¿" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "导入" #: editor/editor_node.cpp -msgid "Node" -msgstr "节点" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "文件系统" #: editor/editor_node.cpp -#, fuzzy +msgid "Inspector" +msgstr "å±žæ€§é¢æ¿" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "节点" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "展开所有" +msgstr "å±•å¼€åº•éƒ¨é¢æ¿" #: editor/editor_node.cpp scene/resources/visual_shader.cpp msgid "Output" @@ -2447,9 +2461,8 @@ msgid "Thumbnail..." msgstr "缩略图..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "编辑多边形" +msgstr "编辑æ’ä»¶" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2473,15 +2486,13 @@ msgid "Status:" msgstr "状æ€ï¼š" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "编辑" +msgstr "编辑:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "开始ï¼" +msgstr "开始" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2503,7 +2514,7 @@ msgstr "渲染速度" msgid "Physics Frame %" msgstr "物ç†å¸§é€Ÿçއ %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "æ—¶é—´:" @@ -2527,27 +2538,43 @@ msgstr "æ—¶é—´" msgid "Calls" msgstr "调用次数" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "å¯ç”¨" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "层" #: editor/editor_properties.cpp -#, fuzzy msgid "Bit %d, value %d" -msgstr "(Bit)ä½ %d, val %d." +msgstr "æ¯”ç‰¹ä½ %d ,值 %d" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "[空]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Assign.." -msgstr "分é…" +msgstr "分é……。" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" +"æ— æ³•åœ¨ä¿å˜ä¸ºæ–‡ä»¶çš„资æºä¸Šåˆ›å»ºè§†å›¾çº¹ç†ã€‚\n" +"资æºéœ€è¦å±žäºŽåœºæ™¯ã€‚" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" +"æ— æ³•åœ¨æ¤èµ„æºä¸Šåˆ›å»ºè§†å›¾çº¹ç†, å› ä¸ºå®ƒæœªè®¾ç½®ä¸ºæœ¬åœ°åˆ°åœºæ™¯ã€‚\n" +"请打开上é¢çš„ `本地到场景` 属性 (以åŠåŒ…å«å®ƒçš„æ‰€æœ‰èµ„æºåˆ°èŠ‚ç‚¹)。" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2566,10 +2593,6 @@ msgstr "新建%s" msgid "Make Unique" msgstr "转æ¢ä¸ºç‹¬ç«‹èµ„æº" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "在资æºç®¡ç†å™¨ä¸å±•示" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2578,7 +2601,8 @@ msgstr "在资æºç®¡ç†å™¨ä¸å±•示" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "粘贴" @@ -2591,36 +2615,32 @@ msgstr "转æ¢ä¸º%s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "åœ¨ç¼–è¾‘å™¨ä¸æ‰“å¼€" +msgstr "打开编辑器" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "é€‰å®šçš„èŠ‚ç‚¹ä¸æ˜¯ä¸€ä¸ªViewport节点ï¼" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Size: " -msgstr "å•元尺寸:" +msgstr "尺寸: " #: editor/editor_properties_array_dict.cpp msgid "Page: " -msgstr "" +msgstr "页: " #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Key:" -msgstr "æ–°åç§°:" +msgstr "新建帧:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "æ–°åç§°:" +msgstr "新建值:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "" +msgstr "æ·»åŠ å¸§/值对" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -2713,9 +2733,8 @@ msgid "Can't open export templates zip." msgstr "æ— æ³•æ‰“å¼€ZIP导出模æ¿ã€‚" #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "æ¨¡æ¿æ–‡ä»¶ä¸çš„version.txtä¸åˆæ³•。" +msgstr "æ¨¡æ¿æ–‡ä»¶ï¼š %s ä¸çš„ version.txt æ ¼å¼ä¸åˆæ³•。" #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." @@ -2737,7 +2756,7 @@ msgstr "导入:" msgid "" "No download links found for this version. Direct download is only available " "for official releases." -msgstr "当å‰ç‰ˆæœ¬æ²¡æœ‰ä¸‹è½½é“¾æŽ¥ã€‚ç›´é“¾ä¸‹è½½åªæä¾›å®˜æ–¹æ£å¼ç‰ˆã€‚" +msgstr "没有找到这个版本的下载链接。直接下载åªé€‚用于æ£å¼ç‰ˆæœ¬ã€‚" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2777,7 +2796,7 @@ msgstr "下载完æˆã€‚" msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." -msgstr "" +msgstr "模æ¿å®‰è£…失败。å¯ä»¥åœ¨ '%s' 䏿‰¾åˆ°è¿™äº›é—®é¢˜æ¨¡æ¿æ–‡æ¡£ã€‚" #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2858,27 +2877,28 @@ msgid "Download Templates" msgstr "下载模æ¿" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "从列表ä¸é€‰æ‹©é•œåƒ: " +msgstr "从列表ä¸é€‰æ‹©é•œåƒï¼šï¼ˆShift+å•击:在æµè§ˆå™¨ä¸æ‰“开)" #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "æ— æ³•ä»¥å¯å†™æ–¹å¼æ‰“å¼€file_type_cache.cchï¼" #: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "æ”¶è—夹" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "å› ä¸ºæ–‡ä»¶ç³»ç»Ÿæ²¡æ‰¾åˆ°æ–‡ä»¶ï¼Œä¸èƒ½å®šä½åˆ°'%s'ï¼" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "å°†é¡¹ç›®ä½œä¸ºç¼©ç•¥å›¾çš„ç½‘æ ¼æŸ¥çœ‹" +msgstr "ä»¥ç½‘æ ¼ç¼©ç•¥å›¾å½¢å¼æŸ¥çœ‹æ‰€æœ‰é¡¹ã€‚" #: editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "将项目作为列表查看" +msgstr "ä»¥åˆ—è¡¨çš„å½¢å¼æŸ¥çœ‹æ‰€æœ‰é¡¹ã€‚" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -2904,7 +2924,7 @@ msgstr "å¤åˆ¶å‡ºé”™:" msgid "Unable to update dependencies:" msgstr "æ— æ³•æ›´æ–°ä¾èµ–:" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "未æä¾›åç§°" @@ -2941,22 +2961,6 @@ msgid "Duplicating folder:" msgstr "å¤åˆ¶æ–‡ä»¶å¤¹:" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "展开所有" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "收起所有" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "é‡å‘½å为..." - -#: editor/filesystem_dock.cpp -msgid "Move To..." -msgstr "移动..." - -#: editor/filesystem_dock.cpp msgid "Open Scene(s)" msgstr "打开场景" @@ -2965,6 +2969,14 @@ msgid "Instance" msgstr "创建实例节点" #: editor/filesystem_dock.cpp +msgid "Add to favorites" +msgstr "æ·»åŠ åˆ°æ”¶è—夹" + +#: editor/filesystem_dock.cpp +msgid "Remove from favorites" +msgstr "从收è—夹ä¸åˆ 除" + +#: editor/filesystem_dock.cpp msgid "Edit Dependencies..." msgstr "编辑ä¾èµ–..." @@ -2972,19 +2984,33 @@ msgstr "编辑ä¾èµ–..." msgid "View Owners..." msgstr "查看所有者..." +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "é‡å‘½å为..." + #: editor/filesystem_dock.cpp msgid "Duplicate..." msgstr "æ‹·è´..." #: editor/filesystem_dock.cpp -#, fuzzy +msgid "Move To..." +msgstr "移动..." + +#: editor/filesystem_dock.cpp msgid "New Script..." -msgstr "新建脚本" +msgstr "新建脚本…" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "资æºå¦å˜ä¸º..." +msgstr "新建资æºâ€¦" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "全部展开" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "全部折å " #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3006,29 +3032,18 @@ msgid "Re-Scan Filesystem" msgstr "釿–°æ‰«ææ–‡ä»¶ç³»ç»Ÿ" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "æ”¶è—目录" +msgid "Toggle split mode" +msgstr "åˆ‡æ¢æ‹†åˆ†æ¨¡å¼" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Show current scene file." -msgstr "ä¿å˜å½“å‰ç¼–辑的ååœ°ç –(sub-tile)。" +msgid "Search files" +msgstr "æœç´¢æ–‡ä»¶" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "将选ä¸çš„场景实例为选ä¸èŠ‚ç‚¹çš„å节点。" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "æœç´¢ç±»åž‹" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." @@ -3036,51 +3051,37 @@ msgstr "" "æ‰«ææ–‡ä»¶ï¼Œ\n" "请ç¨å€™ã€‚" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "移动" #: editor/filesystem_dock.cpp -#, fuzzy msgid "There is already file or folder with the same name in this location." -msgstr "å·²å˜åœ¨ä¸Žç»™å®šå称相åŒçš„目录。" +msgstr "当å‰ä½ç½®å·²å˜åœ¨ç›¸åŒåå—的文件或目录。" #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "覆盖" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "创建脚本" #: editor/find_in_files.cpp -#, fuzzy -msgid "Find in files" -msgstr "æŸ¥æ‰¾ç –å—" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Find: " -msgstr "查找" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Whole words" -msgstr "å…¨å—匹é…" +msgid "Find in Files" +msgstr "åœ¨æ–‡ä»¶ä¸æŸ¥æ‰¾" #: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "大å°å†™åŒ¹é…" +msgid "Find:" +msgstr "查找:" #: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "文件夹:" #: editor/find_in_files.cpp -#, fuzzy -msgid "Filter: " -msgstr "ç›é€‰:" +msgid "Filters:" +msgstr "ç›é€‰ï¼š" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3096,52 +3097,48 @@ msgid "Cancel" msgstr "å–æ¶ˆ" #: editor/find_in_files.cpp -#, fuzzy +msgid "Find: " +msgstr "查找: " + +#: editor/find_in_files.cpp msgid "Replace: " -msgstr "替æ¢" +msgstr "替æ¢ï¼š " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "全部替æ¢" +msgstr "全部替æ¢ï¼ˆæ— 法撤销)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "ä¿å˜ä¸..." +msgstr "æœç´¢ä¸â€¦" #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "æœç´¢æ–‡æœ¬" +msgstr "æœç´¢å®Œæ¯•" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "错误:å·²å˜åœ¨åŒå动画ï¼" +msgstr "分组åç§°å·²å˜åœ¨ã€‚" #: editor/groups_editor.cpp -#, fuzzy msgid "invalid Group name." -msgstr "åç§°éžæ³•:。" +msgstr "éžæ³•分组å。" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "分组" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes not in Group" -msgstr "节点分组" +msgstr "ä¸åœ¨åˆ†ç»„ä¸çš„节点" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp msgid "Filter nodes" msgstr "ç›é€‰èŠ‚ç‚¹" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes in Group" -msgstr "节点分组" +msgstr "分组ä¸çš„节点" #: editor/groups_editor.cpp msgid "Add to Group" @@ -3152,9 +3149,8 @@ msgid "Remove from Group" msgstr "从分组ä¸ç§»é™¤" #: editor/groups_editor.cpp -#, fuzzy msgid "Manage Groups" -msgstr "图片分组" +msgstr "管ç†åˆ†ç»„" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3186,7 +3182,7 @@ msgstr "与独立的æè´¨å’ŒåŠ¨ç”»ä¸€åŒå¯¼å…¥" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "ä¸Žç‹¬ç«‹çš„ç‰©ä½“ã€æè´¨å’ŒåŠ¨ç”»ä¸€åŒå¯¼å…¥" +msgstr "使用å•独的对象 + æè´¨ + 动画导入" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" @@ -3261,18 +3257,13 @@ msgstr "釿–°å¯¼å…¥" msgid "Failed to load resource." msgstr "åŠ è½½èµ„æºå¤±è´¥ã€‚" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "好的" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "展开所有属性" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "收起所有属性" +msgid "Collapse All Properties" +msgstr "æŠ˜å æ‰€æœ‰å±žæ€§" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3288,9 +3279,8 @@ msgid "Paste Params" msgstr "粘贴帧" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "资æºå‰ªåˆ‡æ¿ä¸æ— 内容ï¼" +msgstr "编辑资æºå‰ªè´´æ¿" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3333,9 +3323,8 @@ msgid "Object properties." msgstr "对象属性。" #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "ç›é€‰èŠ‚ç‚¹" +msgstr "属性ç›é€‰" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -3350,37 +3339,32 @@ msgid "Select a Node to edit Signals and Groups." msgstr "请选择一个节点æ¥è®¾ç½®ä¿¡å·æˆ–分组。" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "编辑多边形" +msgstr "编辑一个æ’ä»¶" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "创建C#解决方案" +msgstr "创建一个æ’ä»¶" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "æ’件列表" +msgstr "æ’ä»¶å:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "" +msgstr "åæ–‡ä»¶å¤¹ï¼š" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "è¯è¨€" +msgstr "è¯è¨€ï¼š" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "脚本å¯ç”¨" +msgstr "脚本å:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "" +msgstr "现在激活å—?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -3439,15 +3423,14 @@ msgstr "æ·»åŠ åŠ¨ç”»" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "åŠ è½½" +msgstr "åŠ è½½..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "æ¤ç±»åž‹çš„节点ä¸èƒ½è¢«ä½¿ç”¨ã€‚ä»…å…è®¸ä½¿ç”¨æ ¹èŠ‚ç‚¹ã€‚" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3457,67 +3440,63 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree å¤„äºŽéžæ¿€æ´»çжæ€ã€‚\n" +"æ¿€æ´»ä»¥ä½¿ç”¨æ’æ”¾åŠŸèƒ½ï¼Œå¦‚æžœæ¿€æ´»å¤±è´¥è¯·æ£€æŸ¥èŠ‚ç‚¹è¦å‘Šä¿¡æ¯ã€‚" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "在æ¤ç©ºé—´ä¸‹è®¾ç½®ä½ç½®æ··åˆçжæ€" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "选择并移动点,使用 RMB 创建点。" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "åˆ é™¤ç‚¹" +msgstr "创建点。" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "é¼ æ ‡å³é”®:移除点。" +msgstr "擦除点。" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "移动点" +msgstr "点" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "动画节点" +msgstr "打开动画节点" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "动作%så·²å˜åœ¨ï¼" +msgstr "三角形已ç»å˜åœ¨" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D ä¸å±žäºŽä»»ä½• AnimationTree 节点。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "ä¸å˜åœ¨ä»»ä½•ä¸‰è§’å½¢ï¼Œå› æ¤ä¸ä¼šæœ‰ä»»ä½•混效果åˆäº§ç”Ÿã€‚" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "通过连接点创建三角形。" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "æ£åœ¨è§£æžç¬¬%d个三角形:" +msgstr "擦除点和三角形。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "自动创建混åˆä¸‰è§’å½¢ï¼ˆéžæ‰‹åŠ¨ï¼‰" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3525,6 +3504,11 @@ msgstr "" msgid "Snap" msgstr "å¸é™„" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "æ··åˆ:" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" @@ -3532,44 +3516,41 @@ msgstr "编辑ç›é€‰å™¨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "输出节点ä¸èƒ½è¢«æ·»åŠ åˆ°æ··åˆæ ‘。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." -msgstr "" +msgstr "æ— æ³•è¿žæŽ¥ï¼Œç«¯å£å¯èƒ½è¢«å ç”¨æˆ–è€…è¿žæŽ¥æ— æ•ˆã€‚" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "" +msgstr "æ²¡æœ‰è®¾ç½®åŠ¨ç”»æ’æ”¾å™¨ï¼Œå› æ¤æ— 法获å–轨é“å称。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "" +msgstr "æ— æ•ˆçš„æ’æ”¾å™¨è·¯åŠ²è®¾ç½®ï¼Œå› æ¤æ— 法获å–轨é“å称。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." -msgstr "" +msgstr "åŠ¨ç”»æ’æ”¾å™¨æ²¡æœ‰åˆæ³•çš„æ ¹èŠ‚ç‚¹è·¯å¾„ï¼Œå› æ¤æ— 法获å–轨é“å称。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "æ·»åŠ èŠ‚ç‚¹" +msgstr "æ·»åŠ èŠ‚ç‚¹.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "编辑ç›é€‰å™¨" +msgstr "编辑轨é“过滤器:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable filtering" -msgstr "å…许编辑åå™èŠ‚ç‚¹" +msgstr "å…许过滤" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3597,14 +3578,12 @@ msgid "Remove Animation" msgstr "移除动画" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "错误:动画åä¸åˆæ³•ï¼" +msgstr "æ— æ•ˆçš„åŠ¨ç”»åç§°ï¼" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "错误:å·²å˜åœ¨åŒå动画ï¼" +msgstr "动画åç§°å·²å˜åœ¨ï¼" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3628,14 +3607,12 @@ msgid "Duplicate Animation" msgstr "å¤åˆ¶åŠ¨ç”»" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "错误:没有拷è´çš„动画ï¼" +msgstr "æ²¡æœ‰éœ€è¦æ‹·è´çš„动画ï¼" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "错误:剪切æ¿ä¸æ²¡æœ‰åŠ¨ç”»èµ„æºï¼" +msgstr "剪切æ¿ä¸ä¸å˜åœ¨åŠ¨ç”»èµ„æºï¼" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3646,9 +3623,8 @@ msgid "Paste Animation" msgstr "粘贴动画" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "错误:没有选ä¸è¦ç¼–辑的动画ï¼" +msgstr "没有动画需è¦ç¼–辑ï¼" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3692,14 +3668,12 @@ msgid "New" msgstr "新建" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "编辑事件连接" +msgstr "编辑过渡方å¼â€¦" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "åœ¨ç¼–è¾‘å™¨ä¸æ‰“å¼€" +msgstr "åœ¨å±žæ€§æ£€æŸ¥å™¨ä¸æ‰“å¼€" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3758,9 +3732,8 @@ msgid "Include Gizmos (3D)" msgstr "包括3D控制器" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "粘贴动画" +msgstr "固定 AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3791,34 +3764,32 @@ msgid "Cross-Animation Blend Times" msgstr "跨动画时间混åˆ" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "End" msgstr "终点" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "å³åˆ»" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "åŒæ¥" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "在终点" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "行程" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "å过渡动画需è¦å¼€å§‹å’Œç»“æŸèŠ‚ç‚¹ã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "ä¸åœ¨èµ„æºè·¯å¾„下。" +msgstr "在路径: %s ä¸‹æ²¡æœ‰ä»»ä½•æ’æ”¾èµ„æºã€‚" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -3826,34 +3797,33 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"选择并移动节点。\n" +"é¼ æ ‡å³é”®æ·»åŠ æ–°èŠ‚ç‚¹ã€‚\n" +"Shift+é¼ æ ‡å·¦é”®åˆ›å»ºè¿žæŽ¥ã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "创建新的 %s" +msgstr "创建新节点。" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "连接节点" +msgstr "连接节点。" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition" -msgstr "移除选ä¸è½¨é“。" +msgstr "移除选ä¸çš„节点或过渡动画" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." -msgstr "" +msgstr "开坿ˆ–å…³é—åŠ¨ç”»çš„è‡ªåŠ¨æ’æ”¾ï¼Œåœ¨å¼€å§‹ï¼Œé‡å¯æˆ–者æœç´¢0ä½ç½®å¤„。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "设置终点结æŸåŠ¨ç”»ã€‚è¿™å¯¹äºŽå过渡动画éžå¸¸æœ‰ç”¨ã€‚" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "过渡" +msgstr "过渡: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3907,10 +3877,6 @@ msgid "Amount:" msgstr "æ•°é‡:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "æ··åˆ:" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "æ··åˆ0:" @@ -4051,14 +4017,12 @@ msgid "Asset Download Error:" msgstr "资æºä¸‹è½½å‡ºé”™:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "æ£åœ¨ä¸‹è½½" +msgstr "下载ä¸ï¼ˆ %s / %s )…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "æ£åœ¨ä¸‹è½½" +msgstr "下载ä¸â€¦" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." @@ -4085,14 +4049,12 @@ msgid "Download for this asset is already in progress!" msgstr "æ¤èµ„æºæ–‡ä»¶æ£åœ¨ä¸‹è½½ä¸ï¼" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "First" -msgstr "首先" +msgstr "第一项" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "上一个目录" +msgstr "上一个" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -4100,7 +4062,7 @@ msgstr "下一项" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "最åŽä¸€é¡¹" #: editor/plugins/asset_library_editor_plugin.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -4223,29 +4185,28 @@ msgid "Create new horizontal and vertical guides" msgstr "åˆ›å»ºåž‚ç›´æ°´å¹³æ ‡å°º" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move pivot" -msgstr "移动旋转ä¸å¿ƒä½ç½®" +msgstr "移动轴心点" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem" -msgstr "编辑CanvasItem" +msgstr "旋转 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move anchor" -msgstr "移动动作" +msgstr "移动锚点" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Resize CanvasItem" -msgstr "编辑CanvasItem" +msgstr "调整 CanvasItem 尺寸" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "缩放包å«é¡¹" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem" -msgstr "编辑CanvasItem" +msgstr "移动 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -4264,17 +4225,14 @@ msgid "Paste Pose" msgstr "粘贴姿势" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom out" msgstr "缩å°" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom reset" msgstr "é‡ç½®ç¼©æ”¾" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom in" msgstr "放大" @@ -4307,6 +4265,10 @@ msgid "Rotate Mode" msgstr "旋转模å¼" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Mode" +msgstr "缩放模å¼" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4322,16 +4284,14 @@ msgid "Pan Mode" msgstr "移动画布" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle snapping." -msgstr "切æ¢å¸é™„" +msgstr "开关å¸é™„。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" msgstr "使用å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping Options" msgstr "å¸é™„选项" @@ -4373,9 +4333,8 @@ msgid "Snap to node sides" msgstr "å¸é™„到nodeè¾¹" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node center" -msgstr "å¸é™„到node锚点" +msgstr "å¸é™„到节点ä¸å¿ƒä½ç½®" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to other nodes" @@ -4404,6 +4363,10 @@ msgid "Restores the object's children's ability to be selected." msgstr "æ¢å¤èŠ‚ç‚¹çš„åå™èƒ½å¤Ÿè¢«é€‰ä¸ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "骨架选项" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "显示骨骼" @@ -4417,12 +4380,11 @@ msgstr "清除IK链" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "从节点制作自定义骨骼" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" -msgstr "清除骨骼" +msgstr "清除自定义骨骼" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4455,6 +4417,10 @@ msgid "Show Viewport" msgstr "显示视图窗å£" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "显示组和é”å®šå›¾æ ‡" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "居䏿˜¾ç¤ºé€‰ä¸èŠ‚ç‚¹" @@ -4467,9 +4433,8 @@ msgid "Layout" msgstr "布局" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "æ’入关键帧" +msgstr "æ’入帧。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -4534,9 +4499,8 @@ msgid "Set Handle" msgstr "设置处ç†ç¨‹åº" #: editor/plugins/cpu_particles_editor_plugin.cpp -#, fuzzy msgid "CPUParticles" -msgstr "ç²’å" +msgstr "CPUç²’å" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4550,11 +4514,11 @@ msgstr "从节点创建å‘射器(Emission)" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "Flat0" +msgstr "å¹³é¢0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "Flat1" +msgstr "å¹³é¢1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" @@ -4727,7 +4691,7 @@ msgstr "创建轮廓(outlines)" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Mesh" +msgstr "网络" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -4895,9 +4859,8 @@ msgid "Create Navigation Polygon" msgstr "创建导航多边形" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" -msgstr "æ£åœ¨ç”ŸæˆAABB" +msgid "Generating Visibility Rect" +msgstr "生æˆå¯è§†åŒ–区域" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4925,6 +4888,11 @@ msgstr "清除Emission Mask(å‘å°„å±è”½ï¼‰" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "转æ¢ä¸º CPU ç²’å" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "ç²’å" @@ -4994,13 +4962,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "需è¦ä½¿ç”¨â€œParticlesMaterialâ€ç±»åž‹çš„å¤„ç†æè´¨ã€‚" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" -msgstr "生æˆAABB" +msgid "Generating AABB" +msgstr "æ£åœ¨ç”ŸæˆAABB" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "转æ¢ä¸ºå¤§å†™" +msgid "Generate AABB" +msgstr "生æˆAABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5088,12 +5055,12 @@ msgstr "选项" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "é•œåƒæ‰‹æŸ„角度" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "é•œåƒæ‰‹æŸ„长度" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -5128,56 +5095,49 @@ msgid "Remove In-Control Point" msgstr "移除曲线内控制点" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move joint" -msgstr "移动点" +msgstr "移动关节" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "Polygon2D 的骨架属性并没有指å‘一个 Skeleton2D 节点" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "显示骨骼" +msgstr "åŒæ¥éª¨éª¼" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "创建UV贴图" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "创建多边形" +msgstr "创建多边形和 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "拆分点本身。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "ä¸èƒ½ä»Žå·²å˜åœ¨çš„边上拆分。" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "动作%så·²å˜åœ¨ï¼" +msgstr "拆分已å˜åœ¨ã€‚" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "æ·»åŠ é¡¶ç‚¹" +msgstr "æ·»åŠ åˆ†è£‚" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "è·¯å¾„éžæ³•ï¼" +msgstr "æ— æ•ˆæ‹†åˆ†ï¼š " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "移除顶点" +msgstr "移除拆分" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5185,7 +5145,7 @@ msgstr "å˜æ¢UV贴图" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "绘制骨骼æƒé‡" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5193,25 +5153,21 @@ msgstr "2D多边形UV编辑器" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "编辑多边形" +msgstr "多边形" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "拆分路径" +msgstr "拆分" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "æ·»åŠ éª¨éª¼" +msgstr "骨骼" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" msgstr "创建多边形" @@ -5221,7 +5177,7 @@ msgstr "移动点" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl:旋转" +msgstr "Ctrl:旋转" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" @@ -5245,24 +5201,23 @@ msgstr "缩放多边形" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "连接两个点创建一个拆分" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "请先选择一个设置项目 ï¼" +msgstr "选择一个拆分以擦除它" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "使用指定的强度进行æƒé‡ç»˜åˆ¶" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "使用指定强度清除æƒé‡ç»˜åˆ¶" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "åŠå¾„:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5277,9 +5232,8 @@ msgid "Clear UV" msgstr "清除UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "GridMap设置" +msgstr "ç½‘æ ¼è®¾ç½®" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5290,34 +5244,28 @@ msgid "Grid" msgstr "ç½‘æ ¼" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "设置å¸é™„" +msgstr "é…ç½®ç½‘æ ¼ï¼š" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "ç½‘æ ¼åç§»é‡:" +msgstr "ç½‘æ ¼ X å移:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "ç½‘æ ¼åç§»é‡:" +msgstr "ç½‘æ ¼ Y å移:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "ç½‘æ ¼å¤§å°:" +msgstr "ç½‘æ ¼ X æ¥è¿›ï¼š" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "ç½‘æ ¼å¤§å°:" +msgstr "ç½‘æ ¼ Y æ¥è¿›ï¼š" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "缩放多边形" +msgstr "åŒæ¥éª¨éª¼åˆ°å¤šè¾¹å½¢" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5345,22 +5293,22 @@ msgid "Paste Resource" msgstr "粘贴资æº" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "åœ¨ç¼–è¾‘å™¨ä¸æ‰“å¼€" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "实例:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "类型:" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "åœ¨ç¼–è¾‘å™¨ä¸æ‰“å¼€" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "åŠ è½½èµ„æº" @@ -5371,12 +5319,11 @@ msgstr "é¢„åŠ è½½èµ„æº" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree 没有设置路径到一个 AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "åŠ¨ç”»æ ‘ä¸å¯ç”¨ã€‚" +msgstr "AnimationPlayer è·¯å¾„æ— æ•ˆ" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5387,19 +5334,20 @@ msgid "Close and save changes?" msgstr "å…³é—å¹¶ä¿å˜æ›´æ”¹å—?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "移动文件时出错:\n" +msgstr "写入文本文件时出错:" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error: could not load file." +msgstr "é”™è¯¯ï¼šæ— æ³•åŠ è½½æ–‡ä»¶ã€‚" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "æ— æ³•åŠ è½½å›¾ç‰‡" +msgstr "é”™è¯¯ï¼Œæ— æ³•åŠ è½½æ–‡ä»¶ã€‚" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "ä¿å˜ç –å—集失败ï¼" +msgstr "ä¿å˜æ–‡ä»¶æ—¶å‡ºé”™ï¼" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5418,17 +5366,14 @@ msgid "Error importing" msgstr "导入出错" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "新建文件夹 ..." +msgstr "新建文本文档..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" -msgstr "打开å•个文件" +msgstr "打开文件" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." msgstr "å¦å˜ä¸º..." @@ -5446,7 +5391,7 @@ msgstr " 类引用" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "åˆ‡æ¢æŒ‰å—æ¯è¡¨æŽ’åºæ–¹å¼æŽ’列方法。" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -5477,9 +5422,8 @@ msgid "File" msgstr "文件" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "查看文件" +msgstr "新建文本文件" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5494,11 +5438,7 @@ msgid "Copy Script Path" msgstr "æ‹·è´è„šæœ¬è·¯å¾„" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "在资æºç®¡ç†å™¨ä¸æ˜¾ç¤º" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" +msgid "History Previous" msgstr "åŽé€€" #: editor/plugins/script_editor_plugin.cpp @@ -5569,7 +5509,7 @@ msgid "Keep Debugger Open" msgstr "ä¿æŒè°ƒè¯•器打开" #: editor/plugins/script_editor_plugin.cpp -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "使用外部编辑器进行调试" #: editor/plugins/script_editor_plugin.cpp @@ -5577,10 +5517,6 @@ msgid "Open Godot online documentation" msgstr "打开Godot在线文档" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "æœç´¢ç±»ã€‚" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "æœç´¢æ–‡æ¡£ã€‚" @@ -5617,37 +5553,28 @@ msgid "Debugger" msgstr "调试器" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search results" -msgstr "æœç´¢å¸®åŠ©" - -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "æœç´¢ç±»åž‹" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "å†…å»ºè„šæœ¬åªæœ‰åœ¨å…¶æ‰€å±žçš„节点读å–åŽæ‰èƒ½è¢«ä¿®æ”¹" +msgid "Search Results" +msgstr "æœç´¢ç»“æžœ" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "行:" +msgstr "行" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(忽略)" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "转到函数" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "åªå¯ä»¥æ‹–入文件系统的资æºã€‚" +msgstr "åªå¯ä»¥æ‹–拽æ¥è‡ªæ–‡ä»¶ç³»ç»Ÿä¸çš„资æºã€‚" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "代ç 补全" +msgstr "æŸ¥æ‰¾æ ‡è®°" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5671,11 +5598,11 @@ msgstr "首嗿¯å¤§å†™" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "è¯æ³•高亮显示" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "æ ‡å‡†" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5728,12 +5655,12 @@ msgid "Trim Trailing Whitespace" msgstr "修剪行åŽç©ºç™½" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" +msgid "Convert Indent to Spaces" msgstr "å°†ç¼©è¿›è½¬ä¸ºç©ºæ ¼" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "将缩进转为Tab" +msgid "Convert Indent to Tabs" +msgstr "将缩进转为Tabs" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5749,37 +5676,28 @@ msgid "Remove All Breakpoints" msgstr "移除所有æ–点" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" +msgid "Go to Next Breakpoint" msgstr "å‰å¾€ä¸‹ä¸€ä¸ªæ–点" #: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" +msgid "Go to Previous Breakpoint" msgstr "å‰å¾€ä¸Šä¸€ä¸ªæ–点" #: editor/plugins/script_text_editor.cpp -msgid "Convert To Uppercase" -msgstr "转æ¢ä¸ºå¤§å†™" - -#: editor/plugins/script_text_editor.cpp -msgid "Convert To Lowercase" -msgstr "转æ¢ä¸ºå°å†™" - -#: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "查找上一项" #: editor/plugins/script_text_editor.cpp -#, fuzzy -msgid "Find in files..." -msgstr "ç›é€‰æ–‡ä»¶..." +msgid "Find in Files..." +msgstr "åœ¨æ–‡ä»¶ä¸æŸ¥æ‰¾..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "å‰å¾€å‡½æ•°..." +msgid "Go to Function..." +msgstr "转到函数..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "å‰å¾€è¡Œ..." +msgid "Go to Line..." +msgstr "转到行..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5791,40 +5709,35 @@ msgstr "ç€è‰²å™¨" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "该骨架没有骨骼绑定,请创建一些 Bone2D 骨骼å节点。" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "骨骼..." +msgstr "2D 骨骼节点" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "制作放æ¾å§¿åŠ¿ï¼ˆä»Žéª¨éª¼ï¼‰" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "将骨骼é‡ç½®ä¸ºæ”¾æ¾å§¿åŠ¿" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "创建导航Mesh(ç½‘æ ¼)" +msgstr "创建物ç†éª¨éª¼" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "骨骼..." +msgstr "骨架" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "创建C#解决方案" +msgstr "创建物ç†éª¨æž¶" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "æ’æ”¾" +msgstr "æ’æ”¾ IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5875,6 +5788,14 @@ msgid "Animation Key Inserted." msgstr "æ’入动画键。" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "音调" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "å航" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "绘制的对象" @@ -5959,9 +5880,8 @@ msgid "This operation requires a single selected node." msgstr "æ¤æ“作åªèƒ½åº”用于å•个选ä¸èŠ‚ç‚¹ã€‚" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "查看信æ¯" +msgstr "é”定视角旋转" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6008,9 +5928,8 @@ msgid "Doppler Enable" msgstr "å¯ç”¨å¤šæ™®å‹’效应" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "åˆ›å»ºç½‘æ ¼é¢„è§ˆ" +msgstr "影片预览" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6041,6 +5960,10 @@ msgid "Freelook Speed Modifier" msgstr "自由视图速度调整" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "é”定视角旋转" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "XFormå¯¹è¯æ¡†" @@ -6143,11 +6066,6 @@ msgid "Tool Scale" msgstr "缩放工具" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Snap To Floor" -msgstr "å¸é™„åˆ°ç½‘æ ¼" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "切æ¢è‡ªç”±è§‚察模å¼" @@ -6157,7 +6075,7 @@ msgstr "å˜æ¢" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "å¸é™„物体到地é¢" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6188,9 +6106,8 @@ msgid "4 Viewports" msgstr "4个视å£" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "Gizmos(å¯è§†åŒ–调试工具)" +msgstr "Gizmos(å°å·¥å…·ï¼‰" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6266,51 +6183,44 @@ msgid "Post" msgstr "å‘布(Post)" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "ä¿å˜è·¯å¾„为空ï¼" +msgstr "Sprite 是空的ï¼" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "æ— æ³•ä½¿ç”¨åŠ¨ç”»å¸§è½¬æ¢ç²¾çµä¸ºç½‘æ ¼ã€‚" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "æ— æ•ˆçš„å‡ ä½•ä½“ï¼Œæ— æ³•ä½¿ç”¨ç½‘æ ¼æ›¿æ¢ã€‚" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "动画帧" +msgstr "Sprite ç²¾çµ" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "转æ¢ä¸º%s" +msgstr "转æ¢ä¸º 2D ç½‘æ ¼" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "åˆ›å»ºè½®å»“ç½‘æ ¼(Outline Mesh)" +msgstr "创建 2D ç½‘æ ¼" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "简å•化: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "å¸é™„(åƒç´ ):" +msgstr "扩展(åƒç´ ): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "预览精çµé›†" +msgstr "更新预览" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "设置" +msgstr "设置:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6414,12 +6324,11 @@ msgstr "æ¥é•¿ï¼ˆç§’):" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "乿œˆï¼š" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" -msgstr "纹ç†åŒºåŸŸ" +msgstr "TextureRegion 纹ç†åŒºåŸŸ" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -6550,9 +6459,12 @@ msgid "Erase Selection" msgstr "擦除选ä¸" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "åç§°éžæ³•:。" +msgstr "ä¿®å¤æ— 效的瓦片" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "切割选择" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6575,9 +6487,8 @@ msgid "Erase TileMap" msgstr "æ“¦é™¤ç –å—地图" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "æŸ¥æ‰¾ç –å—" +msgstr "查找瓦片" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6600,35 +6511,36 @@ msgid "Pick Tile" msgstr "é€‰æ‹©ç –å—(Tile)" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy -msgid "Move Selection" -msgstr "移除选ä¸é¡¹" +msgid "Copy Selection" +msgstr "å¤åˆ¶é€‰æ‹©" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate left" +msgstr "å‘左旋转" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" -msgstr "旋转0度" +msgid "Rotate right" +msgstr "å‘峿—‹è½¬" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" -msgstr "旋转90度" +msgid "Flip horizontally" +msgstr "水平翻转" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" -msgstr "旋转180度" +msgid "Flip vertically" +msgstr "垂直翻转" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" -msgstr "旋转270度" +msgid "Clear transform" +msgstr "æ¸…é™¤å˜æ¢" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "ä»Žæ ‘ä¸æ·»åŠ èŠ‚ç‚¹" +msgstr "æ·»åŠ çº¹ç†åˆ°ç“¦ç‰‡é›†" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "åˆ é™¤å½“å‰é…置项" +msgstr "从瓦片集ä¸åˆ 除当å‰çº¹ç†" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6647,15 +6559,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "显示瓦片的åå—ï¼ˆæŒ‰ä½ Alt 键)" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" -msgstr "" +msgid "Remove selected texture and ALL TILES which use it?" +msgstr "确定移除选ä¸çš„纹ç†ä»¥åŠã€æ‰€æœ‰ã€‘使用它的ã€ç“¦ç‰‡é›†ã€‘å—?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "没有选择è¦ç§»é™¤çš„纹ç†ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6666,59 +6578,61 @@ msgid "Merge from scene?" msgstr "确定è¦åˆå¹¶åœºæ™¯ï¼Ÿ" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." -msgstr "" +msgid "%s file(s) were not added because was already on the list." +msgstr "%s æ–‡ä»¶æ²¡æœ‰è¢«æ·»åŠ ï¼Œå› ä¸ºå·²æ·»åŠ åœ¨åˆ—è¡¨ä¸ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"拖拽手柄以编辑举行。\n" +"点击å¦ä¸€ä¸ªç“¦ç‰‡è¿›è¡Œç¼–辑。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: set bit on.\n" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" -"é¼ æ ‡å·¦é”®ï¼š å¯ç”¨è¯¥bit。\n" -"é¼ æ ‡å³é”®ï¼š ç¦ç”¨è¯¥bit。" +"é¼ æ ‡å·¦é”®ï¼š å¯ç”¨æ¯”特。\n" +"é¼ æ ‡å³é”®ï¼š 关闿¯”特。\n" +"点击å¦ä¸€ä¸ªç“¦ç‰‡è¿›è¡Œç¼–辑。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "ä¿å˜å½“å‰ç¼–辑的ååœ°ç –(sub-tile)。" +msgstr "" +"选择当å‰ç¼–辑状æ€ä¸‹çš„å瓦片。\n" +"点击选择å¦ä¸€ä¸ªç“¦ç‰‡è¿›è¡Œç¼–辑。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings.\n" "Click on another Tile to edit it." msgstr "" -"请选择一个ååœ°ç –(sub-tile)ä½œä¸ºå›¾æ ‡ï¼Œæ¤å›¾æ ‡è¿˜ä¼šè¢«ç»‘å®šä¸ºæ— æ•ˆçš„åœ°ç –(autotile)。" +"选择一个åç“¦ç‰‡ä½œä¸ºå›¾æ ‡ï¼Œæ¤å›¾æ ‡è¿˜ä¼šç»‘å®šåˆ°æ— æ•ˆçš„è‡ªåŠ¨ç“¦ç‰‡ä¸Šã€‚\n" +"点击选择å¦ä¸€ä¸ªç“¦ç‰‡è¿›è¡Œç¼–辑。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." -msgstr "选择è¦ä¿®æ”¹ä¼˜å…ˆçº§çš„ååœ°ç –ï¼ˆsub-tile)。" +msgstr "" +"选择并修改å瓦片的优先级。\n" +"点击选择å¦ä¸€ä¸ªç“¦ç‰‡è¿›è¡Œç¼–辑。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "æ¤æ“ä½œå¿…é¡»åœ¨æ‰“å¼€ä¸€ä¸ªåœºæ™¯åŽæ‰èƒ½æ‰§è¡Œã€‚" +msgstr "ä¸èƒ½ä¿®æ”¹è¯¥å±žæ€§ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" msgstr "ç –å—集" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" msgstr "顶点" @@ -6727,14 +6641,12 @@ msgid "Fragment" msgstr "片段" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "峿–¹" +msgstr "ç¯å…‰" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "ç€è‰²å™¨" +msgstr "å¯è§†ç€è‰²å™¨" #: editor/project_export.cpp msgid "Runnable" @@ -6753,6 +6665,14 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "没有æ¤å¹³å°çš„导出模æ¿:" #: editor/project_export.cpp +msgid "Release" +msgstr "å‘行" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "全部导出" + +#: editor/project_export.cpp msgid "Presets" msgstr "预设" @@ -6761,6 +6681,10 @@ msgid "Add..." msgstr "æ·»åŠ ..." #: editor/project_export.cpp +msgid "Export Path:" +msgstr "导出路径:" + +#: editor/project_export.cpp msgid "Resources" msgstr "资æº" @@ -6819,6 +6743,14 @@ msgid "Export PCK/Zip" msgstr "导出 PCK/ZIP" #: editor/project_export.cpp +msgid "Export mode?" +msgstr "导出模å¼ï¼Ÿ" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "全部导出" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "没有下列平å°çš„导出模æ¿:" @@ -6831,22 +6763,20 @@ msgid "The path does not exist." msgstr "路径ä¸å˜åœ¨ã€‚" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "请选择一个ä¸åŒ…å«'project.godot'文件的文件夹。" +msgstr "æ— æ•ˆçš„â€œ.zipâ€é¡¹ç›®æ–‡ä»¶ï¼Œæ²¡æœ‰åŒ…å«ä¸€ä¸ªâ€œproject.godotâ€æ–‡ä»¶ã€‚" #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "请选择一个空目录。" #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "请选择一个'project.godot'文件。" +msgstr "请选择一个“project.godotâ€æˆ–者“.zipâ€æ–‡ä»¶ã€‚" #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "文件夹已ç»åŒ…å«äº†ä¸€ä¸ªGodot项目。" #: editor/project_manager.cpp msgid "Imported Project" @@ -6936,9 +6866,8 @@ msgid "Project Path:" msgstr "项目目录:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "项目目录:" +msgstr "项目安装路径:" #: editor/project_manager.cpp msgid "Browse" @@ -7056,11 +6985,11 @@ msgid "Mouse Button" msgstr "é¼ æ ‡æŒ‰é”®" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" -msgstr "æ— æ•ˆçš„æ“作å称。它ä¸èƒ½æ˜¯ç©ºçš„也ä¸èƒ½åŒ…å« '/', ':', '=', '\\' 或者 '\"'。" +msgstr "" +"æ— æ•ˆçš„æ“作å称。æ“作åä¸èƒ½ä¸ºç©ºï¼Œä¹Ÿä¸èƒ½åŒ…å« '/', ':', '=', '\\' 或者空å—符串" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7071,18 +7000,16 @@ msgid "Rename Input Action Event" msgstr "é‡å‘½å输入事件" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "é‡å‘½å动画:" +msgstr "æ”¹å˜æ“作隔离区" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "设备" +msgstr "所有设备" #: editor/project_settings_editor.cpp msgid "Device" @@ -7129,24 +7056,20 @@ msgid "Wheel Down Button" msgstr "滚轮å‘下" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "滚轮å‘上" +msgstr "滚轮左键" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "å³é”®" +msgstr "滚轮å³é”®" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "按键 6" +msgstr "X 按键 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "按键 6" +msgstr "X 按键 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7286,17 +7209,13 @@ msgstr "项目设置(project.godot)" msgid "General" msgstr "常规" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "属性:" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "é‡å†™çš„......" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "编辑器需è¦é‡å¯ä»¥è®©ä¿®æ”¹ç”Ÿæ•ˆ" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7312,7 +7231,7 @@ msgstr "动作" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "隔离区" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7422,10 +7341,6 @@ msgstr "选择一个节点" msgid "Bit %d, val %d." msgstr "(Bit)ä½ %d, val %d." -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "属性:" - #: editor/property_selector.cpp msgid "Select Property" msgstr "选择属性" @@ -7447,97 +7362,92 @@ msgid "Can't load back converted image using PVRTC tool:" msgstr "æ— æ³•åŠ è½½ä½¿ç”¨PVRTC工具转æ¢çš„图片:" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "é‡å‘½å" +msgstr "批é‡é‡å‘½å" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "å‰ç¼€" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "åŽç¼€" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "å¸é™„选项" +msgstr "高级选项" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "替æ¢" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "节点åç§°:" +msgstr "节点åç§°" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "父节点的å称,如果有的è¯" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "查找节点类型" +msgstr "节点类型" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "当å‰åœºæ™¯" +msgstr "当å‰åœºæ™¯åç§°" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "节点åç§°:" +msgstr "æ ¹èŠ‚ç‚¹åç§°" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"é¡ºåºæ•´æ•°è®¡æ•°å™¨ã€‚\n" +"比较计数器的选项。" #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "æ¯ä¸ªçº§åˆ«è®¡æ•°å™¨" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "如果设置了计数器,则é‡å¯æ¯ç»„å节点" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "计数器åˆå§‹å€¼" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "æ¥é•¿ï¼ˆç§’):" +msgstr "æ¥é•¿" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" -msgstr "" +msgid "Amount by which counter is incremented for each node" +msgstr "由计数器增é‡å¾—到的æ¯ä¸ªèŠ‚ç‚¹çš„æ€»é‡" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "内边è·" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"计数器数å—的最少个数。\n" +"丢失的数å—用0填充在头部。" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "更改表达å¼" +msgstr "æ£åˆ™è¡¨è¾¾å¼" #: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "åŽå¤„ç†è„šæœ¬:" +msgstr "åŽæœŸå¤„ç†" #: editor/rename_dialog.cpp msgid "Keep" @@ -7545,32 +7455,29 @@ msgstr "ä¿æŒä¸å˜" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "驼峰å¼è½¬ä¸ºä¸‹æ¨ªçº¿æ–¹å¼" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "下横线方å¼è½¬ä¸ºé©¼å³°å¼" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "大å°å†™" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "å°å†™" +msgstr "转为å°å†™" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "大写" +msgstr "转为大写" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "é‡ç½®ç¼©æ”¾" +msgstr "é‡ç½®" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "错误" @@ -7629,6 +7536,10 @@ msgid "Instance Scene(s)" msgstr "实例化场景" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "实例化å场景" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "清除脚本" @@ -7665,6 +7576,12 @@ msgid "Save New Scene As..." msgstr "将新场景å¦å˜ä¸º..." #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "ç¦ç”¨â€œå¯ç¼–辑实例â€å°†å¯¼è‡´èŠ‚ç‚¹çš„æ‰€æœ‰å±žæ€§æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "å…许编辑åå™èŠ‚ç‚¹" @@ -7677,29 +7594,24 @@ msgid "Make Local" msgstr "使用本地" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "新节点" +msgstr "åˆ›å»ºæ ¹èŠ‚ç‚¹ï¼š" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "场景" +msgstr "2D 场景" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "场景" +msgstr "3D 场景" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "清除继承" +msgstr "用户界é¢" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "剪切节点" +msgstr "自定义节点" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7740,6 +7652,10 @@ msgid "Clear Inheritance" msgstr "清除继承" #: editor/scene_tree_dock.cpp +msgid "Open documentation" +msgstr "打开Godot文档" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "åˆ é™¤èŠ‚ç‚¹" @@ -7748,15 +7664,14 @@ msgid "Add Child Node" msgstr "æ·»åŠ å节点" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" -msgstr "实例化å场景" - -#: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "更改类型" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Extend Script" +msgstr "打开脚本" + +#: editor/scene_tree_dock.cpp msgid "Make Scene Root" msgstr "åˆ›å»ºåœºæ™¯æ ¹èŠ‚ç‚¹" @@ -7807,21 +7722,19 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "ç¡®å®šè¦æ¸…除继承å—ï¼Ÿï¼ˆæ— æ³•æ’¤é”€ï¼ï¼‰" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" -msgstr "åˆ‡æ¢ éšè—/å¯è§" +msgstr "切æ¢å¯è§æ€§" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "节点é…ç½®è¦å‘Š:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"节点具有信å·è¿žæŽ¥å’Œç»„\n" +"节点具有信å·è¿žæŽ¥å’Œåˆ†ç»„。\n" "å•å‡»ä»¥æ˜¾ç¤ºä¿¡å·æŽ¥å£ã€‚" #: editor/scene_tree_editor.cpp @@ -7841,27 +7754,24 @@ msgstr "" "å•击显示分组æ 。" #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "打开脚本" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" -"节点已é”定\n" -"点击å¯è§£é”" +"节点已é”定。\n" +"点击å¯è§£é”。" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" "åèŠ‚ç‚¹æ— æ³•é€‰æ‹©ã€‚\n" -"å•击使其å¯é€‰" +"å•击使其å¯é€‰ã€‚" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -7872,6 +7782,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"åŠ¨ç”»æ’æ”¾å™¨è¢«å›ºå®šã€‚\n" +"ç‚¹å‡»å–æ¶ˆå›ºå®šã€‚" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -7910,15 +7822,18 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "打开脚本编辑器" +msgstr "打开脚本/选择ä½ç½®" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "文件路径为空" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "文件å为空" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "必须是项目内的路径" @@ -8007,20 +7922,8 @@ msgid "Bytes:" msgstr "å—节:" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "è¦å‘Š" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "错误:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "æº:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" -msgstr "函数:" +msgid "Stack Trace" +msgstr "æ ˆè¿½è¸ª" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8051,18 +7954,6 @@ msgid "Stack Frames" msgstr "å †æ ˆå¸§ï¼ˆStack Frames)" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "å˜é‡" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "错误:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "è°ƒç”¨å †æ ˆ(若适用):" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "性能分æž" @@ -8104,7 +7995,7 @@ msgstr "æ ¼å¼" #: editor/script_editor_debugger.cpp msgid "Usage" -msgstr "用é‡" +msgstr "用法" #: editor/script_editor_debugger.cpp msgid "Misc" @@ -8151,9 +8042,8 @@ msgid "Change Camera Size" msgstr "ä¿®æ”¹æ‘„åƒæœºå°ºå¯¸" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "修改通知器级别" +msgstr "修改通知器 AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -8180,12 +8070,10 @@ msgid "Change Capsule Shape Height" msgstr "修改胶囊体高度" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" msgstr "修改胶囊体åŠå¾„" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" msgstr "修改胶囊体高度" @@ -8194,24 +8082,20 @@ msgid "Change Ray Shape Length" msgstr "修改射线形状长度" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "设置光照åŠå¾„" +msgstr "改å˜åœ†æŸ±ä½“åŠå¾„" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" msgstr "修改胶囊体高度" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "更改çƒä½“åŠå¾„" +msgstr "更改圆环内åŠå¾„" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "设置光照åŠå¾„" +msgstr "更改圆环外åŠå¾„" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8330,9 +8214,8 @@ msgid "GridMap Delete Selection" msgstr "åˆ é™¤é€‰æ‹©çš„GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "åˆ é™¤é€‰æ‹©çš„GridMap" +msgstr "å¡«å……é€‰æ‹©ç½‘æ ¼åœ°å›¾" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8415,9 +8298,8 @@ msgid "Clear Selection" msgstr "清空选ä¸" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "所有选ä¸é¡¹" +msgstr "填充已选" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8488,12 +8370,8 @@ msgid "End of inner exception stack trace" msgstr "å†…éƒ¨å¼‚å¸¸å †æ ˆè¿½æœ”ç»“æŸ" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "烘焙ï¼" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." -msgstr "çƒ˜ç„™å¯¼èˆªç½‘æ ¼(mesh)。" +msgid "Bake NavMesh" +msgstr "烘焙导航网" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8711,14 +8589,12 @@ msgid "Connect Nodes" msgstr "连接节点" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "连接节点" +msgstr "连接节点数æ®" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "连接节点" +msgstr "连接节点åºåˆ—" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -8765,6 +8641,10 @@ msgid "Base Type:" msgstr "基础类型:" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "æˆå‘˜ï¼š" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "有效节点:" @@ -8801,9 +8681,8 @@ msgid "Paste Nodes" msgstr "粘贴节点" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "æˆå‘˜" +msgstr "编辑æˆå‘˜" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8860,17 +8739,16 @@ msgid "" msgstr "_step()çš„è¿”å›žå€¼æ— æ•ˆï¼Œå¿…é¡»æ˜¯æ•´å½¢ï¼ˆseq out)或å—符串(error)。" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "åˆ é™¤ VisualScript 节点" +msgstr "æœç´¢å¯è§†åŒ–脚本节点" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" -msgstr "获å–" +msgid "Get %s" +msgstr "得到 %s" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " -msgstr "" +msgid "Set %s" +msgstr "设值 %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8921,14 +8799,14 @@ msgstr "" "节点能æ£å¸¸å·¥ä½œï¼Œå…¶ä½™çš„将被忽略。" #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"该节点没有æè¿°å…¶å½¢çŠ¶çš„åèŠ‚ç‚¹ï¼Œå› æ¤å®ƒå°†æ— 法进行碰撞交互。\n" -"è¯·æ·»åŠ CollisionShape2D或CollisionPolygon2D类型的å节点æ¥å®šä¹‰å®ƒçš„形状。" +"该节点没有æè¿°å…¶å½¢çŠ¶çš„åèŠ‚ç‚¹ï¼Œå› æ¤å®ƒæ— 法与其它物体产生碰撞或者进行交互。\n" +"è¯·æ·»åŠ ä¸€ä¸ª CollisionShape2D 或 CollisionPolygon2D 类型的å节点æ¥å®šä¹‰å®ƒçš„å½¢" +"状。" #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8958,6 +8836,12 @@ msgid "" "shape resource for it!" msgstr "形状资æºå¿…须是通过CollisionShape2D节点的shape属性创建的ï¼" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "CPUParticles2D动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å动画â€çš„CanvasItemMaterial。" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9000,6 +8884,12 @@ msgid "" "imprinted." msgstr "ç²’åæè´¨æ²¡æœ‰æŒ‡å®šï¼Œè¯¥è¡Œä¸ºæ— 效。" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "Particles2D 动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å动画â€çš„CanvasItemMaterial。" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "PathFollow2Dç±»åž‹çš„èŠ‚ç‚¹åªæœ‰ä½œä¸ºPath2Dçš„å节点节æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" @@ -9020,16 +8910,17 @@ msgstr "Path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Node2D节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "该 Bone2D 链æ¡åº”该以一个 Skeleton2D 节点结æŸã€‚" #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Bone2D 节点仅适用于一个 Skeleton2D 节点或者å¦ä¸€ä¸ªä½œä¸ºçˆ¶èŠ‚ç‚¹çš„ Bone2D 节点。" #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." -msgstr "" +msgstr "该骨骼没有一个åˆé€‚çš„ REST 姿势。请到 Skeleton2D 节点ä¸è®¾ç½®ä¸€ä¸ªã€‚" #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9090,14 +8981,13 @@ msgid "Lighting Meshes: " msgstr "æ£åœ¨å¯¹ç½‘æ ¼è¿›è¡Œç…§æ˜Ž " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"该节点没有æè¿°å…¶å½¢çŠ¶çš„åèŠ‚ç‚¹ï¼Œå› æ¤å®ƒå°†æ— 法进行碰撞交互。\n" -"è¯·æ·»åŠ CollisionShape或CollisionPolygon类型的å节点æ¥å®šä¹‰å®ƒçš„形状。" +"该节点没有æè¿°å…¶å½¢çŠ¶çš„åèŠ‚ç‚¹ï¼Œå› æ¤å®ƒæ— 法与其它物体产生碰撞或者进行交互。\n" +"è¯·æ·»åŠ ä¸€ä¸ª CollisionShape 或 CollisionPolygon 类型的å节点æ¥å®šä¹‰å®ƒçš„形状。" #: scene/3d/collision_polygon.cpp msgid "" @@ -9129,6 +9019,17 @@ msgstr "" "CollisionShape节点必须拥有一个形状æ‰èƒ½è¿›è¡Œç¢°æ’žæ£€æµ‹å·¥ä½œï¼Œè¯·ä¸ºå®ƒåˆ›å»ºä¸€ä¸ªå½¢çŠ¶èµ„" "æºï¼" +#: scene/3d/cpu_particles.cpp +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "æ— ç‰©å¯è§ï¼Œå› 为没有未被分é…çš„ç½‘æ ¼(mesh)。" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "CPUParticles动画需è¦ä½¿ç”¨å¯åŠ¨äº†â€œBillboard Particlesâ€çš„SpatialMaterial。" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "æ£åœ¨ç»˜åˆ¶ç½‘æ ¼" @@ -9149,6 +9050,25 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "ç²’åä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼(meshe)指定到绘制通é“(draw passes)。" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "ç²’å动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œBillboard Particlesâ€çš„SpatialMaterial。" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "PathFollowç±»åž‹çš„èŠ‚ç‚¹åªæœ‰ä½œä¸ºPath类型节点的å节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" +"OrientedPathFollow ç±»åž‹çš„èŠ‚ç‚¹åªæœ‰ä½œä¸ºPath类型节点的å节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "OrientedPathFollow 需è¦å†å…¶çˆ¶è·¯å¾„ä¸å¯ç”¨up vectors。" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9182,18 +9102,16 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "这个物体将被忽略,除éžè®¾ç½®ä¸€ä¸ªç½‘æ ¼" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"对RigidBody(在character或rigid模å¼ä¸‹ï¼‰çš„尺寸修改,在è¿è¡Œæ—¶ä¼šè¢«ç‰©ç†å¼•擎的覆" -"盖。\n" -"建议您修改å节点的碰撞形状。" +"对 SoftBody 尺寸的修改,将会在è¿è¡Œæ—¶è¢«ç‰©ç†å¼•擎所覆盖。\n" +"建议修改å节点的碰撞体形状尺寸。" #: scene/3d/sprite_3d.cpp msgid "" @@ -9213,44 +9131,39 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "在 BlendTree 节点 '%s' 上没有å‘现动画: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "动画工具" +msgstr "没有动画: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "在节点 '%s' ä¸Šçš„åŠ¨ç”»æ— æ•ˆï¼š '%s' 。" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "错误:动画åä¸åˆæ³•ï¼" +msgstr "æ— æ•ˆåŠ¨ç”»ï¼š '%s' 。" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "å–æ¶ˆ'%s'的连接'%s'" +msgstr "没有任何物体连接到节点 '%s' 的输入 '%s' 。" #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "å›¾è¡¨æ²¡æœ‰è®¾ç½®åŠ¨ç”»èŠ‚ç‚¹ä½œä¸ºæ ¹èŠ‚ç‚¹ã€‚" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "åœ¨åœºæ™¯æ ‘ä¸é€‰æ‹©ä¸€ä¸ªAnimationPlayeræ¥ç¼–辑动画。" +msgstr "包å«åŠ¨ç”»çš„ AnimationPlayer 节点没有设置路径。" #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." -msgstr "" +msgstr "åŠ¨ç”»æ’æ”¾å™¨çš„è·¯å¾„æ²¡æœ‰åŠ è½½ä¸€ä¸ª AnimationPlayer 节点。" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "åŠ¨ç”»æ ‘ä¸å¯ç”¨ã€‚" +msgstr "AnimationPlayer çš„æ ¹èŠ‚ç‚¹ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„节点。" #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9268,10 +9181,6 @@ msgstr "æç¤ºï¼" msgid "Please Confirm..." msgstr "请确认..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "选择当å‰ç›®å½•" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9281,6 +9190,10 @@ msgstr "" "Popupå¯¹è±¡é»˜è®¤ä¿æŒéšè—,除éžä½ 调用popup()或其他popup相关方法。编辑时å¯ä»¥è®©å®ƒä»¬" "ä¿æŒå¯è§ï¼Œä½†å®ƒåœ¨è¿è¡Œæ—¶ä»¬ä¼šè‡ªåЍéšè—。" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "如果exp_edit为true, 则min_value必须为>0。" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9328,31 +9241,141 @@ msgid "Invalid font size." msgstr "å—体大å°éžæ³•。" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" +msgstr "输入" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" msgstr "æ— " #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "输入æºéžæ³•ï¼" +msgstr "éžæ³•çš„ç€è‰²å™¨æºã€‚" #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "对函数的赋值。" #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "对uniform的赋值。" #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "å˜é‡åªèƒ½åœ¨é¡¶ç‚¹å‡½æ•°ä¸æŒ‡å®šã€‚" + +#~ msgid "Zoom:" +#~ msgstr "缩放:" + +#~ msgid "Are you sure you want to remove all connections from the \"" +#~ msgstr "您确定è¦ç§»é™¤æ‰€æœ‰å¹¿æ’连接从 \"" + +#~ msgid "Class List:" +#~ msgstr "类型列表:" + +#~ msgid "Search Classes" +#~ msgstr "æœç´¢ç±»åž‹" + +#~ msgid "Public Methods" +#~ msgstr "公共方法" + +#~ msgid "Public Methods:" +#~ msgstr "公共方法:" + +#~ msgid "GUI Theme Items" +#~ msgstr "GUI主题项目" + +#~ msgid "GUI Theme Items:" +#~ msgstr "GUI主题:" + +#~ msgid "Property: " +#~ msgstr "属性: " + +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "开关文件夹的收è—状æ€ã€‚" + +#~ msgid "Show current scene file." +#~ msgstr "显示当å‰åœºæ™¯æ–‡ä»¶ã€‚" + +#~ msgid "Enter tree-view." +#~ msgstr "è¿›å…¥æ ‘å½¢æŸ¥çœ‹å™¨ã€‚" + +#~ msgid "Whole words" +#~ msgstr "å…¨å—匹é…" + +#~ msgid "Match case" +#~ msgstr "匹é…大å°å†™" + +#~ msgid "Filter: " +#~ msgstr "过滤: " + +#~ msgid "Ok" +#~ msgstr "好的" + +#~ msgid "Show In File System" +#~ msgstr "在资æºç®¡ç†å™¨ä¸æ˜¾ç¤º" + +#~ msgid "Search the class hierarchy." +#~ msgstr "æœç´¢ç±»ã€‚" + +#~ msgid "Search in files" +#~ msgstr "åœ¨æ–‡ä»¶ä¸æœç´¢" + +#~ msgid "" +#~ "Built-in scripts can only be edited when the scene they belong to is " +#~ "loaded" +#~ msgstr "å†…å»ºè„šæœ¬åªæœ‰åœ¨å…¶æ‰€å±žåœºæ™¯åŠ è½½å®ŒåŽæ‰å¯ä»¥ç¼–辑" + +#~ msgid "Convert To Uppercase" +#~ msgstr "转æ¢ä¸ºå¤§å†™" + +#~ msgid "Convert To Lowercase" +#~ msgstr "转æ¢ä¸ºå°å†™" + +#~ msgid "Snap To Floor" +#~ msgstr "å¸é™„到地é¢" + +#~ msgid "Rotate 0 degrees" +#~ msgstr "旋转0度" + +#~ msgid "Rotate 90 degrees" +#~ msgstr "旋转90度" + +#~ msgid "Rotate 180 degrees" +#~ msgstr "旋转180度" + +#~ msgid "Rotate 270 degrees" +#~ msgstr "旋转270度" + +#~ msgid "Warning" +#~ msgstr "è¦å‘Š" + +#~ msgid "Error:" +#~ msgstr "错误:" + +#~ msgid "Source:" +#~ msgstr "æº:" + +#~ msgid "Function:" +#~ msgstr "函数:" + +#~ msgid "Variable" +#~ msgstr "å˜é‡" + +#~ msgid "Errors:" +#~ msgstr "错误:" + +#~ msgid "Stack Trace (if applicable):" +#~ msgstr "è°ƒç”¨å †æ ˆ(若适用):" + +#~ msgid "Bake!" +#~ msgstr "烘焙ï¼" + +#~ msgid "Bake the navigation mesh." +#~ msgstr "çƒ˜ç„™å¯¼èˆªç½‘æ ¼(mesh)。" + +#~ msgid "Get" +#~ msgstr "获å–" #~ msgid "Change Scalar Constant" #~ msgstr "修改Scalar常é‡ç³»æ•°" @@ -9856,9 +9879,6 @@ msgstr "" #~ msgid "Could not save atlas subtexture:" #~ msgstr "æ— æ³•ä¿å˜ç²¾çµé›†å贴图:" -#~ msgid "Exporting for %s" -#~ msgstr "æ£åœ¨å¯¼å‡º %s" - #~ msgid "Setting Up..." #~ msgstr "é…ç½®..." @@ -9963,9 +9983,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "æºå—体文件:" -#~ msgid "Source Font Size:" -#~ msgstr "æºå—体大å°:" - #~ msgid "Dest Resource:" #~ msgstr "ç›®æ ‡èµ„æº:" @@ -10042,9 +10059,6 @@ msgstr "" #~ msgid "Start(s)" #~ msgstr "起点" -#~ msgid "Filters" -#~ msgstr "ç›é€‰" - #~ msgid "Source path is empty." #~ msgstr "æºè·¯å¾„为空。" @@ -10315,15 +10329,9 @@ msgstr "" #~ msgid "Stereo" #~ msgstr "立体声" -#~ msgid "Pitch" -#~ msgstr "音调" - #~ msgid "Window" #~ msgstr "窗å£" -#~ msgid "Move Right" -#~ msgstr "å‘å³ç§»åЍ" - #~ msgid "Scaling to %s%%." #~ msgstr "缩放到%s%%。" @@ -10400,9 +10408,6 @@ msgstr "" #~ msgid "just pressed" #~ msgstr "æ£å¥½æŒ‰ä¸‹" -#~ msgid "just released" -#~ msgstr "刚好释放" - #~ msgid "" #~ "Couldn't read the certificate file. Are the path and password both " #~ "correct?" @@ -10727,9 +10732,6 @@ msgstr "" #~ msgid "Project Export" #~ msgstr "项目导出" -#~ msgid "Export Preset:" -#~ msgstr "导出预设:" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance未包å«BakedLight资æºã€‚" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 9897e6f5a5..f70a7a2b2f 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -25,7 +25,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" @@ -408,8 +408,7 @@ msgstr "縮放selection" msgid "Scale From Cursor" msgstr "ç”±é¼ æ¨™ç¸®æ”¾" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Duplicate Selection" msgstr "複製 Selection" @@ -426,12 +425,12 @@ msgstr "刪除é¸ä¸æª”案" #: editor/animation_track_editor.cpp #, fuzzy -msgid "Goto Next Step" +msgid "Go to Next Step" msgstr "跳到下一æ¥" #: editor/animation_track_editor.cpp #, fuzzy -msgid "Goto Prev Step" +msgid "Go to Previous Step" msgstr "跳到上一æ¥" #: editor/animation_track_editor.cpp @@ -543,11 +542,11 @@ msgstr "沒有相åŒ" msgid "Replaced %d occurrence(s)." msgstr "å–代了 %d 個。" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "符åˆå¤§å°å¯«" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "完整詞語" @@ -581,11 +580,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "放大" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp #, fuzzy msgid "Line:" msgstr "行:" @@ -617,6 +615,7 @@ msgstr "æ·»åŠ " #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -698,7 +697,7 @@ msgid "Edit Connection: " msgstr "編輯連接" #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -756,17 +755,14 @@ msgstr "最近:" msgid "Search:" msgstr "æœå°‹ï¼š" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "å»åˆï¼š" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "æè¿°ï¼š" @@ -823,9 +819,10 @@ msgid "Search Replacement Resource:" msgstr "" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -857,7 +854,7 @@ msgid "Error loading:" msgstr "載入錯誤:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +msgid "Load failed due to missing dependencies:" msgstr "" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -918,14 +915,6 @@ msgstr "動畫變化數值" msgid "Thanks from the Godot community!" msgstr "Godot社å€çš„æ„Ÿè¬ï¼" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "OK" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine è²¢ç»è€…" @@ -1112,8 +1101,7 @@ msgid "Bus options" msgstr "é¸é …" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "複製" @@ -1300,8 +1288,9 @@ msgstr "路徑:" msgid "Node Name:" msgstr "" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "å稱" @@ -1373,13 +1362,18 @@ msgid "Template file not found:" msgstr "未找到佈局å稱ï¼" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +#, fuzzy +msgid "Select Current Folder" +msgstr "新增資料夾" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "檔案已å˜åœ¨, è¦è¦†è“‹å—Ž?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy -msgid "Select Current Folder" -msgstr "新增資料夾" +msgid "Select This Folder" +msgstr "鏿“‡æ¨¡å¼" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1387,13 +1381,14 @@ msgstr "複製路徑" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "開啟 Project Manager?" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" -msgstr "" +#, fuzzy +msgid "Show in File Manager" +msgstr "開啟 Project Manager?" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy @@ -1429,7 +1424,8 @@ msgid "Open a File or Directory" msgstr "鏿“‡è³‡æ–™å¤¾/檔案" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "儲å˜" @@ -1490,8 +1486,7 @@ msgstr "資料夾和檔案:" msgid "Preview:" msgstr "é 覽:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "檔案:" @@ -1508,26 +1503,12 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "å°Žå…¥ä¸:" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search Help" -msgstr "在幫助檔æœå°‹" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Top" msgstr "æœ€é ‚" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "" @@ -1545,29 +1526,32 @@ msgid "Brief Description:" msgstr "簡述:" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Public Methods" +msgid "Methods" msgstr "鏿“‡æ¨¡å¼" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "" +#, fuzzy +msgid "Methods:" +msgstr "鏿“‡æ¨¡å¼" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "" +#, fuzzy +msgid "Theme Properties" +msgstr "篩é¸:" #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "" +#, fuzzy +msgid "Theme Properties:" +msgstr "篩é¸:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1598,7 +1582,12 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Description" +msgid "Class Description" +msgstr "æè¿°ï¼š" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" msgstr "æè¿°ï¼š" #: editor/editor_help.cpp @@ -1614,12 +1603,14 @@ msgid "" msgstr "" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "簡述:" #: editor/editor_help.cpp -msgid "Property Description:" -msgstr "" +#, fuzzy +msgid "Property Descriptions:" +msgstr "簡述:" #: editor/editor_help.cpp msgid "" @@ -1629,12 +1620,13 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Methods" -msgstr "鏿“‡æ¨¡å¼" +msgid "Method Descriptions" +msgstr "æè¿°ï¼š" #: editor/editor_help.cpp -msgid "Method Description:" -msgstr "" +#, fuzzy +msgid "Method Descriptions:" +msgstr "æè¿°ï¼š" #: editor/editor_help.cpp msgid "" @@ -1642,12 +1634,59 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -#: editor/editor_inspector.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy +msgid "Search Help" +msgstr "在幫助檔æœå°‹" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "全部å–代" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp #, fuzzy -msgid "Property: " +msgid "Methods Only" msgstr "鏿“‡æ¨¡å¼" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "訊號" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "常數" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Properties Only" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Theme Properties Only" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1683,6 +1722,11 @@ msgstr "" msgid "Error saving resource!" msgstr "儲å˜è³‡æºæ™‚出ç¾éŒ¯èª¤ï¼" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "把資æºå¦å˜ç‚º..." @@ -1743,10 +1787,20 @@ msgstr "ä¸èƒ½åŸ·è¡Œé€™å€‹å‹•ä½œï¼Œå› ç‚ºæ²’æœ‰tree root." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Can't load MeshLibrary for merging!" @@ -1992,6 +2046,12 @@ msgstr "載入å—形出ç¾éŒ¯èª¤" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -2033,6 +2093,12 @@ msgstr "刪除佈局" msgid "Default" msgstr "é è¨" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "檔案系統" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2124,7 +2190,8 @@ msgid "Save Scene" msgstr "儲å˜å ´æ™¯" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "å„²å˜æ‰€æœ‰å ´æ™¯" #: editor/editor_node.cpp @@ -2153,7 +2220,7 @@ msgid "Undo" msgstr "復原" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "é‡è£½" @@ -2191,6 +2258,7 @@ msgid "Quit to Project List" msgstr "回到專案列表" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2302,10 +2370,6 @@ msgstr "管ç†è¼¸å‡ºç¯„本" msgid "Help" msgstr "幫助" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2402,24 +2466,24 @@ msgstr "當改變時更新" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "監視器" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "å°Žå…¥" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "FileSystem" msgstr "檔案系統" #: editor/editor_node.cpp +msgid "Inspector" +msgstr "監視器" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" @@ -2562,7 +2626,7 @@ msgstr "å¹€ %" msgid "Physics Frame %" msgstr "物ç†å¹€ %" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "時間:" @@ -2587,7 +2651,7 @@ msgstr "時間:" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2599,7 +2663,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2607,6 +2671,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2625,10 +2703,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2637,7 +2711,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "貼上" @@ -2941,6 +3016,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "最愛:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2978,7 +3058,7 @@ msgstr "載入錯誤:" msgid "Unable to update dependencies:" msgstr "" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -3019,31 +3099,23 @@ msgid "Duplicating folder:" msgstr "複製" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" +#, fuzzy +msgid "Open Scene(s)" +msgstr "é–‹å•“å ´æ™¯" #: editor/filesystem_dock.cpp -msgid "Collapse all" +msgid "Instance" msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "釿–°å‘½å..." - #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To..." -msgstr "æ¬åˆ°..." +msgid "Add to favorites" +msgstr "最愛:" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "é–‹å•“å ´æ™¯" - -#: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +msgid "Remove from favorites" +msgstr "åªé™é¸ä¸" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3053,6 +3125,11 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "釿–°å‘½å..." + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." @@ -3060,6 +3137,11 @@ msgstr "複製" #: editor/filesystem_dock.cpp #, fuzzy +msgid "Move To..." +msgstr "æ¬åˆ°..." + +#: editor/filesystem_dock.cpp +#, fuzzy msgid "New Script..." msgstr "下一個腳本" @@ -3068,6 +3150,15 @@ msgstr "下一個腳本" msgid "New Resource..." msgstr "把資æºå¦å˜ç‚º..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "關閉" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -3089,34 +3180,25 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "(ä¸ï¼‰é¡¯ç¤ºæœ€æ„›" +msgid "Toggle split mode" +msgstr "(ä¸ï¼‰é¡¯ç¤ºéš±è—的文件" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "新增資料夾" +msgid "Search files" +msgstr "在幫助檔æœå°‹" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "在幫助檔æœå°‹" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "移動" @@ -3134,31 +3216,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "多 %d 檔案" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "尋找" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "完整詞語" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "符åˆå¤§å°å¯«" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "新增資料夾" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "篩é¸:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3176,6 +3249,11 @@ msgstr "å–æ¶ˆ" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "尋找" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "å–代" @@ -3342,18 +3420,14 @@ msgstr "å°Žå…¥" msgid "Failed to load resource." msgstr "資æºåŠ è¼‰å¤±æ•—ã€‚" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "Ok" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "篩é¸:" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3606,6 +3680,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -3992,10 +4071,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4329,6 +4404,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4392,6 +4471,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4487,6 +4571,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "åªé™é¸ä¸" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4538,6 +4627,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4981,8 +5074,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5011,6 +5103,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "轉為..." + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -5080,13 +5178,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "轉為..." +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5423,22 +5520,22 @@ msgid "Paste Resource" msgstr "複製資æº" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5472,6 +5569,11 @@ msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "無法新增資料夾" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "無法新增資料夾" @@ -5576,12 +5678,8 @@ msgstr "複製路徑" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Show In File System" -msgstr "檔案系統" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +msgid "History Previous" +msgstr "上一個tab" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5654,7 +5752,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "è¦é›¢é–‹ç·¨è¼¯å™¨å—Ž?" #: editor/plugins/script_editor_plugin.cpp @@ -5662,10 +5760,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5702,19 +5796,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "在幫助檔æœå°‹" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5725,6 +5809,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "行為" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5814,12 +5903,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "轉為..." #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "轉為..." #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5835,22 +5926,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Uppercase" -msgstr "轉為..." +msgid "Go to Next Breakpoint" +msgstr "跳到下一æ¥" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Lowercase" -msgstr "轉為..." +msgid "Go to Previous Breakpoint" +msgstr "跳到上一æ¥" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5858,16 +5941,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "ç¯©é¸æª”案..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "åªé™é¸ä¸" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "跳到行" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5961,6 +6046,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6133,6 +6226,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Rotation Locked" +msgstr "本地化" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6236,10 +6334,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Toggle Freelook" msgstr "全螢幕" @@ -6649,6 +6743,11 @@ msgid "Fix Invalid Tiles" msgstr "無效å稱" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "åªé™é¸ä¸" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6696,23 +6795,27 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "移除é¸é …" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear transform" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6744,7 +6847,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6760,7 +6863,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6842,6 +6945,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "匯出" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6850,6 +6962,11 @@ msgid "Add..." msgstr "æ·»åŠ ..." #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "匯出" + +#: editor/project_export.cpp msgid "Resources" msgstr "資æº" @@ -6911,6 +7028,16 @@ msgid "Export PCK/Zip" msgstr "匯出" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "匯出" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "匯出" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7379,10 +7506,6 @@ msgstr "" msgid "General" msgstr "" -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" - #: editor/project_settings_editor.cpp msgid "Override For..." msgstr "" @@ -7518,10 +7641,6 @@ msgstr "貼上" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp #, fuzzy msgid "Select Property" @@ -7612,7 +7731,7 @@ msgid "Step" msgstr "" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7621,7 +7740,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7664,7 +7783,7 @@ msgstr "轉為..." msgid "Reset" msgstr "é‡è¨ç¸®æ”¾æ¯”例" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7723,6 +7842,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Clear Script" msgstr "下一個腳本" @@ -7760,6 +7883,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7836,6 +7965,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "開啓最近的" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7844,12 +7978,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "下一個腳本" #: editor/scene_tree_dock.cpp #, fuzzy @@ -8006,6 +8141,11 @@ msgid "Path is empty" msgstr "路徑為空" #: editor/script_create_dialog.cpp +#, fuzzy +msgid "Filename is empty" +msgstr "路徑為空" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -8103,19 +8243,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "錯誤:" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "來æº:" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -8148,18 +8276,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "錯誤:" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8596,11 +8712,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8885,6 +8997,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8986,11 +9102,11 @@ msgid "Search VisualScript" msgstr "貼上" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -9075,6 +9191,12 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -9113,6 +9235,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9230,6 +9358,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9249,6 +9387,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9281,7 +9437,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9354,11 +9510,6 @@ msgstr "è¦å‘Š!" msgid "Please Confirm..." msgstr "請確èª..." -#: scene/gui/file_dialog.cpp -#, fuzzy -msgid "Select this Folder" -msgstr "鏿“‡æ¨¡å¼" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9366,6 +9517,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9432,6 +9587,54 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "放大" + +#, fuzzy +#~ msgid "Public Methods" +#~ msgstr "鏿“‡æ¨¡å¼" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "(ä¸ï¼‰é¡¯ç¤ºæœ€æ„›" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "新增資料夾" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "完整詞語" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "符åˆå¤§å°å¯«" + +#~ msgid "Ok" +#~ msgstr "Ok" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" + +#, fuzzy +#~ msgid "Convert To Uppercase" +#~ msgstr "轉為..." + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "轉為..." + +#~ msgid "Error:" +#~ msgstr "錯誤:" + +#~ msgid "Source:" +#~ msgstr "來æº:" + +#~ msgid "Errors:" +#~ msgstr "錯誤:" + #~ msgid "Disabled" #~ msgstr "å·²åœç”¨" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 5ce0ea7f67..d902a58b73 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -11,18 +11,19 @@ # popcade <popcade@gmail.com>, 2016. # Qing <icinriiq@gmail.com>, 2018. # Sam Pan <sampan66@gmail.com>, 2016. +# ken l <macauhome@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-07-15 16:35+0000\n" -"Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n" +"PO-Revision-Date: 2018-11-10 20:07+0000\n" +"Last-Translator: ken l <macauhome@gmail.com>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" "Language: zh_TW\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.1-dev\n" +"X-Generator: Weblate 3.3-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -30,7 +31,7 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#: modules/mono/glue/glue_header.h +#: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "解碼å—節ä½å…ƒä¸è¶³ï¼Œæˆ–ç‚ºç„¡æ•ˆæ ¼å¼ã€‚" @@ -399,8 +400,7 @@ msgstr "縮放所é¸" msgid "Scale From Cursor" msgstr "由游標ä½ç½®ç¸®æ”¾" -#: editor/animation_track_editor.cpp editor/plugins/tile_map_editor_plugin.cpp -#: modules/gridmap/grid_map_editor_plugin.cpp +#: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" msgstr "複製所é¸" @@ -414,11 +414,13 @@ msgid "Delete Selection" msgstr "複製所é¸" #: editor/animation_track_editor.cpp -msgid "Goto Next Step" +#, fuzzy +msgid "Go to Next Step" msgstr "往下一æ¥" #: editor/animation_track_editor.cpp -msgid "Goto Prev Step" +#, fuzzy +msgid "Go to Previous Step" msgstr "往上一æ¥" #: editor/animation_track_editor.cpp @@ -522,11 +524,11 @@ msgstr "ç„¡ç¬¦åˆæ¢ä»¶" msgid "Replaced %d occurrence(s)." msgstr "å–代了 %d 個" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" msgstr "符åˆå¤§å°å¯«" -#: editor/code_editor.cpp +#: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" msgstr "整個å—" @@ -559,11 +561,10 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "放大" +msgid "Font Size:" +msgstr "" -#: editor/code_editor.cpp editor/script_editor_debugger.cpp +#: editor/code_editor.cpp msgid "Line:" msgstr "行:" @@ -594,6 +595,7 @@ msgstr "新增" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" @@ -675,7 +677,7 @@ msgid "Edit Connection: " msgstr "連接..." #: editor/connections_dialog.cpp -msgid "Are you sure you want to remove all connections from the \"" +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp @@ -729,17 +731,14 @@ msgstr "最近å˜å–:" msgid "Search:" msgstr "æœå°‹:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp +#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" msgstr "ç¬¦åˆæ¢ä»¶:" -#: editor/create_dialog.cpp editor/editor_help.cpp -#: editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp -#: editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" msgstr "æè¿°:" @@ -800,9 +799,10 @@ msgid "Search Replacement Resource:" msgstr "æœå°‹æ›¿ä»£è³‡æºï¼š" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp -#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp -#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp -#: editor/quick_open.cpp editor/script_create_dialog.cpp +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#: editor/property_selector.cpp editor/quick_open.cpp +#: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" @@ -834,7 +834,8 @@ msgid "Error loading:" msgstr "載入時發生錯誤:" #: editor/dependency_editor.cpp -msgid "Scene failed to load due to missing dependencies:" +#, fuzzy +msgid "Load failed due to missing dependencies:" msgstr "å ´æ™¯ç¼ºå°‘äº†æŸäº›è³‡æºä»¥è‡³æ–¼ç„¡æ³•載入" #: editor/dependency_editor.cpp editor/editor_node.cpp @@ -896,14 +897,6 @@ msgstr "改變å—å…¸ value" msgid "Thanks from the Godot community!" msgstr "Godot 社群感è¬ä½ !" -#: editor/editor_about.cpp editor/editor_node.cpp editor/inspector_dock.cpp -#: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#: editor/script_create_dialog.cpp scene/gui/dialogs.cpp -msgid "OK" -msgstr "" - #: editor/editor_about.cpp msgid "Godot Engine contributors" msgstr "Godot Engine è²¢ç»è€…" @@ -1086,8 +1079,7 @@ msgid "Bus options" msgstr "Bus é¸é …" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/plugins/animation_player_editor_plugin.cpp -#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "製作複本" @@ -1260,8 +1252,9 @@ msgstr "路徑:" msgid "Node Name:" msgstr "節點å稱:" -#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp -#: editor/project_manager.cpp editor/settings_config_dialog.cpp +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_profiler.cpp editor/project_manager.cpp +#: editor/settings_config_dialog.cpp msgid "Name" msgstr "å稱" @@ -1333,12 +1326,17 @@ msgid "Template file not found:" msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "鏿“‡ç›®å‰çš„資料夾" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "檔案已經å˜åœ¨, è¦è¦†å¯«å—Ž?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -msgid "Select Current Folder" -msgstr "鏿“‡ç›®å‰çš„資料夾" +#, fuzzy +msgid "Select This Folder" +msgstr "鏿“‡æ¤è³‡æ–™å¤¾" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1346,12 +1344,13 @@ msgstr "複製路徑" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "Open In File Manager" +msgid "Open in File Manager" msgstr "在檔案管ç†å“¡å…§é¡¯ç¤º" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -msgid "Show In File Manager" +#, fuzzy +msgid "Show in File Manager" msgstr "在檔案管ç†å“¡å…§é¡¯ç¤º" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp @@ -1387,7 +1386,8 @@ msgid "Open a File or Directory" msgstr "開啟檔案或資料夾" #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/editor_properties.cpp editor/inspector_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" msgstr "儲å˜" @@ -1447,8 +1447,7 @@ msgstr "資料夾 & 檔案:" msgid "Preview:" msgstr "é 覽:" -#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp -#: scene/gui/file_dialog.cpp +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" msgstr "檔案:" @@ -1465,25 +1464,12 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(釿–°)è¼‰å…¥ç´ æ" -#: editor/editor_help.cpp editor/editor_node.cpp -#: editor/plugins/script_editor_plugin.cpp -msgid "Search Help" -msgstr "æœå°‹å¹«åŠ©" - -#: editor/editor_help.cpp -msgid "Class List:" -msgstr "Class 列表:" - -#: editor/editor_help.cpp -msgid "Search Classes" -msgstr "æœå°‹ Class" - #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Top" msgstr "上é¢" -#: editor/editor_help.cpp editor/property_editor.cpp +#: editor/editor_help.cpp msgid "Class:" msgstr "Class:" @@ -1500,28 +1486,31 @@ msgid "Brief Description:" msgstr "" #: editor/editor_help.cpp -msgid "Members" +msgid "Properties" msgstr "" -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Members:" +#: editor/editor_help.cpp +msgid "Properties:" msgstr "" #: editor/editor_help.cpp -msgid "Public Methods" -msgstr "" +msgid "Methods" +msgstr "方法" #: editor/editor_help.cpp -msgid "Public Methods:" -msgstr "公開 method:" +#, fuzzy +msgid "Methods:" +msgstr "方法" #: editor/editor_help.cpp -msgid "GUI Theme Items" -msgstr "介é¢ä¸»é¡Œé …ç›®" +#, fuzzy +msgid "Theme Properties" +msgstr "éŽæ¿¾æª”案..." #: editor/editor_help.cpp -msgid "GUI Theme Items:" -msgstr "介é¢ä¸»é¡Œé …ç›®:" +#, fuzzy +msgid "Theme Properties:" +msgstr "éŽæ¿¾æª”案..." #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1548,7 +1537,13 @@ msgid "Constants:" msgstr "定數:" #: editor/editor_help.cpp -msgid "Description" +#, fuzzy +msgid "Class Description" +msgstr "æè¿°:" + +#: editor/editor_help.cpp +#, fuzzy +msgid "Class Description:" msgstr "æè¿°:" #: editor/editor_help.cpp @@ -1565,12 +1560,13 @@ msgstr "" "color]或[color=$color][url=$url2]è¦æ±‚一個[/url][/color]。" #: editor/editor_help.cpp -msgid "Properties" -msgstr "" +#, fuzzy +msgid "Property Descriptions" +msgstr "Property 說明:" #: editor/editor_help.cpp #, fuzzy -msgid "Property Description:" +msgid "Property Descriptions:" msgstr "Property 說明:" #: editor/editor_help.cpp @@ -1582,11 +1578,13 @@ msgstr "" "color]一個!" #: editor/editor_help.cpp -msgid "Methods" -msgstr "方法" +#, fuzzy +msgid "Method Descriptions" +msgstr "Method 說明:" #: editor/editor_help.cpp -msgid "Method Description:" +#, fuzzy +msgid "Method Descriptions:" msgstr "Method 說明:" #: editor/editor_help.cpp @@ -1597,11 +1595,57 @@ msgstr "" "ç›®å‰æ²’有這個 method 的說明。請幫我們[color=$color][url=$url]è²¢ç»[/url][/" "color]一個!" -#: editor/editor_inspector.cpp -msgid "Property: " +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "æœå°‹å¹«åŠ©" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Display All" +msgstr "å–代全部" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Methods Only" +msgstr "方法" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Signals Only" +msgstr "信號" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Constants Only" +msgstr "定數" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "" + +#: editor/editor_help_search.cpp +#, fuzzy +msgid "Class" +msgstr "Class:" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" msgstr "" -#: editor/editor_inspector.cpp editor/property_editor.cpp +#: editor/editor_inspector.cpp msgid "Set" msgstr "" @@ -1636,6 +1680,11 @@ msgstr "專案輸出失敗,錯誤代碼是 %d。" msgid "Error saving resource!" msgstr "儲å˜è³‡æºéŒ¯èª¤!" +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." msgstr "å¦å˜è³‡æºç‚º..." @@ -1693,10 +1742,20 @@ msgstr "æ¤æ“作無法復原, 確定è¦é‚„原嗎?" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "" + #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" msgstr "" @@ -1926,6 +1985,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"Unable to load addon script from path: '%s' There seems to be an error in " +"the code, please check the syntax." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" @@ -1967,6 +2032,12 @@ msgstr "" msgid "Default" msgstr "é è¨" +#: editor/editor_node.cpp editor/editor_properties.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +#, fuzzy +msgid "Show in FileSystem" +msgstr "在檔案管ç†å“¡å…§é¡¯ç¤º" + #: editor/editor_node.cpp #, fuzzy msgid "Play This Scene" @@ -2055,7 +2126,8 @@ msgid "Save Scene" msgstr "儲å˜å ´æ™¯" #: editor/editor_node.cpp -msgid "Save all Scenes" +#, fuzzy +msgid "Save All Scenes" msgstr "儲å˜å…¨éƒ¨å ´æ™¯" #: editor/editor_node.cpp @@ -2084,7 +2156,7 @@ msgid "Undo" msgstr "復原" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "å–æ¶ˆã€Œå¾©åŽŸã€" @@ -2123,6 +2195,7 @@ msgid "Quit to Project List" msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp msgid "Debug" msgstr "" @@ -2230,10 +2303,6 @@ msgstr "" msgid "Help" msgstr "" -#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Classes" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -2256,11 +2325,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "社å€" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "關於" #: editor/editor_node.cpp msgid "Play the project." @@ -2328,25 +2397,25 @@ msgstr "" msgid "Disable Update Spinner" msgstr "" -#: editor/editor_node.cpp -msgid "Inspector" -msgstr "" - #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp msgid "Import" msgstr "" #: editor/editor_node.cpp -#, fuzzy -msgid "Node" -msgstr "節點" +msgid "FileSystem" +msgstr "" #: editor/editor_node.cpp -msgid "FileSystem" +msgid "Inspector" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Node" +msgstr "節點" + +#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" @@ -2481,7 +2550,7 @@ msgstr "" msgid "Physics Frame %" msgstr "" -#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +#: editor/editor_profiler.cpp msgid "Time:" msgstr "" @@ -2505,7 +2574,7 @@ msgstr "" msgid "Calls" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "On" msgstr "" @@ -2517,7 +2586,7 @@ msgstr "" msgid "Bit %d, value %d" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp +#: editor/editor_properties.cpp msgid "[Empty]" msgstr "" @@ -2525,6 +2594,20 @@ msgstr "" msgid "Assign.." msgstr "" +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" msgstr "" @@ -2542,10 +2625,6 @@ msgstr "" msgid "Make Unique" msgstr "" -#: editor/editor_properties.cpp editor/property_editor.cpp -msgid "Show in File System" -msgstr "" - #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -2554,7 +2633,8 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Paste" msgstr "" @@ -2849,6 +2929,11 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" #: editor/filesystem_dock.cpp +#, fuzzy +msgid "Favorites" +msgstr "我的最愛:" + +#: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" @@ -2887,7 +2972,7 @@ msgstr "載入時發生錯誤:" msgid "Unable to update dependencies:" msgstr "å ´æ™¯ç¼ºå°‘äº†æŸäº›è³‡æºä»¥è‡³æ–¼ç„¡æ³•載入" -#: editor/filesystem_dock.cpp +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided" msgstr "" @@ -2926,29 +3011,23 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -msgid "Expand all" -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Collapse all" -msgstr "" - -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" +#, fuzzy +msgid "Open Scene(s)" +msgstr "é–‹å•Ÿå ´æ™¯" #: editor/filesystem_dock.cpp -msgid "Move To..." +msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Open Scene(s)" -msgstr "é–‹å•Ÿå ´æ™¯" +msgid "Add to favorites" +msgstr "我的最愛:" #: editor/filesystem_dock.cpp -msgid "Instance" -msgstr "" +#, fuzzy +msgid "Remove from favorites" +msgstr "移除" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -2958,12 +3037,20 @@ msgstr "" msgid "View Owners..." msgstr "" +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + #: editor/filesystem_dock.cpp #, fuzzy msgid "Duplicate..." msgstr "複製動畫關éµç•«æ ¼" #: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "New Script..." msgstr "新增資料夾..." @@ -2973,6 +3060,15 @@ msgstr "新增資料夾..." msgid "New Resource..." msgstr "å¦å˜è³‡æºç‚º..." +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp +#, fuzzy +msgid "Collapse All" +msgstr "å–代全部" + #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp @@ -2994,34 +3090,25 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Toggle folder status as Favorite." -msgstr "åˆ‡æ›æœ€æ„›" +msgid "Toggle split mode" +msgstr "åˆ‡æ›æ¨¡å¼" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Show current scene file." -msgstr "新增資料夾" +msgid "Search files" +msgstr "æœå°‹ Class" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" #: editor/filesystem_dock.cpp -msgid "Enter tree-view." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Search files" -msgstr "æœå°‹ Class" - -#: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/tile_map_editor_plugin.cpp +#: editor/filesystem_dock.cpp msgid "Move" msgstr "" @@ -3039,31 +3126,22 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy -msgid "Find in files" +msgid "Find in Files" msgstr "還有 %d 個檔案" #: editor/find_in_files.cpp #, fuzzy -msgid "Find: " +msgid "Find:" msgstr "尋找" #: editor/find_in_files.cpp #, fuzzy -msgid "Whole words" -msgstr "整個å—" - -#: editor/find_in_files.cpp -#, fuzzy -msgid "Match case" -msgstr "符åˆå¤§å°å¯«" - -#: editor/find_in_files.cpp -msgid "Folder: " -msgstr "" +msgid "Folder:" +msgstr "新增資料夾" #: editor/find_in_files.cpp #, fuzzy -msgid "Filter: " +msgid "Filters:" msgstr "éŽæ¿¾å™¨:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp @@ -3081,6 +3159,11 @@ msgstr "" #: editor/find_in_files.cpp #, fuzzy +msgid "Find: " +msgstr "尋找" + +#: editor/find_in_files.cpp +#, fuzzy msgid "Replace: " msgstr "å–代" @@ -3244,18 +3327,15 @@ msgstr "" msgid "Failed to load resource." msgstr "" -#: editor/inspector_dock.cpp editor/plugins/canvas_item_editor_plugin.cpp -#: editor/scene_tree_dock.cpp -msgid "Ok" -msgstr "" - #: editor/inspector_dock.cpp -msgid "Expand all properties" +#, fuzzy +msgid "Expand All Properties" msgstr "展開所有屬性" #: editor/inspector_dock.cpp -msgid "Collapse all properties" -msgstr "" +#, fuzzy +msgid "Collapse All Properties" +msgstr "展開所有屬性" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3499,6 +3579,11 @@ msgstr "" msgid "Snap" msgstr "" +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #, fuzzy @@ -3878,10 +3963,6 @@ msgid "Amount:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -msgid "Blend:" -msgstr "" - -#: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" msgstr "" @@ -4211,6 +4292,10 @@ msgid "Resize CanvasItem" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" msgstr "" @@ -4274,6 +4359,11 @@ msgid "Rotate Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Scale Mode" +msgstr "åˆ‡æ›æ¨¡å¼" + +#: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Show a list of all objects at the position clicked\n" @@ -4368,6 +4458,11 @@ msgid "Restores the object's children's ability to be selected." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Skeleton Options" +msgstr "單例" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" msgstr "" @@ -4418,6 +4513,10 @@ msgid "Show Viewport" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" msgstr "" @@ -4859,8 +4958,7 @@ msgid "Create Navigation Polygon" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -#: editor/plugins/particles_editor_plugin.cpp -msgid "Generating AABB" +msgid "Generating Visibility Rect" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4889,6 +4987,12 @@ msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy +msgid "Convert to CPUParticles" +msgstr "è½‰æ›æˆ..." + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp msgid "Particles" msgstr "" @@ -4958,13 +5062,12 @@ msgid "A processor material of type 'ParticlesMaterial' is required." msgstr "" #: editor/plugins/particles_editor_plugin.cpp -msgid "Generate AABB" +msgid "Generating AABB" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy -msgid "Convert to CPUParticles" -msgstr "è½‰æ›æˆ..." +msgid "Generate AABB" +msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" @@ -5299,22 +5402,22 @@ msgid "Paste Resource" msgstr "貼上資æº" #: editor/plugins/resource_preloader_editor_plugin.cpp -#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -msgid "Open in Editor" -msgstr "" - -#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: editor/scene_tree_editor.cpp msgid "Type:" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Load Resource" msgstr "" @@ -5348,6 +5451,11 @@ msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" #: editor/plugins/script_editor_plugin.cpp #, fuzzy +msgid "Error: could not load file." +msgstr "無法新增資料夾" + +#: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Error could not load file." msgstr "無法新增資料夾" @@ -5450,12 +5558,9 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Show In File System" -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp -msgid "History Prev" -msgstr "" +#, fuzzy +msgid "History Previous" +msgstr "上個分é " #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5526,7 +5631,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Debug with external editor" +msgid "Debug with External Editor" msgstr "離開編輯器嗎?" #: editor/plugins/script_editor_plugin.cpp @@ -5534,10 +5639,6 @@ msgid "Open Godot online documentation" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Search the class hierarchy." -msgstr "" - -#: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." msgstr "" @@ -5573,19 +5674,9 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Search results" +msgid "Search Results" msgstr "æœå°‹å¹«åŠ©" -#: editor/plugins/script_editor_plugin.cpp -#, fuzzy -msgid "Search in files" -msgstr "æœå°‹ Class" - -#: editor/plugins/script_editor_plugin.cpp -msgid "" -"Built-in scripts can only be edited when the scene they belong to is loaded" -msgstr "" - #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Line" @@ -5596,6 +5687,11 @@ msgid "(ignore)" msgstr "" #: editor/plugins/script_text_editor.cpp +#, fuzzy +msgid "Go to Function" +msgstr "建立函å¼" + +#: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "" @@ -5685,12 +5781,14 @@ msgid "Trim Trailing Whitespace" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Spaces" -msgstr "" +#, fuzzy +msgid "Convert Indent to Spaces" +msgstr "è½‰æ›æˆ..." #: editor/plugins/script_text_editor.cpp -msgid "Convert Indent To Tabs" -msgstr "" +#, fuzzy +msgid "Convert Indent to Tabs" +msgstr "è½‰æ›æˆ..." #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5706,22 +5804,14 @@ msgid "Remove All Breakpoints" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Next Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp -msgid "Goto Previous Breakpoint" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Uppercase" -msgstr "è½‰æ›æˆ..." +msgid "Go to Next Breakpoint" +msgstr "往下一æ¥" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Convert To Lowercase" -msgstr "è½‰æ›æˆ..." +msgid "Go to Previous Breakpoint" +msgstr "往上一æ¥" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" @@ -5729,16 +5819,18 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find in files..." +msgid "Find in Files..." msgstr "éŽæ¿¾æª”案..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function..." -msgstr "" +#, fuzzy +msgid "Go to Function..." +msgstr "建立函å¼" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line..." -msgstr "" +#, fuzzy +msgid "Go to Line..." +msgstr "å‰å¾€ç¬¬...行" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5832,6 +5924,14 @@ msgid "Animation Key Inserted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" msgstr "" @@ -6000,6 +6100,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" msgstr "" @@ -6101,10 +6205,6 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Snap To Floor" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" msgstr "" @@ -6509,6 +6609,11 @@ msgid "Fix Invalid Tiles" msgstr "ä¸èƒ½ä½¿ç”¨çš„å稱。" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Cut Selection" +msgstr "æ‰€æœ‰çš„é¸æ“‡" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" @@ -6556,25 +6661,30 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy -msgid "Move Selection" +msgid "Copy Selection" msgstr "移除所é¸" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 0 degrees" +msgid "Rotate left" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 90 degrees" +msgid "Rotate right" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 180 degrees" +msgid "Flip horizontally" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -msgid "Rotate 270 degrees" +msgid "Flip vertically" msgstr "" +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Clear transform" +msgstr "動畫更改座標" + #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" msgstr "" @@ -6603,7 +6713,7 @@ msgid "Display tile's names (hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid "Remove Selected Textue and ALL TILES wich uses it?" +msgid "Remove selected texture and ALL TILES which use it?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6619,7 +6729,7 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -msgid " file(s) was not added because was already on the list." +msgid "%s file(s) were not added because was already on the list." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp @@ -6698,6 +6808,15 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "" #: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +#, fuzzy +msgid "Exporting All" +msgstr "輸出" + +#: editor/project_export.cpp msgid "Presets" msgstr "" @@ -6706,6 +6825,11 @@ msgid "Add..." msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Export Path:" +msgstr "輸出" + +#: editor/project_export.cpp msgid "Resources" msgstr "" @@ -6766,6 +6890,16 @@ msgid "Export PCK/Zip" msgstr "輸出" #: editor/project_export.cpp +#, fuzzy +msgid "Export mode?" +msgstr "輸出" + +#: editor/project_export.cpp +#, fuzzy +msgid "Export All" +msgstr "輸出" + +#: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "" @@ -7225,11 +7359,7 @@ msgstr "專案è¨å®š" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" - -#: editor/project_settings_editor.cpp editor/property_editor.cpp -msgid "Property:" -msgstr "" +msgstr "一般" #: editor/project_settings_editor.cpp msgid "Override For..." @@ -7365,10 +7495,6 @@ msgstr "" msgid "Bit %d, val %d." msgstr "" -#: editor/property_editor.cpp -msgid "Properties:" -msgstr "" - #: editor/property_selector.cpp msgid "Select Property" msgstr "" @@ -7457,7 +7583,7 @@ msgid "Step" msgstr "æ¥é©Ÿ :" #: editor/rename_dialog.cpp -msgid "Ammount by which counter is incremented for each node" +msgid "Amount by which counter is incremented for each node" msgstr "" #: editor/rename_dialog.cpp @@ -7466,7 +7592,7 @@ msgstr "" #: editor/rename_dialog.cpp msgid "" -"Minium number of digits for the counter.\n" +"Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" @@ -7509,7 +7635,7 @@ msgstr "è½‰æ›æˆ..." msgid "Reset" msgstr "é‡è¨ç¸®æ”¾å¤§å°" -#: editor/rename_dialog.cpp editor/script_editor_debugger.cpp +#: editor/rename_dialog.cpp msgid "Error" msgstr "" @@ -7568,6 +7694,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Clear Script" msgstr "" @@ -7604,6 +7734,12 @@ msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Editable Children" msgstr "" @@ -7678,6 +7814,11 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Open documentation" +msgstr "開啟最近å˜å–" + +#: editor/scene_tree_dock.cpp msgid "Delete Node(s)" msgstr "" @@ -7686,12 +7827,13 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Instance Child Scene" +msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Change Type" -msgstr "" +#, fuzzy +msgid "Extend Script" +msgstr "開啟最近å˜å–" #: editor/scene_tree_dock.cpp #, fuzzy @@ -7846,6 +7988,10 @@ msgid "Path is empty" msgstr "" #: editor/script_create_dialog.cpp +msgid "Filename is empty" +msgstr "" + +#: editor/script_create_dialog.cpp msgid "Path is not local" msgstr "" @@ -7937,19 +8083,7 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Warning" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Error:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Source:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Function:" +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -7982,18 +8116,6 @@ msgid "Stack Frames" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Variable" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Errors:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Stack Trace (if applicable):" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Profiler" msgstr "" @@ -8441,11 +8563,7 @@ msgid "End of inner exception stack trace" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake!" -msgstr "" - -#: modules/recast/navigation_mesh_editor_plugin.cpp -msgid "Bake the navigation mesh." +msgid "Bake NavMesh" msgstr "" #: modules/recast/navigation_mesh_editor_plugin.cpp @@ -8722,6 +8840,10 @@ msgid "Base Type:" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" msgstr "" @@ -8822,11 +8944,11 @@ msgid "Search VisualScript" msgstr "æœå°‹å¹«åŠ©" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Get" +msgid "Get %s" msgstr "" #: modules/visual_script/visual_script_property_selector.cpp -msgid "Set " +msgid "Set %s" msgstr "" #: platform/javascript/export/export.cpp @@ -8915,6 +9037,12 @@ msgid "" "shape resource for it!" msgstr "CollisionShape2Då¿…é ˆè¢«è³¦äºˆå½¢ç‹€æ‰èƒ½é‹ä½œï¼Œè«‹ç‚ºå®ƒå»ºç«‹å€‹å½¢ç‹€å§ï¼" +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " @@ -8953,6 +9081,12 @@ msgid "" "imprinted." msgstr "" +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" @@ -9070,6 +9204,16 @@ msgid "" "shape resource for it!" msgstr "" +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial with " +"\"Billboard Particles\" enabled." +msgstr "" + #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" msgstr "" @@ -9089,6 +9233,24 @@ msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial with \"Billboard " +"Particles\" enabled." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "OrientedPathFollow requires up vectors enabled in its parent Path." +msgstr "" + #: scene/3d/physics_body.cpp msgid "" "Size changes to RigidBody (in character or rigid modes) will be overridden " @@ -9121,7 +9283,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "" -"Size changes to SoftBody will be overriden by the physics engine when " +"Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" @@ -9194,10 +9356,6 @@ msgstr "è¦å‘Š!" msgid "Please Confirm..." msgstr "請確èª..." -#: scene/gui/file_dialog.cpp -msgid "Select this Folder" -msgstr "鏿“‡æ¤è³‡æ–™å¤¾" - #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -9205,6 +9363,10 @@ msgid "" "hide upon running." msgstr "" +#: scene/gui/range.cpp +msgid "If exp_edit is true min_value must be > 0." +msgstr "" + #: scene/gui/scroll_container.cpp msgid "" "ScrollContainer is intended to work with a single child control.\n" @@ -9273,6 +9435,53 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "放大" + +#~ msgid "Class List:" +#~ msgstr "Class 列表:" + +#~ msgid "Search Classes" +#~ msgstr "æœå°‹ Class" + +#~ msgid "Public Methods:" +#~ msgstr "公開 method:" + +#~ msgid "GUI Theme Items" +#~ msgstr "介é¢ä¸»é¡Œé …ç›®" + +#~ msgid "GUI Theme Items:" +#~ msgstr "介é¢ä¸»é¡Œé …ç›®:" + +#, fuzzy +#~ msgid "Toggle folder status as Favorite." +#~ msgstr "åˆ‡æ›æœ€æ„›" + +#, fuzzy +#~ msgid "Show current scene file." +#~ msgstr "新增資料夾" + +#, fuzzy +#~ msgid "Whole words" +#~ msgstr "整個å—" + +#, fuzzy +#~ msgid "Match case" +#~ msgstr "符åˆå¤§å°å¯«" + +#, fuzzy +#~ msgid "Search in files" +#~ msgstr "æœå°‹ Class" + +#, fuzzy +#~ msgid "Convert To Uppercase" +#~ msgstr "è½‰æ›æˆ..." + +#, fuzzy +#~ msgid "Convert To Lowercase" +#~ msgstr "è½‰æ›æˆ..." + #~ msgid "Disabled" #~ msgstr "å·²åœç”¨" diff --git a/gles_builders.py b/gles_builders.py index 1e63a53f1a..e56ccc4431 100644 --- a/gles_builders.py +++ b/gles_builders.py @@ -59,11 +59,11 @@ def include_file_in_legacygl_header(filename, header_data, depth): included_file = os.path.relpath(os.path.dirname(filename) + "/" + includeline) if not included_file in header_data.vertex_included_files and header_data.reading == "vertex": header_data.vertex_included_files += [included_file] - if include_file_in_legacygl_header(included_file, header_data, depth + 1) == None: + if include_file_in_legacygl_header(included_file, header_data, depth + 1) is None: print("Error in file '" + filename + "': #include " + includeline + "could not be found!") elif not included_file in header_data.fragment_included_files and header_data.reading == "fragment": header_data.fragment_included_files += [included_file] - if include_file_in_legacygl_header(included_file, header_data, depth + 1) == None: + if include_file_in_legacygl_header(included_file, header_data, depth + 1) is None: print("Error in file '" + filename + "': #include " + includeline + "could not be found!") line = fs.readline() @@ -231,9 +231,9 @@ def build_legacygl_header(filename, include, class_suffix, output_attribs, gles2 fd.write("\t_FORCE_INLINE_ void set_conditional(Conditionals p_conditional,bool p_enable) { _set_conditional(p_conditional,p_enable); }\n\n") fd.write("\t#ifdef DEBUG_ENABLED\n ") fd.write("\t#define _FU if (get_uniform(p_uniform)<0) return; if (!is_version_valid()) return; ERR_FAIL_COND( get_active()!=this ); \n\n ") - fd.write("\t#else\n ") + fd.write("\t#else\n ") fd.write("\t#define _FU if (get_uniform(p_uniform)<0) return; \n\n ") - fd.write("\t#endif\n") + fd.write("\t#endif\n") fd.write("\t_FORCE_INLINE_ void set_uniform(Uniforms p_uniform, float p_value) { _FU glUniform1f(get_uniform(p_uniform),p_value); }\n\n") fd.write("\t_FORCE_INLINE_ void set_uniform(Uniforms p_uniform, double p_value) { _FU glUniform1f(get_uniform(p_uniform),p_value); }\n\n") fd.write("\t_FORCE_INLINE_ void set_uniform(Uniforms p_uniform, uint8_t p_value) { _FU glUniform1i(get_uniform(p_uniform),p_value); }\n\n") diff --git a/main/input_default.cpp b/main/input_default.cpp index 913c143025..b1084900d6 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -261,6 +261,13 @@ void InputDefault::parse_input_event(const Ref<InputEvent> &p_event) { void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated) { + // Notes on mouse-touch emulation: + // - Emulated mouse events are parsed, that is, re-routed to this method, so they make the same effects + // as true mouse events. The only difference is the situation is flagged as emulated so they are not + // emulated back to touch events in an endless loop. + // - Emulated touch events are handed right to the main loop (i.e., the SceneTree) because they don't + // require additional handling by this class. + _THREAD_SAFE_METHOD_ Ref<InputEventKey> k = p_event; @@ -316,11 +323,21 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool } } - if (emulate_mouse_from_touch) { + Ref<InputEventScreenTouch> st = p_event; + + if (st.is_valid()) { + + if (st->is_pressed()) { + SpeedTrack &track = touch_speed_track[st->get_index()]; + track.reset(); + } else { + // Since a pointer index may not occur again (OSs may or may not reuse them), + // imperatively remove it from the map to keep no fossil entries in it + touch_speed_track.erase(st->get_index()); + } - Ref<InputEventScreenTouch> st = p_event; + if (emulate_mouse_from_touch) { - if (st.is_valid()) { bool translate = false; if (st->is_pressed()) { if (mouse_from_touch_index == -1) { @@ -351,10 +368,18 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool _parse_input_event_impl(button_event, true); } } + } + + Ref<InputEventScreenDrag> sd = p_event; + + if (sd.is_valid()) { + + SpeedTrack &track = touch_speed_track[sd->get_index()]; + track.update(sd->get_relative()); + sd->set_speed(track.speed); - Ref<InputEventScreenDrag> sd = p_event; + if (emulate_mouse_from_touch && sd->get_index() == mouse_from_touch_index) { - if (sd.is_valid() && sd->get_index() == mouse_from_touch_index) { Ref<InputEventMouseMotion> motion_event; motion_event.instance(); @@ -404,6 +429,7 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = p_event->is_action_pressed(E->key()); + action.strength = 0.f; action_state[E->key()] = action; } action_state[E->key()].strength = p_event->get_action_strength(E->key()); @@ -530,13 +556,14 @@ Point2i InputDefault::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_moti void InputDefault::iteration(float p_step) { } -void InputDefault::action_press(const StringName &p_action) { +void InputDefault::action_press(const StringName &p_action, float p_strength) { Action action; action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = true; + action.strength = p_strength; action_state[p_action] = action; } @@ -548,6 +575,7 @@ void InputDefault::action_release(const StringName &p_action) { action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = false; + action.strength = 0.f; action_state[p_action] = action; } diff --git a/main/input_default.h b/main/input_default.h index b420ec124b..b6767669f0 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -117,6 +117,7 @@ class InputDefault : public Input { }; SpeedTrack mouse_speed_track; + Map<int, SpeedTrack> touch_speed_track; Map<int, Joypad> joy_names; int fallback_mapping; @@ -226,7 +227,7 @@ public: void set_main_loop(MainLoop *p_main_loop); void set_mouse_position(const Point2 &p_posf); - void action_press(const StringName &p_action); + void action_press(const StringName &p_action, float p_strength = 1.f); void action_release(const StringName &p_action); void iteration(float p_step); diff --git a/main/main.cpp b/main/main.cpp index 3eb0b7f354..7383294167 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -115,9 +115,11 @@ static bool editor = false; static bool project_manager = false; static String locale; static bool show_help = false; -static bool auto_build_solutions = false; static bool auto_quit = false; static OS::ProcessID allow_focus_steal_pid = 0; +#ifdef TOOLS_ENABLED +static bool auto_build_solutions = false; +#endif // Display @@ -720,6 +722,29 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph I = N; } + // Network file system needs to be configured before globals, since globals are based on the + // 'project.godot' file which will only be available through the network if this is enabled + FileAccessNetwork::configure(); + if (remotefs != "") { + + file_access_network_client = memnew(FileAccessNetworkClient); + int port; + if (remotefs.find(":") != -1) { + port = remotefs.get_slicec(':', 1).to_int(); + remotefs = remotefs.get_slicec(':', 0); + } else { + port = 6010; + } + + Error err = file_access_network_client->connect(remotefs, port, remotefs_pass); + if (err) { + OS::get_singleton()->printerr("Could not connect to remotefs: %s:%i.\n", remotefs.utf8().get_data(), port); + goto error; + } + + FileAccess::make_default<FileAccessNetwork>(FileAccess::ACCESS_RESOURCES); + } + if (globals->setup(project_path, main_pack, upwards) == OK) { found_project = true; } else { @@ -727,16 +752,22 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph #ifdef TOOLS_ENABLED editor = false; #else - OS::get_singleton()->print("Error: Could not load game path '%s'.\n", project_path.ascii().get_data()); + String error_msg = "Error: Could not load game data at path '" + project_path + "'. Is the .pck file missing?\n"; + OS::get_singleton()->print(error_msg.ascii().get_data()); + OS::get_singleton()->alert(error_msg); goto error; #endif } GLOBAL_DEF("memory/limits/multithreaded_server/rid_pool_prealloc", 60); + ProjectSettings::get_singleton()->set_custom_property_info("memory/limits/multithreaded_server/rid_pool_prealloc", PropertyInfo(Variant::INT, "memory/limits/multithreaded_server/rid_pool_prealloc", PROPERTY_HINT_RANGE, "0,500,1")); // No negative and limit to 500 due to crashes GLOBAL_DEF("network/limits/debugger_stdout/max_chars_per_second", 2048); + ProjectSettings::get_singleton()->set_custom_property_info("network/limits/debugger_stdout/max_chars_per_second", PropertyInfo(Variant::INT, "network/limits/debugger_stdout/max_chars_per_second", PROPERTY_HINT_RANGE, "0, 4096, 1, or_greater")); GLOBAL_DEF("network/limits/debugger_stdout/max_messages_per_frame", 10); + ProjectSettings::get_singleton()->set_custom_property_info("network/limits/debugger_stdout/max_messages_per_frame", PropertyInfo(Variant::INT, "network/limits/debugger_stdout/max_messages_per_frame", PROPERTY_HINT_RANGE, "0, 20, 1, or_greater")); GLOBAL_DEF("network/limits/debugger_stdout/max_errors_per_frame", 10); + ProjectSettings::get_singleton()->set_custom_property_info("network/limits/debugger_stdout/max_errors_per_frame", PropertyInfo(Variant::INT, "network/limits/debugger_stdout/max_errors_per_frame", PROPERTY_HINT_RANGE, "0, 20, 1, or_greater")); if (debug_mode == "remote") { @@ -760,28 +791,6 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph script_debugger = memnew(ScriptDebuggerLocal); OS::get_singleton()->initialize_debugging(); } - - FileAccessNetwork::configure(); - - if (remotefs != "") { - - file_access_network_client = memnew(FileAccessNetworkClient); - int port; - if (remotefs.find(":") != -1) { - port = remotefs.get_slicec(':', 1).to_int(); - remotefs = remotefs.get_slicec(':', 0); - } else { - port = 6010; - } - - Error err = file_access_network_client->connect(remotefs, port, remotefs_pass); - if (err) { - OS::get_singleton()->printerr("Could not connect to remotefs: %s:%i.\n", remotefs.utf8().get_data(), port); - goto error; - } - - FileAccess::make_default<FileAccessNetwork>(FileAccess::ACCESS_RESOURCES); - } if (script_debugger) { //there is a debugger, parse breakpoints @@ -809,6 +818,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph GLOBAL_DEF("logging/file_logging/enable_file_logging", false); GLOBAL_DEF("logging/file_logging/log_path", "user://logs/log.txt"); GLOBAL_DEF("logging/file_logging/max_log_files", 10); + ProjectSettings::get_singleton()->set_custom_property_info("logging/file_logging/max_log_files", PropertyInfo(Variant::INT, "logging/file_logging/max_log_files", PROPERTY_HINT_RANGE, "0,20,1,or_greater")); //no negative numbers if (FileAccess::get_create_func(FileAccess::ACCESS_USERDATA) && GLOBAL_GET("logging/file_logging/enable_file_logging")) { String base_path = GLOBAL_GET("logging/file_logging/log_path"); int max_files = GLOBAL_GET("logging/file_logging/max_log_files"); @@ -871,13 +881,17 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/driver/driver_fallback", PropertyInfo(Variant::STRING, "rendering/quality/driver/driver_fallback", PROPERTY_HINT_ENUM, "Best,Never")); GLOBAL_DEF("display/window/size/width", 1024); + ProjectSettings::get_singleton()->set_custom_property_info("display/window/size/width", PropertyInfo(Variant::INT, "display/window/size/width", PROPERTY_HINT_RANGE, "0,7680,or_greater")); // 8K resolution GLOBAL_DEF("display/window/size/height", 600); + ProjectSettings::get_singleton()->set_custom_property_info("display/window/size/height", PropertyInfo(Variant::INT, "display/window/size/height", PROPERTY_HINT_RANGE, "0,4320,or_greater")); // 8K resolution GLOBAL_DEF("display/window/size/resizable", true); GLOBAL_DEF("display/window/size/borderless", false); GLOBAL_DEF("display/window/size/fullscreen", false); GLOBAL_DEF("display/window/size/always_on_top", false); GLOBAL_DEF("display/window/size/test_width", 0); + ProjectSettings::get_singleton()->set_custom_property_info("display/window/size/test_width", PropertyInfo(Variant::INT, "display/window/size/test_width", PROPERTY_HINT_RANGE, "0,7680,or_greater")); // 8K resolution GLOBAL_DEF("display/window/size/test_height", 0); + ProjectSettings::get_singleton()->set_custom_property_info("display/window/size/test_height", PropertyInfo(Variant::INT, "display/window/size/test_height", PROPERTY_HINT_RANGE, "0,4320,or_greater")); // 8K resolution if (use_custom_res) { @@ -995,6 +1009,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph Engine::get_singleton()->set_iterations_per_second(GLOBAL_DEF("physics/common/physics_fps", 60)); Engine::get_singleton()->set_physics_jitter_fix(GLOBAL_DEF("physics/common/physics_jitter_fix", 0.5)); Engine::get_singleton()->set_target_fps(GLOBAL_DEF("debug/settings/fps/force_fps", 0)); + ProjectSettings::get_singleton()->set_custom_property_info("debug/settings/fps/force_fps", PropertyInfo(Variant::INT, "debug/settings/fps/force_fps", PROPERTY_HINT_RANGE, "0,120,1,or_greater")); GLOBAL_DEF("debug/settings/stdout/print_fps", false); @@ -1003,10 +1018,12 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph if (frame_delay == 0) { frame_delay = GLOBAL_DEF("application/run/frame_delay_msec", 0); + ProjectSettings::get_singleton()->set_custom_property_info("application/run/frame_delay_msec", PropertyInfo(Variant::INT, "application/run/frame_delay_msec", PROPERTY_HINT_RANGE, "0,100,1,or_greater")); // No negative numbers } OS::get_singleton()->set_low_processor_usage_mode(GLOBAL_DEF("application/run/low_processor_mode", false)); OS::get_singleton()->set_low_processor_usage_mode_sleep_usec(GLOBAL_DEF("application/run/low_processor_mode_sleep_usec", 8000)); + ProjectSettings::get_singleton()->set_custom_property_info("application/run/low_processor_mode_sleep_usec", PropertyInfo(Variant::INT, "application/run/low_processor_mode_sleep_usec", PROPERTY_HINT_RANGE, "0,33200,1,or_greater")); // No negative numbers Engine::get_singleton()->set_frame_delay(frame_delay); @@ -1635,7 +1652,7 @@ bool Main::start() { GLOBAL_DEF("display/window/stretch/aspect", "ignore"); ProjectSettings::get_singleton()->set_custom_property_info("display/window/stretch/aspect", PropertyInfo(Variant::STRING, "display/window/stretch/aspect", PROPERTY_HINT_ENUM, "ignore,keep,keep_width,keep_height,expand")); GLOBAL_DEF("display/window/stretch/shrink", 1); - ProjectSettings::get_singleton()->set_custom_property_info("display/window/stretch/shrink", PropertyInfo(Variant::STRING, "display/window/stretch/shrink", PROPERTY_HINT_RANGE, "1,8,1")); + ProjectSettings::get_singleton()->set_custom_property_info("display/window/stretch/shrink", PropertyInfo(Variant::REAL, "display/window/stretch/shrink", PROPERTY_HINT_RANGE, "1,8,1")); sml->set_auto_accept_quit(GLOBAL_DEF("application/config/auto_accept_quit", true)); sml->set_quit_on_go_back(GLOBAL_DEF("application/config/quit_on_go_back", true)); GLOBAL_DEF("gui/common/snap_controls_to_pixels", true); @@ -1680,12 +1697,17 @@ bool Main::start() { #ifdef TOOLS_ENABLED if (editor) { - Error serr = editor_node->load_scene(local_game_path); - if (serr != OK) - ERR_PRINT("Failed to load scene"); + if (game_path != GLOBAL_GET("application/run/main_scene") || !editor_node->has_scenes_in_session()) { + Error serr = editor_node->load_scene(local_game_path); + if (serr != OK) + ERR_PRINT("Failed to load scene"); + } OS::get_singleton()->set_context(OS::CONTEXT_EDITOR); } #endif + if (!editor) { + OS::get_singleton()->set_context(OS::CONTEXT_ENGINE); + } } if (!project_manager && !editor) { // game @@ -1975,6 +1997,8 @@ void Main::cleanup() { memdelete(arvr_server); } + ImageLoader::cleanup(); + unregister_driver_types(); unregister_module_types(); unregister_platform_apis(); diff --git a/main/tests/test_io.cpp b/main/tests/test_io.cpp deleted file mode 100644 index 4e43ee6a54..0000000000 --- a/main/tests/test_io.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/*************************************************************************/ -/* test_io.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2018 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 "test_io.h" - -#ifdef MINIZIP_ENABLED - -#include "core/io/resource_loader.h" -#include "core/io/resource_saver.h" -#include "core/os/dir_access.h" -#include "core/os/main_loop.h" -#include "core/os/os.h" -#include "core/print_string.h" -#include "core/project_settings.h" -#include "scene/resources/texture.h" - -#include "core/io/file_access_memory.h" - -namespace TestIO { - -class TestMainLoop : public MainLoop { - - bool quit; - -public: - virtual void input_event(const Ref<InputEvent> &p_event) { - } - virtual bool idle(float p_time) { - return false; - } - - virtual void request_quit() { - - quit = true; - } - virtual void init() { - - quit = true; - } - virtual bool iteration(float p_time) { - - return quit; - } - virtual void finish() { - } -}; - -MainLoop *test() { - - print_line("this is test io"); - DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - da->change_dir("."); - print_line("Opening current dir " + da->get_current_dir()); - String entry; - da->list_dir_begin(); - while ((entry = da->get_next()) != "") { - - print_line("entry " + entry + " is dir: " + Variant(da->current_is_dir())); - }; - da->list_dir_end(); - - RES texture = ResourceLoader::load("test_data/rock.png"); - ERR_FAIL_COND_V(texture.is_null(), NULL); - - ResourceSaver::save("test_data/rock.xml", texture); - - print_line("localize paths"); - print_line(ProjectSettings::get_singleton()->localize_path("algo.xml")); - print_line(ProjectSettings::get_singleton()->localize_path("c:\\windows\\algo.xml")); - print_line(ProjectSettings::get_singleton()->localize_path(ProjectSettings::get_singleton()->get_resource_path() + "/something/something.xml")); - print_line(ProjectSettings::get_singleton()->localize_path("somedir/algo.xml")); - - { - - FileAccess *z = FileAccess::open("test_data/archive.zip", FileAccess::READ); - int len = z->get_len(); - Vector<uint8_t> zip; - zip.resize(len); - z->get_buffer(zip.ptrw(), len); - z->close(); - memdelete(z); - - FileAccessMemory::register_file("a_package", zip); - FileAccess::make_default<FileAccessMemory>(FileAccess::ACCESS_RESOURCES); - FileAccess::make_default<FileAccessMemory>(FileAccess::ACCESS_FILESYSTEM); - FileAccess::make_default<FileAccessMemory>(FileAccess::ACCESS_USERDATA); - - print_line("archive test"); - }; - - print_line("test done"); - - return memnew(TestMainLoop); -} -} // namespace TestIO - -#else - -namespace TestIO { - -MainLoop *test() { - - return NULL; -} -} // namespace TestIO -#endif diff --git a/main/tests/test_main.cpp b/main/tests/test_main.cpp index 714a254371..a36b619ba0 100644 --- a/main/tests/test_main.cpp +++ b/main/tests/test_main.cpp @@ -37,7 +37,6 @@ #include "test_gdscript.h" #include "test_gui.h" #include "test_image.h" -#include "test_io.h" #include "test_math.h" #include "test_oa_hash_map.h" #include "test_ordered_hash_map.h" @@ -57,7 +56,6 @@ const char **tests_get_names() { "render", "oa_hash_map", "gui", - "io", "shaderlang", "gd_tokenizer", "gd_parser", @@ -111,11 +109,6 @@ MainLoop *test_main(String p_test, const List<String> &p_args) { } #endif - if (p_test == "io") { - - return TestIO::test(); - } - if (p_test == "shaderlang") { return TestShaderLang::test(); diff --git a/main/tests/test_oa_hash_map.cpp b/main/tests/test_oa_hash_map.cpp index 0e34faace7..deaba285cf 100644 --- a/main/tests/test_oa_hash_map.cpp +++ b/main/tests/test_oa_hash_map.cpp @@ -48,7 +48,7 @@ MainLoop *test() { map.set(1337, 21); map.set(42, 11880); - int value; + int value = 0; map.lookup(42, value); OS::get_singleton()->print("capacity %d\n", map.get_capacity()); @@ -92,6 +92,35 @@ MainLoop *test() { } } + // stress test / test for issue #22928 + { + OAHashMap<int, int> map; + int dummy; + const int N = 1000; + uint32_t *keys = new uint32_t[N]; + + Math::seed(0); + + // insert a couple of random keys (with a dummy value, which is ignored) + for (int i = 0; i < N; i++) { + keys[i] = Math::rand(); + map.set(keys[i], dummy); + + if (!map.lookup(keys[i], dummy)) + OS::get_singleton()->print("could not find 0x%X despite it was just inserted!\n", unsigned(keys[i])); + } + + // check whether the keys are still present + for (int i = 0; i < N; i++) { + if (!map.lookup(keys[i], dummy)) { + OS::get_singleton()->print("could not find 0x%X despite it has been inserted previously! (not checking the other keys, breaking...)\n", unsigned(keys[i])); + break; + } + } + + delete[] keys; + } + return NULL; } } // namespace TestOAHashMap diff --git a/main/tests/test_shader_lang.cpp b/main/tests/test_shader_lang.cpp index 9df5973376..357143e499 100644 --- a/main/tests/test_shader_lang.cpp +++ b/main/tests/test_shader_lang.cpp @@ -180,7 +180,7 @@ static String dump_node_code(SL::Node *p_node, int p_level) { String scode = dump_node_code(bnode->statements[i], p_level); - if (bnode->statements[i]->type == SL::Node::TYPE_CONTROL_FLOW || bnode->statements[i]->type == SL::Node::TYPE_CONTROL_FLOW) { + if (bnode->statements[i]->type == SL::Node::TYPE_CONTROL_FLOW) { code += scode; //use directly } else { code += _mktab(p_level) + scode + ";\n"; diff --git a/main/tests/test_string.cpp b/main/tests/test_string.cpp index 74157d63c9..7e19c7bf3e 100644 --- a/main/tests/test_string.cpp +++ b/main/tests/test_string.cpp @@ -480,7 +480,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish % frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; //////// INTS @@ -491,7 +491,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 5 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Int left padded with zeroes. format = "fish %05d frog"; @@ -500,7 +500,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 00005 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Int left padded with spaces. format = "fish %5d frog"; @@ -509,7 +509,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 5 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Int right padded with spaces. format = "fish %-5d frog"; @@ -518,7 +518,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 5 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Int with sign (positive). format = "fish %+d frog"; @@ -527,7 +527,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish +5 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Negative int. format = "fish %d frog"; @@ -536,7 +536,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish -5 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Hex (lower) format = "fish %x frog"; @@ -545,7 +545,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 2d frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Hex (upper) format = "fish %X frog"; @@ -554,7 +554,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 2D frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Octal format = "fish %o frog"; @@ -563,7 +563,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 143 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ////// REALS @@ -574,7 +574,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99.990000 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real left-padded format = "fish %11f frog"; @@ -583,7 +583,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99.990000 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real right-padded format = "fish %-11f frog"; @@ -592,7 +592,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99.990000 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real given int. format = "fish %f frog"; @@ -601,7 +601,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99.000000 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real with sign (positive). format = "fish %+f frog"; @@ -610,7 +610,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish +99.990000 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real with 1 decimals. format = "fish %.1f frog"; @@ -619,7 +619,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 100.0 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real with 12 decimals. format = "fish %.12f frog"; @@ -628,7 +628,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99.990000000000 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Real with no decimals. format = "fish %.f frog"; @@ -637,7 +637,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 100 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; /////// Strings. @@ -648,7 +648,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish cheese frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // String left-padded format = "fish %10s frog"; @@ -657,7 +657,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish cheese frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // String right-padded format = "fish %-10s frog"; @@ -666,7 +666,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish cheese frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ///// Characters @@ -677,7 +677,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish A frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Character as int. format = "fish %c frog"; @@ -686,7 +686,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish A frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ///// Dynamic width @@ -698,7 +698,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish cheese frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Int dynamic width format = "fish %*d frog"; @@ -708,7 +708,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Float dynamic width format = "fish %*.*f frog"; @@ -719,7 +719,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == String("fish 99.990 frog") && !error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ///// Errors @@ -730,7 +730,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "not enough arguments for format string" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // More arguments than formats. format = "fish %s frog"; @@ -740,7 +740,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "not all arguments converted during string formatting" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Incomplete format. format = "fish %10"; @@ -749,7 +749,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "incomplete format" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Bad character in format string format = "fish %&f frog"; @@ -758,7 +758,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "unsupported format character" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Too many decimals. format = "fish %2.2.2f frog"; @@ -767,7 +767,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "too many decimal points in format" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // * not a number format = "fish %*f frog"; @@ -777,7 +777,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "* wants number" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Character too long. format = "fish %c frog"; @@ -786,7 +786,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "%c requires number or single-character string" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; // Character bad type. format = "fish %c frog"; @@ -795,7 +795,7 @@ bool test_28() { output = format.sprintf(args, &error); success = (output == "%c requires number or single-character string" && error); OS::get_singleton()->print(output_format, format.c_str(), output.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; return state; } @@ -819,37 +819,127 @@ bool test_29() { String ip4 = "192.168.0.1"; bool success = ip4.is_valid_ip_address(); OS::get_singleton()->print("Is valid ipv4: %ls, %s\n", ip4.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ip4 = "192.368.0.1"; success = (!ip4.is_valid_ip_address()); OS::get_singleton()->print("Is invalid ipv4: %ls, %s\n", ip4.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; String ip6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"; success = ip6.is_valid_ip_address(); OS::get_singleton()->print("Is valid ipv6: %ls, %s\n", ip6.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ip6 = "2001:0db8:85j3:0000:0000:8a2e:0370:7334"; success = (!ip6.is_valid_ip_address()); OS::get_singleton()->print("Is invalid ipv6: %ls, %s\n", ip6.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ip6 = "2001:0db8:85f345:0000:0000:8a2e:0370:7334"; success = (!ip6.is_valid_ip_address()); OS::get_singleton()->print("Is invalid ipv6: %ls, %s\n", ip6.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ip6 = "2001:0db8::0:8a2e:370:7334"; success = (ip6.is_valid_ip_address()); OS::get_singleton()->print("Is valid ipv6: %ls, %s\n", ip6.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; ip6 = "::ffff:192.168.0.1"; success = (ip6.is_valid_ip_address()); OS::get_singleton()->print("Is valid ipv6: %ls, %s\n", ip6.c_str(), success ? "OK" : "FAIL"); - if (!success) state = false; + state = state && success; + + return state; +}; + +bool test_30() { + bool state = true; + bool success = true; + String input = "bytes2var"; + String output = "Bytes 2 Var"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "linear2db"; + output = "Linear 2 Db"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "vector3"; + output = "Vector 3"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "sha256"; + output = "Sha 256"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "2db"; + output = "2 Db"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "PascalCase"; + output = "Pascal Case"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "PascalPascalCase"; + output = "Pascal Pascal Case"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "snake_case"; + output = "Snake Case"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "snake_snake_case"; + output = "Snake Snake Case"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "sha256sum"; + output = "Sha 256 Sum"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "cat2dog"; + output = "Cat 2 Dog"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "function(name)"; + output = "Function(name)"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls (existing incorrect behavior): %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "snake_case_function(snake_case_arg)"; + output = "Snake Case Function(snake Case Arg)"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls (existing incorrect behavior): %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); + + input = "snake_case_function( snake_case_arg )"; + output = "Snake Case Function( Snake Case Arg )"; + success = (input.capitalize() == output); + state = state && success; + OS::get_singleton()->print("Capitalize %ls: %ls, %s\n", input.c_str(), output.c_str(), success ? "OK" : "FAIL"); return state; }; @@ -887,6 +977,7 @@ TestFunc test_funcs[] = { test_27, test_28, test_29, + test_30, 0 }; diff --git a/methods.py b/methods.py index 3add9b1f18..f8fc6c64ef 100644 --- a/methods.py +++ b/methods.py @@ -6,7 +6,7 @@ import glob import string import datetime import subprocess -from compat import iteritems, isbasestring +from compat import iteritems, isbasestring, decode_utf8 def add_source_files(self, sources, filetype, lib_env=None, shared=False): @@ -22,6 +22,10 @@ def add_source_files(self, sources, filetype, lib_env=None, shared=False): def disable_warnings(self): # 'self' is the environment if self.msvc: + # We have to remove existing warning level defines before appending /w, + # otherwise we get: "warning D9025 : overriding '/W3' with '/w'" + warn_flags = ['/Wall', '/W4', '/W3', '/W2', '/W1', '/WX'] + self['CCFLAGS'] = [x for x in self['CCFLAGS'] if not x in warn_flags] self.Append(CCFLAGS=['/w']) else: self.Append(CCFLAGS=['-w']) @@ -326,7 +330,7 @@ def split_lib(self, libname, src_list = None, env_lib = None): list = [] lib_list = [] - if src_list == None: + if src_list is None: src_list = getattr(env, libname + "_sources") if type(env_lib) == type(None): @@ -587,7 +591,7 @@ def generate_vs_project(env, num_jobs): release_debug_targets = ['bin\\godot.windows.opt.tools.32.exe'] + ['bin\\godot.windows.opt.tools.64.exe'] targets = debug_targets + release_targets + release_debug_targets if not env.get('MSVS'): - env['MSVS']['PROJECTSUFFIX'] = '.vcxproj' + env['MSVS']['PROJECTSUFFIX'] = '.vcxproj' env['MSVS']['SOLUTIONSUFFIX'] = '.sln' env.MSVSProject( target=['#godot' + env['MSVSPROJECTSUFFIX']], @@ -624,3 +628,27 @@ def CommandNoCache(env, target, sources, command, **args): result = env.Command(target, sources, command, **args) env.NoCache(result) return result + +def detect_darwin_sdk_path(platform, env): + sdk_name = '' + if platform == 'osx': + sdk_name = 'macosx' + var_name = 'MACOS_SDK_PATH' + elif platform == 'iphone': + sdk_name = 'iphoneos' + var_name = 'IPHONESDK' + elif platform == 'iphonesimulator': + sdk_name = 'iphonesimulator' + var_name = 'IPHONESDK' + else: + raise Exception("Invalid platform argument passed to detect_darwin_sdk_path") + + if not env[var_name]: + try: + sdk_path = decode_utf8(subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip()) + if sdk_path: + env[var_name] = sdk_path + except (subprocess.CalledProcessError, OSError) as e: + print("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name)) + raise + diff --git a/misc/dist/document_icons/gdscript.svg b/misc/dist/document_icons/gdscript.svg new file mode 100644 index 0000000000..ec65eb098a --- /dev/null +++ b/misc/dist/document_icons/gdscript.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="207.666" y="878.644" font-weight="800" font-size="16" font-family="Montserrat" letter-spacing="0" word-spacing="0" fill="#333f67"><tspan x="207.666" y="878.644" font-size="112">GDSCRIPT</tspan></text><path d="M481.818 300.713l-17.037 68.149a150.92 150.92 0 0 0-20.81 8.43l-60.015-36.021-42.683 42.683 36.079 60.19a150.92 150.92 0 0 0-8.608 20.693l-68.031 16.978v60.368l68.149 17.037a150.92 150.92 0 0 0 8.43 20.752l-36.021 60.072 42.683 42.683 60.19-36.079a150.92 150.92 0 0 0 20.693 8.608l16.978 68.031h60.368l17.037-68.149a150.92 150.92 0 0 0 20.752-8.43l60.072 36.021 42.683-42.683-36.079-60.19a150.92 150.92 0 0 0 8.608-20.693l68.031-16.978v-60.368l-68.149-17.037a150.92 150.92 0 0 0-8.43-20.752l36.021-60.072-42.683-42.683-60.19 36.079a150.92 150.92 0 0 0-20.693-8.608l-16.978-68.031h-60.368zm30.184 150.92A60.368 60.368 0 0 1 572.37 512a60.368 60.368 0 0 1-60.368 60.368A60.368 60.368 0 0 1 451.634 512a60.368 60.368 0 0 1 60.368-60.368z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript_extra_small.svg b/misc/dist/document_icons/gdscript_extra_small.svg new file mode 100644 index 0000000000..1c3545ef9d --- /dev/null +++ b/misc/dist/document_icons/gdscript_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M7.39 4.721l-.346 1.38a3.056 3.056 0 0 0-.421.171l-1.216-.73-.864.865.73 1.219a3.056 3.056 0 0 0-.174.419l-1.377.344V9.61l1.38.345a3.056 3.056 0 0 0 .17.42l-.729 1.217.864.864 1.22-.73a3.056 3.056 0 0 0 .418.174l.344 1.377h1.222l.345-1.38a3.056 3.056 0 0 0 .42-.17l1.217.73.864-.865-.73-1.219a3.056 3.056 0 0 0 .174-.42l1.378-.343V8.39l-1.38-.345a3.056 3.056 0 0 0-.17-.42l.729-1.217-.865-.864-1.219.73a3.056 3.056 0 0 0-.419-.174L8.611 4.72H7.39zM8 7.777A1.222 1.222 0 0 1 9.223 9 1.222 1.222 0 0 1 8 10.222 1.222 1.222 0 0 1 6.778 9 1.222 1.222 0 0 1 8 7.777z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript_small.svg b/misc/dist/document_icons/gdscript_small.svg new file mode 100644 index 0000000000..468f4243a2 --- /dev/null +++ b/misc/dist/document_icons/gdscript_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.057 11.397l-.532 2.13a4.716 4.716 0 0 0-.65.263l-1.876-1.126-1.334 1.334 1.128 1.881a4.716 4.716 0 0 0-.27.647l-2.125.53v1.887l2.13.532a4.716 4.716 0 0 0 .263.649L10.665 22 12 23.335l1.881-1.127a4.716 4.716 0 0 0 .647.269l.53 2.125h1.887l.532-2.13a4.716 4.716 0 0 0 .649-.263l1.877 1.126 1.334-1.334-1.128-1.88a4.716 4.716 0 0 0 .27-.647l2.125-.531v-1.886l-2.13-.533a4.716 4.716 0 0 0-.263-.648l1.126-1.878-1.334-1.333-1.881 1.127a4.716 4.716 0 0 0-.647-.269l-.53-2.126h-1.887zm.944 4.716A1.887 1.887 0 0 1 17.887 18a1.887 1.887 0 0 1-1.886 1.886A1.887 1.887 0 0 1 14.114 18a1.887 1.887 0 0 1 1.887-1.887z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project.svg b/misc/dist/document_icons/project.svg new file mode 100644 index 0000000000..aa9b936f27 --- /dev/null +++ b/misc/dist/document_icons/project.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025M161.89 49.15H464c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="M712.572 590.17s-.666-4.089-1.056-4.052l-74.179 7.157a12.056 12.056 0 0 0-10.9 11.191l-2.038 29.21-57.387 4.094-3.905-26.472c-.868-5.888-6.01-10.327-11.961-10.327h-78.292c-5.95 0-11.09 4.439-11.96 10.327l-3.906 26.472-57.387-4.095-2.038-29.208a12.057 12.057 0 0 0-10.901-11.194l-74.214-7.155c-.384-.037-.665 4.056-1.049 4.056l-.1 16.052 62.853 10.136 2.059 29.47c.416 5.965 5.23 10.788 11.2 11.217l79.035 5.638c.299.021.594.033.89.033 5.94 0 11.072-4.44 11.941-10.329l4.017-27.237h57.414l4.017 27.237c.867 5.886 6.006 10.326 11.953 10.326.292 0 .583-.009.868-.03l79.046-5.638c5.967-.428 10.783-5.252 11.2-11.218l2.056-29.469 62.826-10.18z" fill="#fff"/><path d="M311.398 469.127v121.042c.221.003.443.01.662.031l74.207 7.155a7.99 7.99 0 0 1 7.204 7.4l2.289 32.756 64.731 4.619 4.46-30.234a7.99 7.99 0 0 1 7.904-6.824h78.292a7.99 7.99 0 0 1 7.904 6.824l4.458 30.234 64.733-4.619 2.287-32.757a7.993 7.993 0 0 1 7.203-7.4l74.178-7.154c.22-.02.44-.028.66-.031v-9.658l.032-.01V469.128h.275c9.83-12.547 18.926-25.768 27.65-39.874-11.586-19.722-25.78-37.347-40.954-53.677-14.073 7.083-27.74 15.108-40.65 23.647-6.46-6.421-13.736-11.674-20.883-17.164-7.022-5.64-14.936-9.775-22.44-14.593 2.234-16.641 3.339-33.024 3.783-50.122-19.366-9.747-40.017-16.209-60.905-20.85-8.34 14.017-15.967 29.196-22.61 44.035-7.876-1.316-15.79-1.804-23.713-1.898v-.013c-.055 0-.107.013-.154.013-.05 0-.1-.013-.15-.013v.013c-7.937.095-15.845.582-23.724 1.898-6.638-14.84-14.261-30.018-22.613-44.035-20.879 4.641-41.532 11.104-60.895 20.85.442 17.098 1.548 33.48 3.788 50.122-7.52 4.818-15.423 8.953-22.447 14.592-7.137 5.491-14.425 10.745-20.887 17.165-12.91-8.539-26.573-16.564-40.65-23.646-15.173 16.329-29.36 33.953-40.95 53.676 8.72 14.106 17.823 27.327 27.65 39.874z" fill="#478cbf"/><path d="M646 612.615l-2.3 32.93a7.992 7.992 0 0 1-7.402 7.413l-79.044 5.64a7.991 7.991 0 0 1-8.474-6.806l-4.531-30.74h-64.496l-4.533 30.74c-.608 4.137-4.308 7.112-8.474 6.806l-79.043-5.64a7.992 7.992 0 0 1-7.402-7.413l-2.3-32.931-66.726-6.434c.032 7.173.124 15.028.124 16.592 0 70.472 89.397 104.344 200.465 104.734h.273c111.07-.39 200.435-34.262 200.435-104.734 0-1.592.096-9.416.129-16.592z" fill="#478cbf"/><path d="M451.527 518.261c0 24.71-20.02 44.725-44.72 44.725-24.688 0-44.714-20.016-44.714-44.725 0-24.691 20.026-44.697 44.713-44.697 24.7 0 44.72 20.006 44.72 44.697" fill="#fff"/><path d="M440.766 520.915c0 16.388-13.283 29.671-29.684 29.671-16.393 0-29.684-13.283-29.684-29.671 0-16.39 13.29-29.685 29.684-29.685 16.401 0 29.684 13.295 29.684 29.685" fill="#414042"/><path d="M511.997 567.054c-7.951 0-14.394-5.86-14.394-13.081v-41.17c0-7.216 6.444-13.08 14.394-13.08s14.408 5.864 14.408 13.08v41.17c0 7.222-6.458 13.081-14.408 13.081m60.477-48.793c0 24.71 20.02 44.725 44.724 44.725 24.686 0 44.71-20.016 44.71-44.725 0-24.691-20.024-44.697-44.71-44.697-24.704 0-44.724 20.006-44.724 44.697" fill="#fff"/><path d="M583.238 520.915c0 16.388 13.279 29.671 29.668 29.671 16.405 0 29.683-13.283 29.683-29.671 0-16.39-13.278-29.685-29.684-29.685-16.388 0-29.668 13.295-29.668 29.685" fill="#414042"/></g><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="234.416" y="878.644" font-weight="800" font-size="16" font-family="Montserrat" letter-spacing="0" word-spacing="0" fill="#333f67"><tspan x="234.416" y="878.644" font-size="112">PROJECT</tspan></text></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project_extra_small.svg b/misc/dist/document_icons/project_extra_small.svg new file mode 100644 index 0000000000..5482d27033 --- /dev/null +++ b/misc/dist/document_icons/project_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="M12.062 10.583s-.014-.083-.022-.082l-1.502.145a.244.244 0 0 0-.22.226l-.042.592-1.162.083-.079-.536a.246.246 0 0 0-.242-.21H7.208c-.12 0-.225.09-.243.21l-.079.536-1.162-.083-.041-.592a.244.244 0 0 0-.22-.226L3.958 10.5c-.007-.001-.013.082-.02.082l-.003.325 1.273.205.042.597c.008.12.105.218.226.227l1.6.114h.019c.12 0 .224-.089.242-.208l.081-.552h1.163l.08.552a.246.246 0 0 0 .26.208l1.601-.114a.246.246 0 0 0 .227-.227l.042-.597 1.272-.206z" fill="#fff"/><path d="M3.938 8.132v2.45l.013.001 1.503.145a.162.162 0 0 1 .146.15l.046.663 1.311.094.09-.612a.162.162 0 0 1 .16-.138h1.586a.162.162 0 0 1 .16.138l.09.612 1.311-.094.046-.663a.162.162 0 0 1 .146-.15l1.502-.145h.014V8.132h.006c.2-.254.383-.522.56-.808a6.285 6.285 0 0 0-.83-1.087 8.105 8.105 0 0 0-.823.48c-.13-.13-.278-.237-.422-.348-.143-.115-.303-.198-.455-.296a9.38 9.38 0 0 0 .077-1.015 5.275 5.275 0 0 0-1.234-.422 8.781 8.781 0 0 0-.457.892 3.13 3.13 0 0 0-.48-.039H8h-.003c-.16.002-.32.012-.48.039a8.71 8.71 0 0 0-.458-.892 5.276 5.276 0 0 0-1.233.422c.009.346.031.678.076 1.015-.152.098-.312.181-.454.296-.145.11-.292.217-.423.347a8.093 8.093 0 0 0-.823-.479c-.307.331-.595.688-.83 1.087.177.286.361.554.56.808z" fill="#478cbf"/><path d="M10.714 11.037l-.047.667a.162.162 0 0 1-.15.15l-1.6.114a.162.162 0 0 1-.172-.137l-.092-.623H7.347l-.092.623a.162.162 0 0 1-.171.137l-1.6-.114a.162.162 0 0 1-.15-.15l-.047-.667-1.351-.13.002.336c0 1.427 1.81 2.113 4.06 2.12h.005c2.25-.007 4.059-.693 4.059-2.12l.002-.336z" fill="#478cbf"/><path d="M6.776 9.127a.905.905 0 1 1-1.811 0 .905.905 0 0 1 1.81 0" fill="#fff"/><path d="M6.558 9.18a.6.6 0 1 1-1.202 0 .6.6 0 0 1 1.202 0" fill="#414042"/><path d="M8 10.115c-.16 0-.291-.119-.291-.265v-.834c0-.146.13-.265.291-.265.161 0 .292.119.292.265v.834c0 .146-.13.265-.292.265m1.225-.988a.906.906 0 1 0 1.81 0 .906.906 0 0 0-1.81 0" fill="#fff"/><path d="M9.443 9.18a.6.6 0 1 0 1.201 0 .6.6 0 0 0-1.201 0" fill="#414042"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project_small.svg b/misc/dist/document_icons/project_small.svg new file mode 100644 index 0000000000..76f501b80d --- /dev/null +++ b/misc/dist/document_icons/project_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="M22.268 20.443s-.02-.128-.033-.127l-2.318.224a.377.377 0 0 0-.34.35l-.064.912-1.793.128-.122-.827a.38.38 0 0 0-.374-.323h-2.447a.38.38 0 0 0-.374.323l-.122.827-1.793-.128-.064-.913a.377.377 0 0 0-.34-.35l-2.32-.223c-.011-.001-.02.127-.032.127l-.003.501 1.964.317.064.921a.38.38 0 0 0 .35.35l2.47.177h.028a.38.38 0 0 0 .373-.322l.125-.851h1.795l.125.851a.38.38 0 0 0 .4.322l2.471-.176a.38.38 0 0 0 .35-.351l.064-.92 1.964-.32z" fill="#fff"/><path d="M9.732 16.66v3.783h.02l2.32.224a.25.25 0 0 1 .224.231l.072 1.024 2.023.144.14-.945a.25.25 0 0 1 .246-.213h2.447a.25.25 0 0 1 .247.213l.14.945 2.022-.144.072-1.024a.25.25 0 0 1 .225-.23l2.318-.225h.02v-.302h.001V16.66h.009c.307-.392.591-.805.864-1.246a9.7 9.7 0 0 0-1.28-1.677c-.44.22-.867.472-1.27.738-.202-.2-.43-.364-.653-.536-.22-.176-.466-.305-.701-.456.07-.52.104-1.032.118-1.566a8.14 8.14 0 0 0-1.903-.652c-.26.438-.499.913-.707 1.376a4.832 4.832 0 0 0-.74-.059h-.01a4.837 4.837 0 0 0-.742.06 13.44 13.44 0 0 0-.706-1.377 8.142 8.142 0 0 0-1.903.652c.014.534.048 1.046.118 1.566-.235.15-.482.28-.701.456-.223.172-.451.336-.653.536-.403-.266-.83-.517-1.27-.738a9.704 9.704 0 0 0-1.28 1.677c.273.44.557.854.864 1.246z" fill="#478cbf"/><path d="M20.188 21.144l-.072 1.029a.25.25 0 0 1-.231.232l-2.47.176a.25.25 0 0 1-.265-.213l-.142-.96h-2.015l-.142.96a.25.25 0 0 1-.265.213l-2.47-.176a.25.25 0 0 1-.231-.232l-.072-1.03-2.085-.2c0 .224.004.47.004.518 0 2.203 2.793 3.261 6.264 3.273h.009c3.47-.012 6.263-1.07 6.263-3.273l.004-.518z" fill="#478cbf"/><path d="M14.11 18.195a1.397 1.397 0 1 1-2.794.001 1.397 1.397 0 0 1 2.795 0" fill="#fff"/><path d="M13.774 18.278a.927.927 0 1 1-1.854 0 .927.927 0 0 1 1.854 0" fill="#414042"/><path d="M16 19.72c-.248 0-.45-.183-.45-.409v-1.286c0-.226.202-.409.45-.409.249 0 .45.183.45.409v1.286c0 .226-.201.41-.45.41m1.89-1.526a1.397 1.397 0 1 0 2.795 0 1.397 1.397 0 0 0-2.795 0" fill="#fff"/><path d="M18.227 18.278a.927.927 0 1 0 1.854 0 .927.927 0 0 0-1.854 0" fill="#414042"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource.svg b/misc/dist/document_icons/resource.svg new file mode 100644 index 0000000000..2555e8f5c0 --- /dev/null +++ b/misc/dist/document_icons/resource.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="183.282" y="878.644" font-weight="800" font-size="16" letter-spacing="0" word-spacing="0" font-family="Montserrat" fill="#333f67"><tspan x="183.282" y="878.644" font-size="112">RESOURCE</tspan></text><path style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;isolation:auto;mix-blend-mode:normal" d="M510.825 290.281a31.683 31.683 0 0 0-12.994 3.28L307.75 388.6a31.683 31.683 0 0 0-17.51 28.339v190.08a31.683 31.683 0 0 0 17.51 28.338l190.08 95.04a31.683 31.683 0 0 0 28.338 0l190.08-95.04a31.683 31.683 0 0 0 17.51-28.338V416.94a31.683 31.683 0 0 0-17.51-28.34l-190.08-95.04a31.683 31.683 0 0 0-15.345-3.279zM512 357.354l119.234 59.587-43.747 21.904-119.234-59.647L512 357.356zm-158.4 110.88l126.72 63.36v119.234l-126.72-63.36zm316.8 0v119.234l-126.72 63.36V531.594z" color="#000" white-space="normal" fill-rule="evenodd" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource_extra_small.svg b/misc/dist/document_icons/resource_extra_small.svg new file mode 100644 index 0000000000..4ba41b0073 --- /dev/null +++ b/misc/dist/document_icons/resource_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;isolation:auto;mix-blend-mode:normal" d="M7.976 4.51a.642.642 0 0 0-.263.067L3.864 6.5a.642.642 0 0 0-.354.574v3.849a.642.642 0 0 0 .354.574l3.85 1.924a.642.642 0 0 0 .573 0l3.85-1.924a.642.642 0 0 0 .354-.574v-3.85a.642.642 0 0 0-.355-.573L8.287 4.576a.642.642 0 0 0-.31-.066zM8 5.868l2.415 1.207-.886.444L7.114 6.31 8 5.868zM4.793 8.114l2.566 1.283v2.414l-2.566-1.283zm6.415 0v2.414l-2.566 1.283V9.397z" color="#000" white-space="normal" fill="#478cbf" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource_small.svg b/misc/dist/document_icons/resource_small.svg new file mode 100644 index 0000000000..502a4c6c36 --- /dev/null +++ b/misc/dist/document_icons/resource_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;isolation:auto;mix-blend-mode:normal" d="M15.964 11.071a.99.99 0 0 0-.406.103l-5.94 2.97a.99.99 0 0 0-.547.885v5.94a.99.99 0 0 0 .547.886l5.94 2.97a.99.99 0 0 0 .885 0l5.94-2.97a.99.99 0 0 0 .547-.886v-5.94a.99.99 0 0 0-.547-.885l-5.94-2.97a.99.99 0 0 0-.48-.103zM16 13.167l3.726 1.862-1.367.685-3.727-1.864 1.368-.683zm-4.95 3.465l3.96 1.98v3.726l-3.96-1.98zm9.9 0v3.726l-3.96 1.98v-3.726z" color="#000" white-space="normal" fill="#478cbf" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene.svg b/misc/dist/document_icons/scene.svg new file mode 100644 index 0000000000..a4e1ca809e --- /dev/null +++ b/misc/dist/document_icons/scene.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025M161.89 49.15H464c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="315.088" y="878.644" font-weight="800" font-size="16" font-family="Montserrat" letter-spacing="0" word-spacing="0" fill="#333f67"><tspan x="315.088" y="878.644" font-size="112">SCENE</tspan></text><path d="M714.504 315.805l-67.735 9.904 24.7 57.361 51.76-7.546zm-127.458 18.57l-59.719 8.725 24.702 57.419 59.719-8.725zm-119.498 17.45l-59.719 8.725 24.701 57.419 59.72-8.725zm-119.438 17.45l-51.76 7.546 8.725 59.719 67.736-9.904zm-43.036 97.449v181.104c0 33.34 27.027 60.368 60.368 60.368H727.65V466.724z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene_extra_small.svg b/misc/dist/document_icons/scene_extra_small.svg new file mode 100644 index 0000000000..155aa843b2 --- /dev/null +++ b/misc/dist/document_icons/scene_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M12.101 5.027l-1.372.2.5 1.162 1.049-.153zm-2.581.376l-1.21.177.5 1.162 1.21-.176zm-2.42.353l-1.21.177.501 1.163 1.21-.177zm-2.419.354l-1.048.152.177 1.21 1.372-.2zM3.81 8.083v3.667c0 .676.547 1.223 1.222 1.223h7.335v-4.89z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene_small.svg b/misc/dist/document_icons/scene_small.svg new file mode 100644 index 0000000000..d36d42f458 --- /dev/null +++ b/misc/dist/document_icons/scene_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M22.329 11.869l-2.117.31.772 1.792 1.617-.236zm-3.983.58l-1.867.273.772 1.794 1.867-.273zm-3.735.545l-1.866.273.772 1.794 1.866-.272zm-3.732.546l-1.618.235.273 1.867 2.117-.31zm-1.345 3.045v5.66c0 1.041.845 1.886 1.887 1.886H22.74v-7.546z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/linux/godot.6 b/misc/dist/linux/godot.6 index 50cb420e4e..43ca4e9d10 100644 --- a/misc/dist/linux/godot.6 +++ b/misc/dist/linux/godot.6 @@ -149,7 +149,7 @@ Build the scripting solutions (e.g. for C# projects). Generate JSON dump of the Godot API for GDNative bindings. .TP \fB\-\-test\fR <test> -Run a unit test ('string', 'math', 'physics', 'physics_2d', 'render', 'oa_hash_map', 'gui', 'io', 'shaderlang', 'gd_tokenizer', 'gd_parser', 'gd_compiler', 'gd_bytecode', 'image', 'ordered_hash_map'). +Run a unit test ('string', 'math', 'physics', 'physics_2d', 'render', 'oa_hash_map', 'gui', 'shaderlang', 'gd_tokenizer', 'gd_parser', 'gd_compiler', 'gd_bytecode', 'image', 'ordered_hash_map'). .SH FILES XDG_DATA_CONFIG/godot/ or ~/.config/godot/ .RS diff --git a/misc/dist/linux/org.godotengine.Godot.appdata.xml b/misc/dist/linux/org.godotengine.Godot.appdata.xml index 9f3f9e34af..c11317cd35 100644 --- a/misc/dist/linux/org.godotengine.Godot.appdata.xml +++ b/misc/dist/linux/org.godotengine.Godot.appdata.xml @@ -27,8 +27,8 @@ </screenshots> <url type="homepage">https://godotengine.org</url> <url type="bugtracker">https://github.com/godotengine/godot/issues</url> - <url type="faq">http://docs.godotengine.org/en/latest/about/faq.html</url> - <url type="help">http://docs.godotengine.org</url> + <url type="faq">https://docs.godotengine.org/en/latest/about/faq.html</url> + <url type="help">https://docs.godotengine.org</url> <url type="donation">https://godotengine.org/donate</url> <url type="translate">https://hosted.weblate.org/projects/godot-engine/godot</url> <developer_name>The Godot Engine Community</developer_name> diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist index 828a40206d..a001fdf9d2 100755 --- a/misc/dist/osx_tools.app/Contents/Info.plist +++ b/misc/dist/osx_tools.app/Contents/Info.plist @@ -38,31 +38,125 @@ <key>CFBundleDocumentTypes</key> <array> <dict> - <key>CFBundleTypeExtensions</key> - <array> - <string>scn</string> - <string>SCN</string> - </array> - <key>CFBundleTypeIconFile</key> - <string>Godot.icns</string> - <key>CFBundleTypeMIMETypes</key> + <key>CFBundleTypeRole</key> + <string>Editor</string> + <key>LSItemContentTypes</key> <array> - <string>scene/x-scn</string> + <string>public.tscn</string> </array> - <key>CFBundleTypeName</key> - <string>Godot Scene</string> - <key>CFBundleTypeOSTypes</key> + <key>NSExportableTypes</key> <array> - <string>SCN </string> + <string>public.tscn</string> </array> + </dict> + <dict> <key>CFBundleTypeRole</key> <string>Editor</string> - <key>LSIsAppleDefaultForType</key> - <true/> <key>LSItemContentTypes</key> <array> - <string>org.godotengine.scn</string> + <string>public.godot</string> + </array> + <key>NSExportableTypes</key> + <array> + <string>public.godot</string> + </array> + </dict> + </array> + <key>UTExportedTypeDeclarations</key> + <array> + <dict> + <key>UTTypeIdentifier</key> + <string>public.tscn</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Scene</string> + <key>UTTypeIconFile</key> + <string>Scene.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.data</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>scn</string> + <string>tscn</string> + </array> + <key>public.mime-type</key> + <string>application/x-godot-scene</string> + </dict> + </dict> + <dict> + <key>UTTypeIdentifier</key> + <string>public.gd</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Script</string> + <key>UTTypeIconFile</key> + <string>GDScript.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.data</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>gd</string> + </array> + <key>public.mime-type</key> + <string>text/x-gdscript</string> + </dict> + </dict> + <dict> + <key>UTTypeIdentifier</key> + <string>public.res</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Resource</string> + <key>UTTypeIconFile</key> + <string>Resource.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.data</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>res</string> + <string>tres</string> + </array> + <key>public.mime-type</key> + <string>application/x-godot-resource</string> + </dict> + </dict> + <dict> + <key>UTTypeIdentifier</key> + <string>public.godot</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Project</string> + <key>UTTypeIconFile</key> + <string>Project.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.data</string> </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>godot</string> + </array> + <key>public.mime-type</key> + <string>text/x-godot-project</string> + </dict> </dict> </array> </dict> diff --git a/misc/dist/osx_tools.app/Contents/Resources/GDScript.icns b/misc/dist/osx_tools.app/Contents/Resources/GDScript.icns Binary files differnew file mode 100644 index 0000000000..b08e8df339 --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/GDScript.icns diff --git a/misc/dist/osx_tools.app/Contents/Resources/Project.icns b/misc/dist/osx_tools.app/Contents/Resources/Project.icns Binary files differnew file mode 100644 index 0000000000..10e31528e4 --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Project.icns diff --git a/misc/dist/osx_tools.app/Contents/Resources/Resource.icns b/misc/dist/osx_tools.app/Contents/Resources/Resource.icns Binary files differnew file mode 100644 index 0000000000..9648cb616e --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Resource.icns diff --git a/misc/dist/osx_tools.app/Contents/Resources/Scene.icns b/misc/dist/osx_tools.app/Contents/Resources/Scene.icns Binary files differnew file mode 100644 index 0000000000..c8c3dee07e --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Scene.icns diff --git a/misc/dist/uwp_template/Assets/SplashScreen.scale-100.png b/misc/dist/uwp_template/Assets/SplashScreen.scale-100.png Binary files differindex 0c27fda8e7..a4dd3d7175 100644 --- a/misc/dist/uwp_template/Assets/SplashScreen.scale-100.png +++ b/misc/dist/uwp_template/Assets/SplashScreen.scale-100.png diff --git a/misc/travis/android-tools-linux.sh b/misc/travis/android-tools-linux.sh index 04fb2eee21..830820b10b 100755 --- a/misc/travis/android-tools-linux.sh +++ b/misc/travis/android-tools-linux.sh @@ -17,19 +17,19 @@ cd $GODOT_BUILD_TOOLS_PATH ANDROID_BASE_URL=http://dl.google.com/android/repository -ANDROID_SDK_RELEASE=3859397 +ANDROID_SDK_RELEASE=4333796 ANDROID_SDK_DIR=android-sdk ANDROID_SDK_FILENAME=sdk-tools-linux-$ANDROID_SDK_RELEASE.zip ANDROID_SDK_URL=$ANDROID_BASE_URL/$ANDROID_SDK_FILENAME ANDROID_SDK_PATH=$GODOT_BUILD_TOOLS_PATH/$ANDROID_SDK_DIR -ANDROID_SDK_SHA256=444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0 +ANDROID_SDK_SHA256=92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 -ANDROID_NDK_RELEASE=r15c +ANDROID_NDK_RELEASE=r18 ANDROID_NDK_DIR=android-ndk ANDROID_NDK_FILENAME=android-ndk-$ANDROID_NDK_RELEASE-linux-x86_64.zip ANDROID_NDK_URL=$ANDROID_BASE_URL/$ANDROID_NDK_FILENAME ANDROID_NDK_PATH=$GODOT_BUILD_TOOLS_PATH/$ANDROID_NDK_DIR -ANDROID_NDK_SHA1=0bf02d4e8b85fd770fd7b9b2cdec57f9441f27a2 +ANDROID_NDK_SHA1=2ac2e8e1ef73ed551cac3a1479bb28bd49369212 echo echo "Download and install Android development tools ..." @@ -75,7 +75,7 @@ echo "Installing: Android Tools ..." yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager --licenses > /dev/null $ANDROID_SDK_DIR/tools/bin/sdkmanager 'tools' > /dev/null $ANDROID_SDK_DIR/tools/bin/sdkmanager 'platform-tools' > /dev/null -$ANDROID_SDK_DIR/tools/bin/sdkmanager 'build-tools;26.0.2' > /dev/null +$ANDROID_SDK_DIR/tools/bin/sdkmanager 'build-tools;28.0.1' > /dev/null echo EXPORT_VAL="export ANDROID_HOME=$ANDROID_SDK_PATH" diff --git a/modules/bmp/image_loader_bmp.cpp b/modules/bmp/image_loader_bmp.cpp index 919731b52b..063508a25f 100644 --- a/modules/bmp/image_loader_bmp.cpp +++ b/modules/bmp/image_loader_bmp.cpp @@ -42,12 +42,9 @@ Error ImageLoaderBMP::convert_to_image(Ref<Image> p_image, if (err == OK) { size_t index = 0; - size_t width = - static_cast<size_t>(p_header.bmp_info_header.bmp_width < 0 ? -p_header.bmp_info_header.bmp_width : p_header.bmp_info_header.bmp_width); - size_t height = - static_cast<size_t>(p_header.bmp_info_header.bmp_height < 0 ? -p_header.bmp_info_header.bmp_height : p_header.bmp_info_header.bmp_height); - size_t bits_per_pixel = - static_cast<size_t>(p_header.bmp_info_header.bmp_bit_count); + size_t width = (size_t)p_header.bmp_info_header.bmp_width; + size_t height = (size_t)p_header.bmp_info_header.bmp_height; + size_t bits_per_pixel = (size_t)p_header.bmp_info_header.bmp_bit_count; if (p_header.bmp_info_header.bmp_compression != 0) { err = FAILED; diff --git a/modules/bullet/area_bullet.cpp b/modules/bullet/area_bullet.cpp index a3ba3aa0bf..a0486443c2 100644 --- a/modules/bullet/area_bullet.cpp +++ b/modules/bullet/area_bullet.cpp @@ -58,7 +58,7 @@ AreaBullet::AreaBullet() : isScratched(false) { btGhost = bulletnew(btGhostObject); - btGhost->setCollisionShape(BulletPhysicsServer::get_empty_shape()); + reload_shapes(); setupBulletCollisionObject(btGhost); /// Collision objects with a callback still have collision response with dynamic rigid bodies. /// In order to use collision objects as trigger, you have to disable the collision response. @@ -166,11 +166,9 @@ bool AreaBullet::is_monitoring() const { return get_godot_object_flags() & GOF_IS_MONITORING_AREA; } -void AreaBullet::main_shape_resetted() { - if (get_main_shape()) - btGhost->setCollisionShape(get_main_shape()); - else - btGhost->setCollisionShape(BulletPhysicsServer::get_empty_shape()); +void AreaBullet::main_shape_changed() { + CRASH_COND(!get_main_shape()) + btGhost->setCollisionShape(get_main_shape()); } void AreaBullet::reload_body() { diff --git a/modules/bullet/area_bullet.h b/modules/bullet/area_bullet.h index a6bf73906c..1c5962cfe3 100644 --- a/modules/bullet/area_bullet.h +++ b/modules/bullet/area_bullet.h @@ -142,7 +142,7 @@ public: _FORCE_INLINE_ void set_spOv_priority(int p_priority) { spOv_priority = p_priority; } _FORCE_INLINE_ int get_spOv_priority() { return spOv_priority; } - virtual void main_shape_resetted(); + virtual void main_shape_changed(); virtual void reload_body(); virtual void set_space(SpaceBullet *p_space); @@ -157,6 +157,7 @@ public: virtual void on_collision_filters_change(); virtual void on_collision_checker_start() {} + virtual void on_collision_checker_end() { isTransformChanged = false; } void add_overlap(CollisionObjectBullet *p_otherObject); void put_overlap_as_exit(int p_index); diff --git a/modules/bullet/bullet_physics_server.cpp b/modules/bullet/bullet_physics_server.cpp index 53a38967c3..7bc731e75e 100644 --- a/modules/bullet/bullet_physics_server.cpp +++ b/modules/bullet/bullet_physics_server.cpp @@ -74,12 +74,6 @@ body->get_space()->add_constraint(joint, joint->is_disabled_collisions_between_bodies()); // <--------------- Joint creation asserts -btEmptyShape *BulletPhysicsServer::emptyShape(ShapeBullet::create_shape_empty()); - -btEmptyShape *BulletPhysicsServer::get_empty_shape() { - return emptyShape; -} - void BulletPhysicsServer::_bind_methods() { //ClassDB::bind_method(D_METHOD("DoTest"), &BulletPhysicsServer::DoTest); } @@ -89,9 +83,7 @@ BulletPhysicsServer::BulletPhysicsServer() : active(true), active_spaces_count(0) {} -BulletPhysicsServer::~BulletPhysicsServer() { - bulletdelete(emptyShape); -} +BulletPhysicsServer::~BulletPhysicsServer() {} RID BulletPhysicsServer::shape_create(ShapeType p_shape) { ShapeBullet *shape = NULL; @@ -338,7 +330,7 @@ Transform BulletPhysicsServer::area_get_shape_transform(RID p_area, int p_shape_ void BulletPhysicsServer::area_remove_shape(RID p_area, int p_shape_idx) { AreaBullet *area = area_owner.get(p_area); ERR_FAIL_COND(!area); - return area->remove_shape(p_shape_idx); + return area->remove_shape_full(p_shape_idx); } void BulletPhysicsServer::area_clear_shapes(RID p_area) { @@ -346,7 +338,7 @@ void BulletPhysicsServer::area_clear_shapes(RID p_area) { ERR_FAIL_COND(!area); for (int i = area->get_shape_count(); 0 < i; --i) - area->remove_shape(0); + area->remove_shape_full(0); } void BulletPhysicsServer::area_set_shape_disabled(RID p_area, int p_shape_idx, bool p_disabled) { @@ -567,7 +559,7 @@ void BulletPhysicsServer::body_remove_shape(RID p_body, int p_shape_idx) { RigidBodyBullet *body = rigid_body_owner.get(p_body); ERR_FAIL_COND(!body); - body->remove_shape(p_shape_idx); + body->remove_shape_full(p_shape_idx); } void BulletPhysicsServer::body_clear_shapes(RID p_body) { @@ -1479,6 +1471,22 @@ bool BulletPhysicsServer::generic_6dof_joint_get_flag(RID p_joint, Vector3::Axis return generic_6dof_joint->get_flag(p_axis, p_flag); } +void BulletPhysicsServer::generic_6dof_joint_set_precision(RID p_joint, int p_precision) { + JointBullet *joint = joint_owner.get(p_joint); + ERR_FAIL_COND(!joint); + ERR_FAIL_COND(joint->get_type() != JOINT_6DOF); + Generic6DOFJointBullet *generic_6dof_joint = static_cast<Generic6DOFJointBullet *>(joint); + generic_6dof_joint->set_precision(p_precision); +} + +int BulletPhysicsServer::generic_6dof_joint_get_precision(RID p_joint) { + JointBullet *joint = joint_owner.get(p_joint); + ERR_FAIL_COND_V(!joint, 0); + ERR_FAIL_COND_V(joint->get_type() != JOINT_6DOF, 0); + Generic6DOFJointBullet *generic_6dof_joint = static_cast<Generic6DOFJointBullet *>(joint); + return generic_6dof_joint->get_precision(); +} + void BulletPhysicsServer::free(RID p_rid) { if (shape_owner.owns(p_rid)) { @@ -1486,7 +1494,7 @@ void BulletPhysicsServer::free(RID p_rid) { // Notify the shape is configured for (Map<ShapeOwnerBullet *, int>::Element *element = shape->get_owners().front(); element; element = element->next()) { - static_cast<ShapeOwnerBullet *>(element->key())->remove_shape(shape); + static_cast<ShapeOwnerBullet *>(element->key())->remove_shape_full(shape); } shape_owner.free(p_rid); @@ -1497,7 +1505,7 @@ void BulletPhysicsServer::free(RID p_rid) { body->set_space(NULL); - body->remove_all_shapes(true); + body->remove_all_shapes(true, true); rigid_body_owner.free(p_rid); bulletdelete(body); @@ -1517,7 +1525,7 @@ void BulletPhysicsServer::free(RID p_rid) { area->set_space(NULL); - area->remove_all_shapes(true); + area->remove_all_shapes(true, true); area_owner.free(p_rid); bulletdelete(area); diff --git a/modules/bullet/bullet_physics_server.h b/modules/bullet/bullet_physics_server.h index 4c52cace67..0cea3f5ba6 100644 --- a/modules/bullet/bullet_physics_server.h +++ b/modules/bullet/bullet_physics_server.h @@ -60,13 +60,6 @@ class BulletPhysicsServer : public PhysicsServer { mutable RID_Owner<SoftBodyBullet> soft_body_owner; mutable RID_Owner<JointBullet> joint_owner; -private: - /// This is used as replacement of collision shape inside a compound or main shape - static btEmptyShape *emptyShape; - -public: - static btEmptyShape *get_empty_shape(); - protected: static void _bind_methods(); @@ -382,6 +375,9 @@ public: virtual void generic_6dof_joint_set_flag(RID p_joint, Vector3::Axis p_axis, G6DOFJointAxisFlag p_flag, bool p_enable); virtual bool generic_6dof_joint_get_flag(RID p_joint, Vector3::Axis p_axis, G6DOFJointAxisFlag p_flag); + virtual void generic_6dof_joint_set_precision(RID p_joint, int precision); + virtual int generic_6dof_joint_get_precision(RID p_joint); + /* MISC */ virtual void free(RID p_rid); @@ -404,6 +400,8 @@ public: virtual void flush_queries(); virtual void finish(); + virtual bool is_flushing_queries() const { return false; } + virtual int get_process_info(ProcessInfo p_info); CollisionObjectBullet *get_collisin_object(RID p_object) const; diff --git a/modules/bullet/bullet_utilities.h b/modules/bullet/bullet_utilities.h index 029eb6691a..553c1d0384 100644 --- a/modules/bullet/bullet_utilities.h +++ b/modules/bullet/bullet_utilities.h @@ -39,7 +39,8 @@ new cl #define bulletdelete(cl) \ - delete cl; \ - cl = NULL; - + { \ + delete cl; \ + cl = NULL; \ + } #endif diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp index 61834b8e3f..441fa7c8af 100644 --- a/modules/bullet/collision_object_bullet.cpp +++ b/modules/bullet/collision_object_bullet.cpp @@ -43,8 +43,7 @@ @author AndreaCatania */ -#define enableDynamicAabbTree true -#define initialChildCapacity 1 +#define enableDynamicAabbTree false CollisionObjectBullet::ShapeWrapper::~ShapeWrapper() {} @@ -60,7 +59,10 @@ void CollisionObjectBullet::ShapeWrapper::set_transform(const btTransform &p_tra void CollisionObjectBullet::ShapeWrapper::claim_bt_shape(const btVector3 &body_scale) { if (!bt_shape) { - bt_shape = shape->create_bt_shape(scale * body_scale); + if (active) + bt_shape = shape->create_bt_shape(scale * body_scale); + else + bt_shape = ShapeBullet::create_shape_empty(); } } @@ -72,7 +74,8 @@ CollisionObjectBullet::CollisionObjectBullet(Type p_type) : bt_collision_object(NULL), body_scale(1., 1., 1.), force_shape_reset(false), - space(NULL) {} + space(NULL), + isTransformChanged(false) {} CollisionObjectBullet::~CollisionObjectBullet() { // Remove all overlapping, notify is not required since godot take care of it @@ -90,7 +93,7 @@ bool equal(real_t first, real_t second) { void CollisionObjectBullet::set_body_scale(const Vector3 &p_new_scale) { if (!equal(p_new_scale[0], body_scale[0]) || !equal(p_new_scale[1], body_scale[1]) || !equal(p_new_scale[2], body_scale[2])) { body_scale = p_new_scale; - on_body_scale_changed(); + body_scale_changed(); } } @@ -100,7 +103,7 @@ btVector3 CollisionObjectBullet::get_bt_body_scale() const { return s; } -void CollisionObjectBullet::on_body_scale_changed() { +void CollisionObjectBullet::body_scale_changed() { force_shape_reset = true; } @@ -186,49 +189,33 @@ Transform CollisionObjectBullet::get_transform() const { void CollisionObjectBullet::set_transform__bullet(const btTransform &p_global_transform) { bt_collision_object->setWorldTransform(p_global_transform); + notify_transform_changed(); } const btTransform &CollisionObjectBullet::get_transform__bullet() const { return bt_collision_object->getWorldTransform(); } +void CollisionObjectBullet::notify_transform_changed() { + isTransformChanged = true; +} + RigidCollisionObjectBullet::RigidCollisionObjectBullet(Type p_type) : CollisionObjectBullet(p_type), mainShape(NULL) { } RigidCollisionObjectBullet::~RigidCollisionObjectBullet() { - remove_all_shapes(true); + remove_all_shapes(true, true); if (mainShape && mainShape->isCompound()) { bulletdelete(mainShape); } } -/* Not used -void RigidCollisionObjectBullet::_internal_replaceShape(btCollisionShape *p_old_shape, btCollisionShape *p_new_shape) { - bool at_least_one_was_changed = false; - btTransform old_transf; - // Inverse because I need remove the shapes - // Fetch all shapes to be sure to remove all shapes - for (int i = compoundShape->getNumChildShapes() - 1; 0 <= i; --i) { - if (compoundShape->getChildShape(i) == p_old_shape) { - - old_transf = compoundShape->getChildTransform(i); - compoundShape->removeChildShapeByIndex(i); - compoundShape->addChildShape(old_transf, p_new_shape); - at_least_one_was_changed = true; - } - } - - if (at_least_one_was_changed) { - on_shapes_changed(); - } -}*/ - void RigidCollisionObjectBullet::add_shape(ShapeBullet *p_shape, const Transform &p_transform) { shapes.push_back(ShapeWrapper(p_shape, p_transform, true)); p_shape->add_owner(this); - on_shapes_changed(); + reload_shapes(); } void RigidCollisionObjectBullet::set_shape(int p_index, ShapeBullet *p_shape) { @@ -236,17 +223,31 @@ void RigidCollisionObjectBullet::set_shape(int p_index, ShapeBullet *p_shape) { shp.shape->remove_owner(this); p_shape->add_owner(this); shp.shape = p_shape; - on_shapes_changed(); + reload_shapes(); } -void RigidCollisionObjectBullet::set_shape_transform(int p_index, const Transform &p_transform) { - ERR_FAIL_INDEX(p_index, get_shape_count()); +int RigidCollisionObjectBullet::get_shape_count() const { + return shapes.size(); +} - shapes.write[p_index].set_transform(p_transform); - on_shape_changed(shapes.write[p_index].shape); +ShapeBullet *RigidCollisionObjectBullet::get_shape(int p_index) const { + return shapes[p_index].shape; } -void RigidCollisionObjectBullet::remove_shape(ShapeBullet *p_shape) { +btCollisionShape *RigidCollisionObjectBullet::get_bt_shape(int p_index) const { + return shapes[p_index].bt_shape; +} + +int RigidCollisionObjectBullet::find_shape(ShapeBullet *p_shape) const { + const int size = shapes.size(); + for (int i = 0; i < size; ++i) { + if (shapes[i].shape == p_shape) + return i; + } + return -1; +} + +void RigidCollisionObjectBullet::remove_shape_full(ShapeBullet *p_shape) { // Remove the shape, all the times it appears // Reverse order required for delete. for (int i = shapes.size() - 1; 0 <= i; --i) { @@ -255,35 +256,32 @@ void RigidCollisionObjectBullet::remove_shape(ShapeBullet *p_shape) { shapes.remove(i); } } - on_shapes_changed(); + reload_shapes(); } -void RigidCollisionObjectBullet::remove_shape(int p_index) { +void RigidCollisionObjectBullet::remove_shape_full(int p_index) { ERR_FAIL_INDEX(p_index, get_shape_count()); internal_shape_destroy(p_index); shapes.remove(p_index); - on_shapes_changed(); + reload_shapes(); } -void RigidCollisionObjectBullet::remove_all_shapes(bool p_permanentlyFromThisBody) { +void RigidCollisionObjectBullet::remove_all_shapes(bool p_permanentlyFromThisBody, bool p_force_not_reload) { // Reverse order required for delete. for (int i = shapes.size() - 1; 0 <= i; --i) { internal_shape_destroy(i, p_permanentlyFromThisBody); } shapes.clear(); - on_shapes_changed(); -} - -int RigidCollisionObjectBullet::get_shape_count() const { - return shapes.size(); + if (!p_force_not_reload) + reload_shapes(); } -ShapeBullet *RigidCollisionObjectBullet::get_shape(int p_index) const { - return shapes[p_index].shape; -} +void RigidCollisionObjectBullet::set_shape_transform(int p_index, const Transform &p_transform) { + ERR_FAIL_INDEX(p_index, get_shape_count()); -btCollisionShape *RigidCollisionObjectBullet::get_bt_shape(int p_index) const { - return shapes[p_index].bt_shape; + shapes.write[p_index].set_transform(p_transform); + // Note, enableDynamicAabbTree is false because on transform change compound is destroyed + reload_shapes(); } const btTransform &RigidCollisionObjectBullet::get_bt_shape_transform(int p_index) const { @@ -296,21 +294,31 @@ Transform RigidCollisionObjectBullet::get_shape_transform(int p_index) const { return trs; } -void RigidCollisionObjectBullet::on_shape_changed(const ShapeBullet *const p_shape) { - const int size = shapes.size(); - for (int i = 0; i < size; ++i) { - if (shapes[i].shape == p_shape) { - bulletdelete(shapes.write[i].bt_shape); - } +void RigidCollisionObjectBullet::set_shape_disabled(int p_index, bool p_disabled) { + shapes.write[p_index].active = !p_disabled; + shape_changed(p_index); +} + +bool RigidCollisionObjectBullet::is_shape_disabled(int p_index) { + return !shapes[p_index].active; +} + +void RigidCollisionObjectBullet::shape_changed(int p_shape_index) { + ShapeWrapper &shp = shapes.write[p_shape_index]; + if (shp.bt_shape == mainShape) { + mainShape = NULL; } - on_shapes_changed(); + bulletdelete(shp.bt_shape); + reload_shapes(); } -void RigidCollisionObjectBullet::on_shapes_changed() { +void RigidCollisionObjectBullet::reload_shapes() { if (mainShape && mainShape->isCompound()) { + // Destroy compound bulletdelete(mainShape); } + mainShape = NULL; ShapeWrapper *shpWrapper; @@ -325,59 +333,45 @@ void RigidCollisionObjectBullet::on_shapes_changed() { force_shape_reset = false; } - btVector3 body_scale(get_bt_body_scale()); - - if (!shape_count) - return; + const btVector3 body_scale(get_bt_body_scale()); // Try to optimize by not using compound if (1 == shape_count) { shpWrapper = &shapes.write[0]; - if (shpWrapper->active && shpWrapper->transform.getOrigin().isZero() && shpWrapper->transform.getBasis() == shpWrapper->transform.getBasis().getIdentity()) { + if (shpWrapper->transform.getOrigin().isZero() && shpWrapper->transform.getBasis() == shpWrapper->transform.getBasis().getIdentity()) { shpWrapper->claim_bt_shape(body_scale); mainShape = shpWrapper->bt_shape; - main_shape_resetted(); + main_shape_changed(); return; } } - btCompoundShape *compoundShape = bulletnew(btCompoundShape(enableDynamicAabbTree, initialChildCapacity)); + // Optimization not possible use a compound shape + btCompoundShape *compoundShape = bulletnew(btCompoundShape(enableDynamicAabbTree, shape_count)); - // Insert all shapes into compound for (int i(0); i < shape_count; ++i) { shpWrapper = &shapes.write[i]; - if (shpWrapper->active) { - shpWrapper->claim_bt_shape(body_scale); - - btTransform scaled_shape_transform(shpWrapper->transform); - scaled_shape_transform.getOrigin() *= body_scale; - compoundShape->addChildShape(scaled_shape_transform, shpWrapper->bt_shape); - } else { - compoundShape->addChildShape(btTransform(), BulletPhysicsServer::get_empty_shape()); - } + shpWrapper->claim_bt_shape(body_scale); + btTransform scaled_shape_transform(shpWrapper->transform); + scaled_shape_transform.getOrigin() *= body_scale; + compoundShape->addChildShape(scaled_shape_transform, shpWrapper->bt_shape); } compoundShape->recalculateLocalAabb(); mainShape = compoundShape; - main_shape_resetted(); -} - -void RigidCollisionObjectBullet::set_shape_disabled(int p_index, bool p_disabled) { - shapes.write[p_index].active = !p_disabled; - on_shapes_changed(); -} - -bool RigidCollisionObjectBullet::is_shape_disabled(int p_index) { - return !shapes[p_index].active; + main_shape_changed(); } -void RigidCollisionObjectBullet::on_body_scale_changed() { - CollisionObjectBullet::on_body_scale_changed(); - on_shapes_changed(); +void RigidCollisionObjectBullet::body_scale_changed() { + CollisionObjectBullet::body_scale_changed(); + reload_shapes(); } void RigidCollisionObjectBullet::internal_shape_destroy(int p_index, bool p_permanentlyFromThisBody) { ShapeWrapper &shp = shapes.write[p_index]; shp.shape->remove_owner(this, p_permanentlyFromThisBody); + if (shp.bt_shape == mainShape) { + mainShape = NULL; + } bulletdelete(shp.bt_shape); } diff --git a/modules/bullet/collision_object_bullet.h b/modules/bullet/collision_object_bullet.h index ea06cecb17..4a0c805ce5 100644 --- a/modules/bullet/collision_object_bullet.h +++ b/modules/bullet/collision_object_bullet.h @@ -132,6 +132,7 @@ protected: /// New area is added when overlap with new area (AreaBullet::addOverlap), then is removed when it exit (CollisionObjectBullet::onExitArea) /// This array is used mainly to know which area hold the pointer of this object Vector<AreaBullet *> areasOverlapped; + bool isTransformChanged; public: CollisionObjectBullet(Type p_type); @@ -157,7 +158,7 @@ public: void set_body_scale(const Vector3 &p_new_scale); const Vector3 &get_body_scale() const { return body_scale; } btVector3 get_bt_body_scale() const; - virtual void on_body_scale_changed(); + virtual void body_scale_changed(); void add_collision_exception(const CollisionObjectBullet *p_ignoreCollisionObject); void remove_collision_exception(const CollisionObjectBullet *p_ignoreCollisionObject); @@ -185,8 +186,9 @@ public: virtual void reload_body() = 0; virtual void set_space(SpaceBullet *p_space) = 0; _FORCE_INLINE_ SpaceBullet *get_space() const { return space; } - /// This is an event that is called when a collision checker starts + virtual void on_collision_checker_start() = 0; + virtual void on_collision_checker_end() = 0; virtual void dispatch_callbacks() = 0; @@ -197,7 +199,6 @@ public: virtual void on_enter_area(AreaBullet *p_area) = 0; virtual void on_exit_area(AreaBullet *p_area); - /// GodotObjectFlags void set_godot_object_flags(int flags); int get_godot_object_flags() const; @@ -205,11 +206,13 @@ public: Transform get_transform() const; virtual void set_transform__bullet(const btTransform &p_global_transform); virtual const btTransform &get_transform__bullet() const; + + bool is_transform_changed() const { return isTransformChanged; } + virtual void notify_transform_changed(); }; class RigidCollisionObjectBullet : public CollisionObjectBullet, public ShapeOwnerBullet { protected: - /// This could be a compound shape in case multi please collision are found btCollisionShape *mainShape; Vector<ShapeWrapper> shapes; @@ -219,31 +222,34 @@ public: _FORCE_INLINE_ const Vector<ShapeWrapper> &get_shapes_wrappers() const { return shapes; } - /// This is used to set new shape or replace existing - //virtual void _internal_replaceShape(btCollisionShape *p_old_shape, btCollisionShape *p_new_shape) = 0; + _FORCE_INLINE_ btCollisionShape *get_main_shape() const { return mainShape; } + void add_shape(ShapeBullet *p_shape, const Transform &p_transform = Transform()); void set_shape(int p_index, ShapeBullet *p_shape); - void set_shape_transform(int p_index, const Transform &p_transform); - virtual void remove_shape(ShapeBullet *p_shape); - void remove_shape(int p_index); - void remove_all_shapes(bool p_permanentlyFromThisBody = false); - - virtual void on_shape_changed(const ShapeBullet *const p_shape); - virtual void on_shapes_changed(); - - _FORCE_INLINE_ btCollisionShape *get_main_shape() const { return mainShape; } int get_shape_count() const; ShapeBullet *get_shape(int p_index) const; btCollisionShape *get_bt_shape(int p_index) const; + + int find_shape(ShapeBullet *p_shape) const; + + virtual void remove_shape_full(ShapeBullet *p_shape); + void remove_shape_full(int p_index); + void remove_all_shapes(bool p_permanentlyFromThisBody = false, bool p_force_not_reload = false); + + void set_shape_transform(int p_index, const Transform &p_transform); + const btTransform &get_bt_shape_transform(int p_index) const; Transform get_shape_transform(int p_index) const; void set_shape_disabled(int p_index, bool p_disabled); bool is_shape_disabled(int p_index); - virtual void main_shape_resetted() = 0; - virtual void on_body_scale_changed(); + virtual void shape_changed(int p_shape_index); + virtual void reload_shapes(); + + virtual void main_shape_changed() = 0; + virtual void body_scale_changed(); private: void internal_shape_destroy(int p_index, bool p_permanentlyFromThisBody = false); diff --git a/modules/bullet/generic_6dof_joint_bullet.cpp b/modules/bullet/generic_6dof_joint_bullet.cpp index a36f1123bc..812dcd2d56 100644 --- a/modules/bullet/generic_6dof_joint_bullet.cpp +++ b/modules/bullet/generic_6dof_joint_bullet.cpp @@ -135,6 +135,15 @@ void Generic6DOFJointBullet::set_param(Vector3::Axis p_axis, PhysicsServer::G6DO case PhysicsServer::G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT: sixDOFConstraint->getTranslationalLimitMotor()->m_maxMotorForce.m_floats[p_axis] = p_value; break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING: + sixDOFConstraint->getTranslationalLimitMotor()->m_springDamping.m_floats[p_axis] = p_value; + break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS: + sixDOFConstraint->getTranslationalLimitMotor()->m_springStiffness.m_floats[p_axis] = p_value; + break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT: + sixDOFConstraint->getTranslationalLimitMotor()->m_equilibriumPoint.m_floats[p_axis] = p_value; + break; case PhysicsServer::G6DOF_JOINT_ANGULAR_LOWER_LIMIT: limits_lower[1][p_axis] = p_value; set_flag(p_axis, PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, flags[p_axis][PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT]); // Reload bullet parameter @@ -143,6 +152,9 @@ void Generic6DOFJointBullet::set_param(Vector3::Axis p_axis, PhysicsServer::G6DO limits_upper[1][p_axis] = p_value; set_flag(p_axis, PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, flags[p_axis][PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT]); // Reload bullet parameter break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_RESTITUTION: + sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_bounce = p_value; + break; case PhysicsServer::G6DOF_JOINT_ANGULAR_ERP: sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_stopERP = p_value; break; @@ -152,6 +164,15 @@ void Generic6DOFJointBullet::set_param(Vector3::Axis p_axis, PhysicsServer::G6DO case PhysicsServer::G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT: sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_maxMotorForce = p_value; break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS: + sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_springStiffness = p_value; + break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING: + sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_springDamping = p_value; + break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT: + sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_equilibriumPoint = p_value; + break; default: ERR_EXPLAIN("This parameter " + itos(p_param) + " is deprecated"); WARN_DEPRECATED @@ -170,6 +191,12 @@ real_t Generic6DOFJointBullet::get_param(Vector3::Axis p_axis, PhysicsServer::G6 return sixDOFConstraint->getTranslationalLimitMotor()->m_targetVelocity.m_floats[p_axis]; case PhysicsServer::G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT: return sixDOFConstraint->getTranslationalLimitMotor()->m_maxMotorForce.m_floats[p_axis]; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING: + return sixDOFConstraint->getTranslationalLimitMotor()->m_springDamping.m_floats[p_axis]; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS: + return sixDOFConstraint->getTranslationalLimitMotor()->m_springStiffness.m_floats[p_axis]; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT: + return sixDOFConstraint->getTranslationalLimitMotor()->m_equilibriumPoint.m_floats[p_axis]; case PhysicsServer::G6DOF_JOINT_ANGULAR_LOWER_LIMIT: return limits_lower[1][p_axis]; case PhysicsServer::G6DOF_JOINT_ANGULAR_UPPER_LIMIT: @@ -182,6 +209,12 @@ real_t Generic6DOFJointBullet::get_param(Vector3::Axis p_axis, PhysicsServer::G6 return sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_targetVelocity; case PhysicsServer::G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT: return sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_maxMotorForce; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS: + return sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_springStiffness; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING: + return sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_springDamping; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT: + return sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_equilibriumPoint; default: ERR_EXPLAIN("This parameter " + itos(p_param) + " is deprecated"); WARN_DEPRECATED; @@ -215,6 +248,12 @@ void Generic6DOFJointBullet::set_flag(Vector3::Axis p_axis, PhysicsServer::G6DOF case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR: sixDOFConstraint->getTranslationalLimitMotor()->m_enableMotor[p_axis] = flags[p_axis][p_flag]; break; + case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING: + sixDOFConstraint->getTranslationalLimitMotor()->m_enableSpring[p_axis] = p_value; + break; + case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING: + sixDOFConstraint->getRotationalLimitMotor(p_axis)->m_enableSpring = p_value; + break; default: ERR_EXPLAIN("This flag " + itos(p_flag) + " is deprecated"); WARN_DEPRECATED @@ -224,6 +263,13 @@ void Generic6DOFJointBullet::set_flag(Vector3::Axis p_axis, PhysicsServer::G6DOF bool Generic6DOFJointBullet::get_flag(Vector3::Axis p_axis, PhysicsServer::G6DOFJointAxisFlag p_flag) const { ERR_FAIL_INDEX_V(p_axis, 3, false); - return flags[p_axis][p_flag]; } + +void Generic6DOFJointBullet::set_precision(int p_precision) { + sixDOFConstraint->setOverrideNumSolverIterations(MAX(1, p_precision)); +} + +int Generic6DOFJointBullet::get_precision() const { + return sixDOFConstraint->getOverrideNumSolverIterations(); +} diff --git a/modules/bullet/generic_6dof_joint_bullet.h b/modules/bullet/generic_6dof_joint_bullet.h index 176127ed6c..848c3a10cd 100644 --- a/modules/bullet/generic_6dof_joint_bullet.h +++ b/modules/bullet/generic_6dof_joint_bullet.h @@ -68,6 +68,9 @@ public: void set_flag(Vector3::Axis p_axis, PhysicsServer::G6DOFJointAxisFlag p_flag, bool p_value); bool get_flag(Vector3::Axis p_axis, PhysicsServer::G6DOFJointAxisFlag p_flag) const; + + void set_precision(int p_precision); + int get_precision() const; }; #endif diff --git a/modules/bullet/godot_motion_state.h b/modules/bullet/godot_motion_state.h index fa58e86589..5844ef8bf3 100644 --- a/modules/bullet/godot_motion_state.h +++ b/modules/bullet/godot_motion_state.h @@ -82,7 +82,7 @@ public: virtual void setWorldTransform(const btTransform &worldTrans) { bodyCurrentWorldTransform = worldTrans; - owner->scratch(); + owner->notify_transform_changed(); } public: diff --git a/modules/bullet/godot_result_callbacks.cpp b/modules/bullet/godot_result_callbacks.cpp index 3b44ab838e..0117bb375f 100644 --- a/modules/bullet/godot_result_callbacks.cpp +++ b/modules/bullet/godot_result_callbacks.cpp @@ -102,6 +102,9 @@ bool GodotAllConvexResultCallback::needsCollision(btBroadphaseProxy *proxy0) con } btScalar GodotAllConvexResultCallback::addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace) { + if (count >= m_resultMax) + return 1; // not used by bullet + CollisionObjectBullet *gObj = static_cast<CollisionObjectBullet *>(convexResult.m_hitCollisionObject->getUserPointer()); PhysicsDirectSpaceState::ShapeResult &result = m_results[count]; @@ -172,6 +175,9 @@ btScalar GodotClosestConvexResultCallback::addSingleResult(btCollisionWorld::Loc } bool GodotAllContactResultCallback::needsCollision(btBroadphaseProxy *proxy0) const { + if (m_count >= m_resultMax) + return false; + const bool needs = GodotFilterCallback::test_collision_filters(m_collisionFilterGroup, m_collisionFilterMask, proxy0->m_collisionFilterGroup, proxy0->m_collisionFilterMask); if (needs) { btCollisionObject *btObj = static_cast<btCollisionObject *>(proxy0->m_clientObject); @@ -249,6 +255,8 @@ bool GodotContactPairContactResultCallback::needsCollision(btBroadphaseProxy *pr } btScalar GodotContactPairContactResultCallback::addSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper *colObj1Wrap, int partId1, int index1) { + if (m_count >= m_resultMax) + return 1; // not used by bullet if (m_self_object == colObj0Wrap->getCollisionObject()) { B_TO_G(cp.m_localPointA, m_results[m_count * 2 + 0]); // Local contact diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp index d9a77885b3..9dd04100ed 100644 --- a/modules/bullet/rigid_body_bullet.cpp +++ b/modules/bullet/rigid_body_bullet.cpp @@ -265,13 +265,14 @@ RigidBodyBullet::RigidBodyBullet() : angularDamp(0), can_sleep(true), omit_forces_integration(false), + can_integrate_forces(false), maxCollisionsDetection(0), collisionsCount(0), + prev_collision_count(0), maxAreasWhereIam(10), areaWhereIamCount(0), countGravityPointSpaces(0), isScratchedSpaceOverrideModificator(false), - isTransformChanged(false), previousActiveState(true), force_integration_callback(NULL) { @@ -279,9 +280,10 @@ RigidBodyBullet::RigidBodyBullet() : // Initial properties const btVector3 localInertia(0, 0, 0); - btRigidBody::btRigidBodyConstructionInfo cInfo(mass, godotMotionState, BulletPhysicsServer::get_empty_shape(), localInertia); + btRigidBody::btRigidBodyConstructionInfo cInfo(mass, godotMotionState, NULL, localInertia); btBody = bulletnew(btRigidBody(cInfo)); + reload_shapes(); setupBulletCollisionObject(btBody); set_mode(PhysicsServer::BODY_MODE_RIGID); @@ -292,6 +294,9 @@ RigidBodyBullet::RigidBodyBullet() : areasWhereIam.write[i] = NULL; } btBody->setSleepingThresholds(0.2, 0.2); + + prev_collision_traces = &collision_traces_1; + curr_collision_traces = &collision_traces_2; } RigidBodyBullet::~RigidBodyBullet() { @@ -314,11 +319,9 @@ void RigidBodyBullet::destroy_kinematic_utilities() { } } -void RigidBodyBullet::main_shape_resetted() { - if (get_main_shape()) - btBody->setCollisionShape(get_main_shape()); - else - btBody->setCollisionShape(BulletPhysicsServer::get_empty_shape()); +void RigidBodyBullet::main_shape_changed() { + CRASH_COND(!get_main_shape()) + btBody->setCollisionShape(get_main_shape()); set_continuous_collision_detection(is_continuous_collision_detection_enabled()); // Reset } @@ -333,7 +336,7 @@ void RigidBodyBullet::reload_body() { void RigidBodyBullet::set_space(SpaceBullet *p_space) { // Clear the old space if there is one if (space) { - isTransformChanged = false; + can_integrate_forces = false; // Remove all eventual constraints assert_no_constraints(); @@ -350,8 +353,8 @@ void RigidBodyBullet::set_space(SpaceBullet *p_space) { } void RigidBodyBullet::dispatch_callbacks() { - /// The check isTransformChanged is necessary in order to call integrated forces only when the first transform is sent - if ((btBody->isKinematicObject() || btBody->isActive() || previousActiveState != btBody->isActive()) && force_integration_callback && isTransformChanged) { + /// The check isFirstTransformChanged is necessary in order to call integrated forces only when the first transform is sent + if ((btBody->isKinematicObject() || btBody->isActive() || previousActiveState != btBody->isActive()) && force_integration_callback && can_integrate_forces) { if (omit_forces_integration) btBody->clearForces(); @@ -400,10 +403,6 @@ void RigidBodyBullet::set_force_integration_callback(ObjectID p_id, const String } } -void RigidBodyBullet::scratch() { - isTransformChanged = true; -} - void RigidBodyBullet::scratch_space_override_modificator() { isScratchedSpaceOverrideModificator = true; } @@ -415,7 +414,19 @@ void RigidBodyBullet::on_collision_filters_change() { } void RigidBodyBullet::on_collision_checker_start() { + + prev_collision_count = collisionsCount; collisionsCount = 0; + + // Swap array + Vector<RigidBodyBullet *> *s = prev_collision_traces; + prev_collision_traces = curr_collision_traces; + curr_collision_traces = s; +} + +void RigidBodyBullet::on_collision_checker_end() { + // Always true if active and not a static or kinematic body + isTransformChanged = btBody->isActive() && !btBody->isStaticOrKinematicObject(); } bool RigidBodyBullet::add_collision_object(RigidBodyBullet *p_otherObject, const Vector3 &p_hitWorldLocation, const Vector3 &p_hitLocalLocation, const Vector3 &p_hitNormal, const float &p_appliedImpulse, int p_other_shape_index, int p_local_shape_index) { @@ -433,10 +444,20 @@ bool RigidBodyBullet::add_collision_object(RigidBodyBullet *p_otherObject, const cd.other_object_shape = p_other_shape_index; cd.local_shape = p_local_shape_index; + curr_collision_traces->write[collisionsCount] = p_otherObject; + ++collisionsCount; return true; } +bool RigidBodyBullet::was_colliding(RigidBodyBullet *p_other_object) { + for (int i = prev_collision_count - 1; 0 <= i; --i) { + if ((*prev_collision_traces)[i] == p_other_object) + return true; + } + return false; +} + void RigidBodyBullet::assert_no_constraints() { if (btBody->getNumConstraintRefs()) { WARN_PRINT("A body with a joints is destroyed. Please check the implementation in order to destroy the joint before the body."); @@ -520,7 +541,7 @@ real_t RigidBodyBullet::get_param(PhysicsServer::BodyParameter p_param) const { void RigidBodyBullet::set_mode(PhysicsServer::BodyMode p_mode) { // This is necessary to block force_integration untile next move - isTransformChanged = false; + can_integrate_forces = false; destroy_kinematic_utilities(); // The mode change is relevant to its mass switch (p_mode) { @@ -777,8 +798,7 @@ void RigidBodyBullet::set_transform__bullet(const btTransform &p_global_transfor // The kinematic use MotionState class godotMotionState->moveBody(p_global_transform); } - btBody->setWorldTransform(p_global_transform); - scratch(); + CollisionObjectBullet::set_transform__bullet(p_global_transform); } const btTransform &RigidBodyBullet::get_transform__bullet() const { @@ -791,14 +811,17 @@ const btTransform &RigidBodyBullet::get_transform__bullet() const { } } -void RigidBodyBullet::on_shapes_changed() { - RigidCollisionObjectBullet::on_shapes_changed(); +void RigidBodyBullet::reload_shapes() { + RigidCollisionObjectBullet::reload_shapes(); const btScalar invMass = btBody->getInvMass(); const btScalar mass = invMass == 0 ? 0 : 1 / invMass; if (mainShape) { - btVector3 inertia; + // inertia initialised zero here because some of bullet's collision + // shapes incorrectly do not set the vector in calculateLocalIntertia. + // Arbitrary zero is preferable to undefined behaviour. + btVector3 inertia(0, 0, 0); mainShape->calculateLocalInertia(mass, inertia); btBody->setMassProps(mass, inertia); } @@ -987,6 +1010,11 @@ void RigidBodyBullet::reload_kinematic_shapes() { kinematic_utilities->copyAllOwnerShapes(); } +void RigidBodyBullet::notify_transform_changed() { + RigidCollisionObjectBullet::notify_transform_changed(); + can_integrate_forces = true; +} + void RigidBodyBullet::_internal_set_mass(real_t p_mass) { btVector3 localInertia(0, 0, 0); diff --git a/modules/bullet/rigid_body_bullet.h b/modules/bullet/rigid_body_bullet.h index 25dac30951..0696073d21 100644 --- a/modules/bullet/rigid_body_bullet.h +++ b/modules/bullet/rigid_body_bullet.h @@ -202,11 +202,18 @@ private: real_t angularDamp; bool can_sleep; bool omit_forces_integration; + bool can_integrate_forces; Vector<CollisionData> collisions; + Vector<RigidBodyBullet *> collision_traces_1; + Vector<RigidBodyBullet *> collision_traces_2; + Vector<RigidBodyBullet *> *prev_collision_traces; + Vector<RigidBodyBullet *> *curr_collision_traces; + // these parameters are used to avoid vector resize int maxCollisionsDetection; int collisionsCount; + int prev_collision_count; Vector<AreaBullet *> areasWhereIam; // these parameters are used to avoid vector resize @@ -216,7 +223,6 @@ private: int countGravityPointSpaces; bool isScratchedSpaceOverrideModificator; - bool isTransformChanged; bool previousActiveState; // Last check state ForceIntegrationCallback *force_integration_callback; @@ -231,21 +237,30 @@ public: _FORCE_INLINE_ btRigidBody *get_bt_rigid_body() { return btBody; } - virtual void main_shape_resetted(); + virtual void main_shape_changed(); virtual void reload_body(); virtual void set_space(SpaceBullet *p_space); virtual void dispatch_callbacks(); void set_force_integration_callback(ObjectID p_id, const StringName &p_method, const Variant &p_udata = Variant()); - void scratch(); void scratch_space_override_modificator(); virtual void on_collision_filters_change(); virtual void on_collision_checker_start(); + virtual void on_collision_checker_end(); + void set_max_collisions_detection(int p_maxCollisionsDetection) { + + ERR_FAIL_COND(0 > p_maxCollisionsDetection); + maxCollisionsDetection = p_maxCollisionsDetection; + collisions.resize(p_maxCollisionsDetection); + collision_traces_1.resize(p_maxCollisionsDetection); + collision_traces_2.resize(p_maxCollisionsDetection); + collisionsCount = 0; + prev_collision_count = MIN(prev_collision_count, p_maxCollisionsDetection); } int get_max_collisions_detection() { return maxCollisionsDetection; @@ -253,6 +268,7 @@ public: bool can_add_collision() { return collisionsCount < maxCollisionsDetection; } bool add_collision_object(RigidBodyBullet *p_otherObject, const Vector3 &p_hitWorldLocation, const Vector3 &p_hitLocalLocation, const Vector3 &p_hitNormal, const float &p_appliedImpulse, int p_other_shape_index, int p_local_shape_index); + bool was_colliding(RigidBodyBullet *p_other_object); void assert_no_constraints(); @@ -302,7 +318,7 @@ public: virtual void set_transform__bullet(const btTransform &p_global_transform); virtual const btTransform &get_transform__bullet() const; - virtual void on_shapes_changed(); + virtual void reload_shapes(); virtual void on_enter_area(AreaBullet *p_area); virtual void on_exit_area(AreaBullet *p_area); @@ -311,6 +327,8 @@ public: /// Kinematic void reload_kinematic_shapes(); + virtual void notify_transform_changed(); + private: void _internal_set_mass(real_t p_mass); }; diff --git a/modules/bullet/shape_bullet.cpp b/modules/bullet/shape_bullet.cpp index 4a2263407c..8bb621a863 100644 --- a/modules/bullet/shape_bullet.cpp +++ b/modules/bullet/shape_bullet.cpp @@ -34,6 +34,7 @@ #include "bullet_physics_server.h" #include "bullet_types_converter.h" #include "bullet_utilities.h" +#include "core/project_settings.h" #include "shape_owner_bullet.h" #include <BulletCollision/CollisionDispatch/btInternalEdgeUtility.h> @@ -64,7 +65,8 @@ btCollisionShape *ShapeBullet::prepare(btCollisionShape *p_btShape) const { void ShapeBullet::notifyShapeChanged() { for (Map<ShapeOwnerBullet *, int>::Element *E = owners.front(); E; E = E->next()) { - static_cast<ShapeOwnerBullet *>(E->key())->on_shape_changed(this); + ShapeOwnerBullet *owner = static_cast<ShapeOwnerBullet *>(E->key()); + owner->shape_changed(owner->find_shape(this)); } } @@ -400,18 +402,22 @@ void ConcavePolygonShapeBullet::setup(PoolVector<Vector3> p_faces) { btVector3 supVec_1; btVector3 supVec_2; for (int i = 0; i < src_face_count; ++i) { - G_TO_B(facesr[i * 3], supVec_0); + G_TO_B(facesr[i * 3 + 0], supVec_0); G_TO_B(facesr[i * 3 + 1], supVec_1); G_TO_B(facesr[i * 3 + 2], supVec_2); - shapeInterface->addTriangle(supVec_0, supVec_1, supVec_2); + // Inverted from standard godot otherwise btGenerateInternalEdgeInfo generates wrong edge info + shapeInterface->addTriangle(supVec_2, supVec_1, supVec_0); } const bool useQuantizedAabbCompression = true; meshShape = bulletnew(btBvhTriangleMeshShape(shapeInterface, useQuantizedAabbCompression)); - btTriangleInfoMap *triangleInfoMap = new btTriangleInfoMap(); - btGenerateInternalEdgeInfo(meshShape, triangleInfoMap); + + if (GLOBAL_DEF("physics/3d/smooth_trimesh_collision", false)) { + btTriangleInfoMap *triangleInfoMap = new btTriangleInfoMap(); + btGenerateInternalEdgeInfo(meshShape, triangleInfoMap); + } } else { meshShape = NULL; ERR_PRINT("The faces count are 0, the mesh shape cannot be created"); @@ -426,6 +432,7 @@ btCollisionShape *ConcavePolygonShapeBullet::create_bt_shape(const btVector3 &p_ cs = ShapeBullet::create_shape_empty(); cs->setLocalScaling(p_implicit_scale); prepare(cs); + cs->setMargin(0); return cs; } diff --git a/modules/bullet/shape_owner_bullet.h b/modules/bullet/shape_owner_bullet.h index 29d42d12f2..72ddbc482c 100644 --- a/modules/bullet/shape_owner_bullet.h +++ b/modules/bullet/shape_owner_bullet.h @@ -45,11 +45,10 @@ class CollisionObjectBullet; /// E.G. BodyShape is a child of this class ShapeOwnerBullet { public: - /// This is used to set new shape or replace existing - //virtual void _internal_replaceShape(btCollisionShape *p_old_shape, btCollisionShape *p_new_shape) = 0; - virtual void on_shape_changed(const ShapeBullet *const p_shape) = 0; - virtual void on_shapes_changed() = 0; - virtual void remove_shape(class ShapeBullet *p_shape) = 0; + virtual int find_shape(ShapeBullet *p_shape) const = 0; + virtual void shape_changed(int p_shape_index) = 0; + virtual void reload_shapes() = 0; + virtual void remove_shape_full(class ShapeBullet *p_shape) = 0; virtual ~ShapeOwnerBullet() {} }; #endif diff --git a/modules/bullet/soft_body_bullet.cpp b/modules/bullet/soft_body_bullet.cpp index f373ce5db4..94f350210f 100644 --- a/modules/bullet/soft_body_bullet.cpp +++ b/modules/bullet/soft_body_bullet.cpp @@ -72,12 +72,6 @@ void SoftBodyBullet::set_space(SpaceBullet *p_space) { } } -void SoftBodyBullet::dispatch_callbacks() {} - -void SoftBodyBullet::on_collision_filters_change() {} - -void SoftBodyBullet::on_collision_checker_start() {} - void SoftBodyBullet::on_enter_area(AreaBullet *p_area) {} void SoftBodyBullet::on_exit_area(AreaBullet *p_area) {} diff --git a/modules/bullet/soft_body_bullet.h b/modules/bullet/soft_body_bullet.h index c775193584..d04bfca046 100644 --- a/modules/bullet/soft_body_bullet.h +++ b/modules/bullet/soft_body_bullet.h @@ -91,9 +91,10 @@ public: virtual void reload_body(); virtual void set_space(SpaceBullet *p_space); - virtual void dispatch_callbacks(); - virtual void on_collision_filters_change(); - virtual void on_collision_checker_start(); + virtual void dispatch_callbacks() {} + virtual void on_collision_filters_change() {} + virtual void on_collision_checker_start() {} + virtual void on_collision_checker_end() {} virtual void on_enter_area(AreaBullet *p_area); virtual void on_exit_area(AreaBullet *p_area); diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp index ba4c72f4c7..fed12cd5ed 100644 --- a/modules/bullet/space_bullet.cpp +++ b/modules/bullet/space_bullet.cpp @@ -175,7 +175,7 @@ bool BulletPhysicsDirectSpaceState::cast_motion(const RID &p_shape, const Transf btResult.m_collisionFilterGroup = 0; btResult.m_collisionFilterMask = p_collision_mask; - space->dynamicsWorld->convexSweepTest(bt_convex_shape, bt_xform_from, bt_xform_to, btResult, 0.002); + space->dynamicsWorld->convexSweepTest(bt_convex_shape, bt_xform_from, bt_xform_to, btResult, space->dynamicsWorld->getDispatchInfo().m_allowedCcdPenetration); r_closest_unsafe = 1.0; r_closest_safe = 1.0; @@ -540,17 +540,20 @@ void onBulletPreTickCallback(btDynamicsWorld *p_dynamicsWorld, btScalar timeStep void onBulletTickCallback(btDynamicsWorld *p_dynamicsWorld, btScalar timeStep) { - // Notify all Collision objects the collision checker is started const btCollisionObjectArray &colObjArray = p_dynamicsWorld->getCollisionObjectArray(); + + // Notify all Collision objects the collision checker is started for (int i = colObjArray.size() - 1; 0 <= i; --i) { - CollisionObjectBullet *colObj = static_cast<CollisionObjectBullet *>(colObjArray[i]->getUserPointer()); - assert(NULL != colObj); - colObj->on_collision_checker_start(); + static_cast<CollisionObjectBullet *>(colObjArray[i]->getUserPointer())->on_collision_checker_start(); } SpaceBullet *sb = static_cast<SpaceBullet *>(p_dynamicsWorld->getWorldUserInfo()); sb->check_ghost_overlaps(); sb->check_body_collision(); + + for (int i = colObjArray.size() - 1; 0 <= i; --i) { + static_cast<CollisionObjectBullet *>(colObjArray[i]->getUserPointer())->on_collision_checker_end(); + } } BulletPhysicsDirectSpaceState *SpaceBullet::get_direct_state() { @@ -571,7 +574,6 @@ void SpaceBullet::create_empty_world(bool p_create_soft_world) { gjk_epa_pen_solver = bulletnew(btGjkEpaPenetrationDepthSolver); gjk_simplex_solver = bulletnew(btVoronoiSimplexSolver); - gjk_simplex_solver->setEqualVertexThreshold(0.f); void *world_mem; if (p_create_soft_world) { @@ -650,7 +652,6 @@ void SpaceBullet::check_ghost_overlaps() { btConvexShape *area_shape; btGjkPairDetector::ClosestPointInput gjk_input; AreaBullet *area; - RigidCollisionObjectBullet *otherObject; int x(-1), i(-1), y(-1), z(-1), indexOverlap(-1); /// For each areas @@ -677,13 +678,17 @@ void SpaceBullet::check_ghost_overlaps() { // For each overlapping for (i = ghostOverlaps.size() - 1; 0 <= i; --i) { - if (ghostOverlaps[i]->getUserIndex() == CollisionObjectBullet::TYPE_AREA) { - if (!static_cast<AreaBullet *>(ghostOverlaps[i]->getUserPointer())->is_monitorable()) - continue; - } else if (ghostOverlaps[i]->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) + btCollisionObject *overlapped_bt_co = ghostOverlaps[i]; + RigidCollisionObjectBullet *otherObject = static_cast<RigidCollisionObjectBullet *>(overlapped_bt_co->getUserPointer()); + + if (!area->is_transform_changed() && !otherObject->is_transform_changed()) continue; - otherObject = static_cast<RigidCollisionObjectBullet *>(ghostOverlaps[i]->getUserPointer()); + if (overlapped_bt_co->getUserIndex() == CollisionObjectBullet::TYPE_AREA) { + if (!static_cast<AreaBullet *>(overlapped_bt_co->getUserPointer())->is_monitorable()) + continue; + } else if (overlapped_bt_co->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) + continue; bool hasOverlap = false; @@ -781,16 +786,22 @@ void SpaceBullet::check_body_collision() { } const int numContacts = contactManifold->getNumContacts(); + + /// Since I don't need report all contacts for these objects, + /// So report only the first #define REPORT_ALL_CONTACTS 0 #if REPORT_ALL_CONTACTS for (int j = 0; j < numContacts; j++) { btManifoldPoint &pt = contactManifold->getContactPoint(j); #else - // Since I don't need report all contacts for these objects, I'll report only the first if (numContacts) { btManifoldPoint &pt = contactManifold->getContactPoint(0); #endif - if (pt.getDistance() <= 0.0) { + if ( + pt.getDistance() <= 0.0 || + bodyA->was_colliding(bodyB) || + bodyB->was_colliding(bodyA)) { + Vector3 collisionWorldPosition; Vector3 collisionLocalPosition; Vector3 normalOnB; diff --git a/modules/csg/csg.cpp b/modules/csg/csg.cpp index 567485c2c7..88f3c0338a 100644 --- a/modules/csg/csg.cpp +++ b/modules/csg/csg.cpp @@ -750,7 +750,7 @@ void CSGBrushOperation::_add_poly_outline(const BuildPoly &p_poly, int p_from_po t2d.affine_invert(); - float max_angle; + float max_angle = 0; int next_point_angle = -1; for (int i = 0; i < vertex_process[to_point].size(); i++) { @@ -805,7 +805,7 @@ void CSGBrushOperation::_merge_poly(MeshMerge &mesh, int p_face_idx, const Build //process points that were not processed for (int i = 0; i < edge_process.size(); i++) { - if (edge_process[i] == true) + if (edge_process[i]) continue; //already processed int intersect_poly = -1; diff --git a/modules/csg/csg_gizmos.cpp b/modules/csg/csg_gizmos.cpp index 07c33ed670..5864d02615 100644 --- a/modules/csg/csg_gizmos.cpp +++ b/modules/csg/csg_gizmos.cpp @@ -215,7 +215,7 @@ void CSGShapeSpatialGizmoPlugin::commit_handle(EditorSpatialGizmo *p_gizmo, int UndoRedo *ur = SpatialEditor::get_singleton()->get_undo_redo(); ur->create_action(TTR("Change Box Shape Extents")); static const char *method[3] = { "set_width", "set_height", "set_depth" }; - float current; + float current = 0; switch (p_idx) { case 0: current = s->get_width(); break; case 1: current = s->get_height(); break; diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index 714be16db7..4e35014459 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -47,6 +47,7 @@ void CSGShape::set_use_collision(bool p_enable) { PhysicsServer::get_singleton()->body_set_state(root_collision_instance, PhysicsServer::BODY_STATE_TRANSFORM, get_global_transform()); PhysicsServer::get_singleton()->body_add_shape(root_collision_instance, root_collision_shape->get_rid()); PhysicsServer::get_singleton()->body_set_space(root_collision_instance, get_world()->get_space()); + PhysicsServer::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id()); _make_dirty(); //force update } else { PhysicsServer::get_singleton()->free(root_collision_instance); @@ -159,6 +160,72 @@ CSGBrush *CSGShape::_get_brush() { return brush; } +int CSGShape::mikktGetNumFaces(const SMikkTSpaceContext *pContext) { + ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); + + return surface.vertices.size() / 3; +} + +int CSGShape::mikktGetNumVerticesOfFace(const SMikkTSpaceContext *pContext, const int iFace) { + // always 3 + return 3; +} + +void CSGShape::mikktGetPosition(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert) { + ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); + + Vector3 v = surface.verticesw[iFace * 3 + iVert]; + fvPosOut[0] = v.x; + fvPosOut[1] = v.y; + fvPosOut[2] = v.z; +} + +void CSGShape::mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert) { + ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); + + Vector3 n = surface.normalsw[iFace * 3 + iVert]; + fvNormOut[0] = n.x; + fvNormOut[1] = n.y; + fvNormOut[2] = n.z; +} + +void CSGShape::mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert) { + ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); + + Vector2 t = surface.uvsw[iFace * 3 + iVert]; + fvTexcOut[0] = t.x; + fvTexcOut[1] = t.y; +} + +void CSGShape::mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert) { + ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); + + int i = (iFace * 3 + iVert) * 4; + + surface.tansw[i++] = fvTangent[0]; + surface.tansw[i++] = fvTangent[1]; + surface.tansw[i++] = fvTangent[2]; + surface.tansw[i++] = fSign; +} + +void CSGShape::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, + const tbool bIsOrientationPreserving, const int iFace, const int iVert) { + + ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); + + int i = iFace * 3 + iVert; + Vector3 normal = surface.normalsw[i]; + Vector3 tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); + Vector3 bitangent = Vector3(fvBiTangent[0], fvBiTangent[1], fvBiTangent[2]); + float d = bitangent.dot(normal.cross(tangent)); + + i *= 4; + surface.tansw[i++] = tangent.x; + surface.tansw[i++] = tangent.y; + surface.tansw[i++] = tangent.z; + surface.tansw[i++] = d < 0 ? -1 : 1; +} + void CSGShape::_update_shape() { if (parent) @@ -211,6 +278,9 @@ void CSGShape::_update_shape() { surfaces.write[i].vertices.resize(face_count[i] * 3); surfaces.write[i].normals.resize(face_count[i] * 3); surfaces.write[i].uvs.resize(face_count[i] * 3); + if (calculate_tangents) { + surfaces.write[i].tans.resize(face_count[i] * 3 * 4); + } surfaces.write[i].last_added = 0; if (i != surfaces.size() - 1) { @@ -220,6 +290,9 @@ void CSGShape::_update_shape() { surfaces.write[i].verticesw = surfaces.write[i].vertices.write(); surfaces.write[i].normalsw = surfaces.write[i].normals.write(); surfaces.write[i].uvsw = surfaces.write[i].uvs.write(); + if (calculate_tangents) { + surfaces.write[i].tansw = surfaces.write[i].tans.write(); + } } //fill arrays @@ -274,9 +347,19 @@ void CSGShape::_update_shape() { normal = -normal; } - surfaces[idx].verticesw[last + order[j]] = v; - surfaces[idx].uvsw[last + order[j]] = n->faces[i].uvs[j]; - surfaces[idx].normalsw[last + order[j]] = normal; + int k = last + order[j]; + surfaces[idx].verticesw[k] = v; + surfaces[idx].uvsw[k] = n->faces[i].uvs[j]; + surfaces[idx].normalsw[k] = normal; + + if (calculate_tangents) { + // zero out our tangents for now + k *= 4; + surfaces[idx].tansw[k++] = 0.0; + surfaces[idx].tansw[k++] = 0.0; + surfaces[idx].tansw[k++] = 0.0; + surfaces[idx].tansw[k++] = 0.0; + } } surfaces.write[idx].last_added += 3; @@ -287,20 +370,43 @@ void CSGShape::_update_shape() { //create surfaces for (int i = 0; i < surfaces.size(); i++) { + // calculate tangents for this surface + bool have_tangents = calculate_tangents; + if (have_tangents) { + SMikkTSpaceInterface mkif; + mkif.m_getNormal = mikktGetNormal; + mkif.m_getNumFaces = mikktGetNumFaces; + mkif.m_getNumVerticesOfFace = mikktGetNumVerticesOfFace; + mkif.m_getPosition = mikktGetPosition; + mkif.m_getTexCoord = mikktGetTexCoord; + mkif.m_setTSpace = mikktSetTSpaceDefault; + mkif.m_setTSpaceBasic = NULL; + + SMikkTSpaceContext msc; + msc.m_pInterface = &mkif; + msc.m_pUserData = &surfaces.write[i]; + have_tangents = genTangSpaceDefault(&msc); + } + // unset write access surfaces.write[i].verticesw = PoolVector<Vector3>::Write(); surfaces.write[i].normalsw = PoolVector<Vector3>::Write(); surfaces.write[i].uvsw = PoolVector<Vector2>::Write(); + surfaces.write[i].tansw = PoolVector<float>::Write(); if (surfaces[i].last_added == 0) continue; + // and convert to surface array Array array; array.resize(Mesh::ARRAY_MAX); array[Mesh::ARRAY_VERTEX] = surfaces[i].vertices; array[Mesh::ARRAY_NORMAL] = surfaces[i].normals; array[Mesh::ARRAY_TEX_UV] = surfaces[i].uvs; + if (have_tangents) { + array[Mesh::ARRAY_TANGENT] = surfaces[i].tans; + } int idx = root_mesh->get_surface_count(); root_mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, array); @@ -363,6 +469,7 @@ void CSGShape::_notification(int p_what) { PhysicsServer::get_singleton()->body_set_state(root_collision_instance, PhysicsServer::BODY_STATE_TRANSFORM, get_global_transform()); PhysicsServer::get_singleton()->body_add_shape(root_collision_instance, root_collision_shape->get_rid()); PhysicsServer::get_singleton()->body_set_space(root_collision_instance, get_world()->get_space()); + PhysicsServer::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id()); } _make_dirty(); @@ -400,6 +507,15 @@ CSGShape::Operation CSGShape::get_operation() const { return operation; } +void CSGShape::set_calculate_tangents(bool p_calculate_tangents) { + calculate_tangents = p_calculate_tangents; + _make_dirty(); +} + +bool CSGShape::is_calculating_tangents() const { + return calculate_tangents; +} + void CSGShape::_validate_property(PropertyInfo &property) const { if (is_inside_tree() && property.name.begins_with("use_collision") && !is_root_shape()) { //hide collision if not root @@ -421,9 +537,13 @@ void CSGShape::_bind_methods() { ClassDB::bind_method(D_METHOD("set_snap", "snap"), &CSGShape::set_snap); ClassDB::bind_method(D_METHOD("get_snap"), &CSGShape::get_snap); + ClassDB::bind_method(D_METHOD("set_calculate_tangents", "enabled"), &CSGShape::set_calculate_tangents); + ClassDB::bind_method(D_METHOD("is_calculating_tangents"), &CSGShape::is_calculating_tangents); + ADD_PROPERTY(PropertyInfo(Variant::INT, "operation", PROPERTY_HINT_ENUM, "Union,Intersection,Subtraction"), "set_operation", "get_operation"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_collision"), "set_use_collision", "is_using_collision"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "snap", PROPERTY_HINT_RANGE, "0.0001,1,0.001"), "set_snap", "get_snap"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "calculate_tangents"), "set_calculate_tangents", "is_calculating_tangents"); BIND_ENUM_CONSTANT(OPERATION_UNION); BIND_ENUM_CONSTANT(OPERATION_INTERSECTION); @@ -438,6 +558,7 @@ CSGShape::CSGShape() { use_collision = false; operation = OPERATION_UNION; snap = 0.001; + calculate_tangents = true; } CSGShape::~CSGShape() { @@ -521,6 +642,11 @@ CSGBrush *CSGMesh::_build_brush() { Array arrays = mesh->surface_get_arrays(i); + if (arrays.size() == 0) { + _make_dirty(); + ERR_FAIL_COND_V(arrays.size() == 0, NULL); + } + PoolVector<Vector3> avertices = arrays[Mesh::ARRAY_VERTEX]; if (avertices.size() == 0) continue; @@ -593,8 +719,8 @@ CSGBrush *CSGMesh::_build_brush() { mw[j / 3] = mat; } } else { - int is = vertices.size(); - int as = avertices.size(); + int as = vertices.size(); + int is = avertices.size(); vertices.resize(as + is); smooth.resize((as + is) / 3); @@ -1540,6 +1666,24 @@ CSGBrush *CSGPolygon::_build_brush() { Path *path = NULL; Ref<Curve3D> curve; + // get bounds for our polygon + Vector2 final_polygon_min; + Vector2 final_polygon_max; + for (int i = 0; i < final_polygon.size(); i++) { + Vector2 p = final_polygon[i]; + if (i == 0) { + final_polygon_min = p; + final_polygon_max = final_polygon_min; + } else { + if (p.x < final_polygon_min.x) final_polygon_min.x = p.x; + if (p.y < final_polygon_min.y) final_polygon_min.y = p.y; + + if (p.x > final_polygon_max.x) final_polygon_max.x = p.x; + if (p.y > final_polygon_max.y) final_polygon_max.y = p.y; + } + } + Vector2 final_polygon_size = final_polygon_max - final_polygon_min; + if (mode == MODE_PATH) { if (!has_node(path_node)) return NULL; @@ -1573,7 +1717,7 @@ CSGBrush *CSGPolygon::_build_brush() { } CSGBrush *brush = memnew(CSGBrush); - int face_count; + int face_count = 0; switch (mode) { case MODE_DEPTH: face_count = triangles.size() * 2 / 3 + (final_polygon.size()) * 2; break; @@ -1631,6 +1775,10 @@ CSGBrush *CSGPolygon::_build_brush() { v.z -= depth; } facesw[face * 3 + k] = v; + uvsw[face * 3 + k] = (p - final_polygon_min) / final_polygon_size; + if (i == 0) { + uvsw[face * 3 + k].x = 1.0 - uvsw[face * 3 + k].x; /* flip x */ + } } smoothw[face] = false; @@ -1762,6 +1910,7 @@ CSGBrush *CSGPolygon::_build_brush() { Vector2 p = final_polygon[triangles[j + src[k]]]; Vector3 v = Vector3(p.x, p.y, 0); facesw[face * 3 + k] = v; + uvsw[face * 3 + k] = (p - final_polygon_min) / final_polygon_size; } smoothw[face] = false; @@ -1779,6 +1928,8 @@ CSGBrush *CSGPolygon::_build_brush() { Vector2 p = final_polygon[triangles[j + src[k]]]; Vector3 v = Vector3(normali_n.x * p.x, p.y, normali_n.z * p.x); facesw[face * 3 + k] = v; + uvsw[face * 3 + k] = (p - final_polygon_min) / final_polygon_size; + uvsw[face * 3 + k].x = 1.0 - uvsw[face * 3 + k].x; /* flip x */ } smoothw[face] = false; @@ -1864,10 +2015,10 @@ CSGBrush *CSGPolygon::_build_brush() { }; Vector2 u[4] = { - Vector2(u1, 0), Vector2(u1, 1), - Vector2(u2, 1), - Vector2(u2, 0) + Vector2(u1, 0), + Vector2(u2, 0), + Vector2(u2, 1) }; // face 1 @@ -1910,6 +2061,7 @@ CSGBrush *CSGPolygon::_build_brush() { Vector2 p = final_polygon[triangles[j + src[k]]]; Vector3 v = Vector3(p.x, p.y, 0); facesw[face * 3 + k] = xf.xform(v); + uvsw[face * 3 + k] = (p - final_polygon_min) / final_polygon_size; } smoothw[face] = false; @@ -1927,6 +2079,8 @@ CSGBrush *CSGPolygon::_build_brush() { Vector2 p = final_polygon[triangles[j + src[k]]]; Vector3 v = Vector3(p.x, p.y, 0); facesw[face * 3 + k] = xf.xform(v); + uvsw[face * 3 + k] = (p - final_polygon_min) / final_polygon_size; + uvsw[face * 3 + k].x = 1.0 - uvsw[face * 3 + k].x; /* flip x */ } smoothw[face] = false; @@ -1951,6 +2105,9 @@ CSGBrush *CSGPolygon::_build_brush() { } else { aabb.expand_to(facesw[i]); } + + // invert UVs on the Y-axis OpenGL = upside down + uvsw[i].y = 1.0 - uvsw[i].y; } } diff --git a/modules/csg/csg_shape.h b/modules/csg/csg_shape.h index 6898cdaf64..0a4bb5f665 100644 --- a/modules/csg/csg_shape.h +++ b/modules/csg/csg_shape.h @@ -36,6 +36,7 @@ #include "csg.h" #include "scene/3d/visual_instance.h" #include "scene/resources/concave_polygon_shape.h" +#include "thirdparty/misc/mikktspace.h" class CSGShape : public VisualInstance { GDCLASS(CSGShape, VisualInstance); @@ -63,6 +64,8 @@ private: Ref<ConcavePolygonShape> root_collision_shape; RID root_collision_instance; + bool calculate_tangents; + Ref<ArrayMesh> root_mesh; struct Vector3Hasher { @@ -78,14 +81,26 @@ private: PoolVector<Vector3> vertices; PoolVector<Vector3> normals; PoolVector<Vector2> uvs; + PoolVector<float> tans; Ref<Material> material; int last_added; PoolVector<Vector3>::Write verticesw; PoolVector<Vector3>::Write normalsw; PoolVector<Vector2>::Write uvsw; + PoolVector<float>::Write tansw; }; + //mikktspace callbacks + static int mikktGetNumFaces(const SMikkTSpaceContext *pContext); + static int mikktGetNumVerticesOfFace(const SMikkTSpaceContext *pContext, const int iFace); + static void mikktGetPosition(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert); + static void mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert); + static void mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert); + static void mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert); + static void mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, + const tbool bIsOrientationPreserving, const int iFace, const int iVert); + void _update_shape(); protected: @@ -115,6 +130,9 @@ public: void set_snap(float p_snap); float get_snap() const; + void set_calculate_tangents(bool p_calculate_tangents); + bool is_calculating_tangents() const; + bool is_root_shape() const; CSGShape(); ~CSGShape(); diff --git a/modules/csg/doc_classes/CSGShape.xml b/modules/csg/doc_classes/CSGShape.xml index 90621b94f4..ac3c2342fc 100644 --- a/modules/csg/doc_classes/CSGShape.xml +++ b/modules/csg/doc_classes/CSGShape.xml @@ -20,6 +20,9 @@ </method> </methods> <members> + <member name="calculate_tangents" type="bool" setter="set_calculate_tangents" getter="is_calculating_tangents"> + Calculate tangents for the CSG shape which allows the use of normal maps. This is only applied on the root shape, this setting is ignored on any child. + </member> <member name="operation" type="int" setter="set_operation" getter="get_operation" enum="CSGShape.Operation"> The operation that is performed on this shape. This is ignored for the first CSG child node as the operation is between this node and the previous child of this nodes parent. </member> diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp index ff15aaa735..53e9773791 100644 --- a/modules/dds/texture_loader_dds.cpp +++ b/modules/dds/texture_loader_dds.cpp @@ -108,8 +108,8 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path, uint32_t magic = f->get_32(); uint32_t hsize = f->get_32(); uint32_t flags = f->get_32(); - uint32_t width = f->get_32(); uint32_t height = f->get_32(); + uint32_t width = f->get_32(); uint32_t pitch = f->get_32(); /* uint32_t depth = */ f->get_32(); uint32_t mipmaps = f->get_32(); diff --git a/modules/enet/doc_classes/NetworkedMultiplayerENet.xml b/modules/enet/doc_classes/NetworkedMultiplayerENet.xml index 76c551e8d7..e057a435ac 100644 --- a/modules/enet/doc_classes/NetworkedMultiplayerENet.xml +++ b/modules/enet/doc_classes/NetworkedMultiplayerENet.xml @@ -7,7 +7,7 @@ A PacketPeer implementation that should be passed to [method SceneTree.set_network_peer] after being initialized as either a client or server. Events can then be handled by connecting to [SceneTree] signals. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/networking/high_level_multiplayer.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link> <link>http://enet.bespin.org/usergroup0.html</link> </tutorials> <demos> @@ -76,7 +76,7 @@ <return type="int"> </return> <description> - Returns the channel of the next packet that will be retrieved via [method PacketPeer.get_packet_peer] + Returns the channel of the next packet that will be retrieved via [method PacketPeer.get_packet] </description> </method> <method name="get_peer_address" qualifiers="const"> diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub index 7ca40c1b8b..3e2068b8db 100644 --- a/modules/freetype/SCsub +++ b/modules/freetype/SCsub @@ -59,6 +59,8 @@ if env['builtin_freetype']: if env['platform'] == 'uwp': # Include header for UWP to fix build issues env_freetype.Append(CCFLAGS=['/FI', '"modules/freetype/uwpdef.h"']) + # Globally too, as freetype is used in scene (see bottom) + env.Append(CCFLAGS=['/FI', '"modules/freetype/uwpdef.h"']) sfnt = thirdparty_dir + 'src/sfnt/sfnt.c' if env['platform'] == 'javascript': diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp index ecde73ae1c..f07fdef488 100644 --- a/modules/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative.cpp @@ -243,12 +243,12 @@ void GDNativeLibrary::_bind_methods() { ClassDB::bind_method(D_METHOD("set_symbol_prefix", "symbol_prefix"), &GDNativeLibrary::set_symbol_prefix); ClassDB::bind_method(D_METHOD("set_reloadable", "reloadable"), &GDNativeLibrary::set_reloadable); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "config_file", PROPERTY_HINT_RESOURCE_TYPE, "ConfigFile"), "set_config_file", "get_config_file"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "config_file", PROPERTY_HINT_RESOURCE_TYPE, "ConfigFile"), "set_config_file", "get_config_file"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "load_once"), "set_load_once", "should_load_once"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "singleton"), "set_singleton", "is_singleton"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "symbol_prefix"), "set_symbol_prefix", "get_symbol_prefix"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "reloadable"), "set_reloadable", "is_reloadable"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "load_once"), "set_load_once", "should_load_once"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "singleton"), "set_singleton", "is_singleton"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "symbol_prefix"), "set_symbol_prefix", "get_symbol_prefix"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "reloadable"), "set_reloadable", "is_reloadable"); } GDNative::GDNative() { @@ -268,7 +268,7 @@ void GDNative::_bind_methods() { ClassDB::bind_method(D_METHOD("call_native", "calling_type", "procedure_name", "arguments"), &GDNative::call_native); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "GDNativeLibrary"), "set_library", "get_library"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "GDNativeLibrary"), "set_library", "get_library"); } void GDNative::set_library(Ref<GDNativeLibrary> p_library) { @@ -306,6 +306,13 @@ bool GDNative::initialize() { #elif defined(UWP_ENABLED) // On UWP we use a relative path from the app String path = lib_path.replace("res://", ""); +#elif defined(OSX_ENABLED) + // On OSX the exported libraries are located under the Frameworks directory. + // So we need to replace the library path. + String path = ProjectSettings::get_singleton()->globalize_path(lib_path); + if (!FileAccess::exists(path)) { + path = OS::get_singleton()->get_executable_path().get_base_dir().plus_file("../Frameworks").plus_file(lib_path.get_file()); + } #else String path = ProjectSettings::get_singleton()->globalize_path(lib_path); #endif diff --git a/modules/gdnative/gdnative/array.cpp b/modules/gdnative/gdnative/array.cpp index 1fb0ff0500..a30cc09bf6 100644 --- a/modules/gdnative/gdnative/array.cpp +++ b/modules/gdnative/gdnative/array.cpp @@ -318,6 +318,38 @@ void GDAPI godot_array_destroy(godot_array *p_self) { ((Array *)p_self)->~Array(); } +godot_array GDAPI godot_array_duplicate(const godot_array *p_self, const godot_bool p_deep) { + const Array *self = (const Array *)p_self; + godot_array res; + Array *val = (Array *)&res; + memnew_placement(val, Array); + *val = self->duplicate(p_deep); + return res; +} + +godot_variant GDAPI godot_array_max(const godot_array *p_self) { + const Array *self = (const Array *)p_self; + godot_variant v; + Variant *val = (Variant *)&v; + memnew_placement(val, Variant); + *val = self->max(); + return v; +} + +godot_variant GDAPI godot_array_min(const godot_array *p_self) { + const Array *self = (const Array *)p_self; + godot_variant v; + Variant *val = (Variant *)&v; + memnew_placement(val, Variant); + *val = self->min(); + return v; +} + +void GDAPI godot_array_shuffle(godot_array *p_self) { + Array *self = (Array *)p_self; + self->shuffle(); +} + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/gdnative/basis.cpp b/modules/gdnative/gdnative/basis.cpp index 70d2814577..d88499ade1 100644 --- a/modules/gdnative/gdnative/basis.cpp +++ b/modules/gdnative/gdnative/basis.cpp @@ -282,6 +282,15 @@ godot_basis GDAPI godot_basis_operator_multiply_scalar(const godot_basis *p_self return raw_dest; } +godot_basis GDAPI godot_basis_slerp(const godot_basis *p_self, const godot_basis *p_b, const godot_real p_t) { + godot_basis raw_dest; + Basis *dest = (Basis *)&raw_dest; + const Basis *self = (const Basis *)p_self; + const Basis *b = (const Basis *)p_b; + *dest = self->slerp(*b, p_t); + return raw_dest; +} + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/gdnative/color.cpp b/modules/gdnative/gdnative/color.cpp index 4089f4458a..79f0c71b5e 100644 --- a/modules/gdnative/gdnative/color.cpp +++ b/modules/gdnative/gdnative/color.cpp @@ -116,6 +116,26 @@ godot_int GDAPI godot_color_to_rgba32(const godot_color *p_self) { return self->to_rgba32(); } +godot_int GDAPI godot_color_to_abgr32(const godot_color *p_self) { + const Color *self = (const Color *)p_self; + return self->to_abgr32(); +} + +godot_int GDAPI godot_color_to_abgr64(const godot_color *p_self) { + const Color *self = (const Color *)p_self; + return self->to_abgr64(); +} + +godot_int GDAPI godot_color_to_argb64(const godot_color *p_self) { + const Color *self = (const Color *)p_self; + return self->to_argb64(); +} + +godot_int GDAPI godot_color_to_rgba64(const godot_color *p_self) { + const Color *self = (const Color *)p_self; + return self->to_rgba64(); +} + godot_int GDAPI godot_color_to_argb32(const godot_color *p_self) { const Color *self = (const Color *)p_self; return self->to_argb32(); @@ -156,6 +176,27 @@ godot_color GDAPI godot_color_blend(const godot_color *p_self, const godot_color return dest; } +godot_color GDAPI godot_color_darkened(const godot_color *p_self, const godot_real p_amount) { + godot_color dest; + const Color *self = (const Color *)p_self; + *((Color *)&dest) = self->darkened(p_amount); + return dest; +} + +godot_color GDAPI godot_color_from_hsv(const godot_color *p_self, const godot_real p_h, const godot_real p_s, const godot_real p_v, const godot_real p_a) { + godot_color dest; + const Color *self = (const Color *)p_self; + *((Color *)&dest) = self->from_hsv(p_h, p_s, p_v, p_a); + return dest; +} + +godot_color GDAPI godot_color_lightened(const godot_color *p_self, const godot_real p_amount) { + godot_color dest; + const Color *self = (const Color *)p_self; + *((Color *)&dest) = self->lightened(p_amount); + return dest; +} + godot_string GDAPI godot_color_to_html(const godot_color *p_self, const godot_bool p_with_alpha) { godot_string dest; const Color *self = (const Color *)p_self; diff --git a/modules/gdnative/gdnative/node_path.cpp b/modules/gdnative/gdnative/node_path.cpp index f24facaae8..cf82940e09 100644 --- a/modules/gdnative/gdnative/node_path.cpp +++ b/modules/gdnative/gdnative/node_path.cpp @@ -110,6 +110,15 @@ godot_bool GDAPI godot_node_path_operator_equal(const godot_node_path *p_self, c return *self == *b; } +godot_node_path godot_node_path_get_as_property_path(const godot_node_path *p_self) { + const NodePath *self = (const NodePath *)p_self; + godot_node_path res; + NodePath *val = (NodePath *)&res; + memnew_placement(val, NodePath); + *val = self->get_as_property_path(); + return res; +} + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/gdnative/quat.cpp b/modules/gdnative/gdnative/quat.cpp index ddec77edcd..2594759508 100644 --- a/modules/gdnative/gdnative/quat.cpp +++ b/modules/gdnative/gdnative/quat.cpp @@ -225,6 +225,12 @@ godot_quat GDAPI godot_quat_operator_neg(const godot_quat *p_self) { return raw_dest; } +void GDAPI godot_quat_set_axis_angle(godot_quat *p_self, const godot_vector3 *p_axis, const godot_real p_angle) { + Quat *self = (Quat *)p_self; + const Vector3 *axis = (const Vector3 *)p_axis; + self->set_axis_angle(*axis, p_angle); +} + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/gdnative/rect2.cpp b/modules/gdnative/gdnative/rect2.cpp index 54b98fc4e5..5cbc2712c3 100644 --- a/modules/gdnative/gdnative/rect2.cpp +++ b/modules/gdnative/gdnative/rect2.cpp @@ -109,6 +109,27 @@ godot_rect2 GDAPI godot_rect2_grow(const godot_rect2 *p_self, const godot_real p return dest; } +godot_rect2 GDAPI godot_rect2_grow_individual(const godot_rect2 *p_self, const godot_real p_left, const godot_real p_top, const godot_real p_right, const godot_real p_bottom) { + godot_rect2 dest; + const Rect2 *self = (const Rect2 *)p_self; + *((Rect2 *)&dest) = self->grow_individual(p_left, p_top, p_right, p_bottom); + return dest; +} + +godot_rect2 GDAPI godot_rect2_grow_margin(const godot_rect2 *p_self, const godot_int p_margin, const godot_real p_by) { + godot_rect2 dest; + const Rect2 *self = (const Rect2 *)p_self; + *((Rect2 *)&dest) = self->grow_margin((Margin)p_margin, p_by); + return dest; +} + +godot_rect2 GDAPI godot_rect2_abs(const godot_rect2 *p_self) { + godot_rect2 dest; + const Rect2 *self = (const Rect2 *)p_self; + *((Rect2 *)&dest) = self->abs(); + return dest; +} + godot_rect2 GDAPI godot_rect2_expand(const godot_rect2 *p_self, const godot_vector2 *p_to) { godot_rect2 dest; const Rect2 *self = (const Rect2 *)p_self; diff --git a/modules/gdnative/gdnative/string.cpp b/modules/gdnative/gdnative/string.cpp index 8ca57392a3..0996633b70 100644 --- a/modules/gdnative/gdnative/string.cpp +++ b/modules/gdnative/gdnative/string.cpp @@ -1285,6 +1285,64 @@ godot_bool GDAPI godot_string_is_valid_ip_address(const godot_string *p_self) { return self->is_valid_ip_address(); } +godot_string GDAPI godot_string_dedent(const godot_string *p_self) { + const String *self = (const String *)p_self; + godot_string result; + String return_value = self->dedent(); + memnew_placement(&result, String(return_value)); + + return result; +} + +godot_string GDAPI godot_string_trim_prefix(const godot_string *p_self, const godot_string *p_prefix) { + const String *self = (const String *)p_self; + String *prefix = (String *)p_prefix; + godot_string result; + String return_value = self->trim_prefix(*prefix); + memnew_placement(&result, String(return_value)); + + return result; +} + +godot_string GDAPI godot_string_trim_suffix(const godot_string *p_self, const godot_string *p_suffix) { + const String *self = (const String *)p_self; + String *suffix = (String *)p_suffix; + godot_string result; + String return_value = self->trim_suffix(*suffix); + memnew_placement(&result, String(return_value)); + + return result; +} + +godot_string GDAPI godot_string_rstrip(const godot_string *p_self, const godot_string *p_chars) { + const String *self = (const String *)p_self; + String *chars = (String *)p_chars; + godot_string result; + String return_value = self->rstrip(*chars); + memnew_placement(&result, String(return_value)); + + return result; +} + +godot_pool_string_array GDAPI godot_string_rsplit(const godot_string *p_self, const godot_string *p_divisor, + const godot_bool p_allow_empty, const godot_int p_maxsplit) { + const String *self = (const String *)p_self; + String *divisor = (String *)p_divisor; + + godot_pool_string_array result; + memnew_placement(&result, PoolStringArray); + PoolStringArray *proxy = (PoolStringArray *)&result; + PoolStringArray::Write proxy_writer = proxy->write(); + Vector<String> tmp_result = self->rsplit(*divisor, p_allow_empty, p_maxsplit); + proxy->resize(tmp_result.size()); + + for (int i = 0; i < tmp_result.size(); i++) { + proxy_writer[i] = tmp_result[i]; + } + + return result; +} + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/gdnative_api.json b/modules/gdnative/gdnative_api.json index 16a34a9a33..c5a1fa139e 100644 --- a/modules/gdnative/gdnative_api.json +++ b/modules/gdnative/gdnative_api.json @@ -14,6 +14,183 @@ "next": null, "api": [ { + "name": "godot_color_to_abgr32", + "return_type": "godot_int", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_to_abgr64", + "return_type": "godot_int", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_to_argb64", + "return_type": "godot_int", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_to_rgba64", + "return_type": "godot_int", + "arguments": [ + ["const godot_color *", "p_self"] + ] + }, + { + "name": "godot_color_darkened", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_real", "p_amount"] + ] + }, + { + "name": "godot_color_from_hsv", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_real", "p_h"], + ["const godot_real", "p_s"], + ["const godot_real", "p_v"], + ["const godot_real", "p_a"] + ] + }, + { + "name": "godot_color_lightened", + "return_type": "godot_color", + "arguments": [ + ["const godot_color *", "p_self"], + ["const godot_real", "p_amount"] + ] + }, + { + "name": "godot_array_duplicate", + "return_type": "godot_array", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_bool", "p_deep"] + ] + }, + { + "name": "godot_array_max", + "return_type": "godot_variant", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_min", + "return_type": "godot_variant", + "arguments": [ + ["const godot_array *", "p_self"] + ] + }, + { + "name": "godot_array_shuffle", + "return_type": "void", + "arguments": [ + ["godot_array *", "p_self"] + ] + }, + { + "name": "godot_basis_slerp", + "return_type": "godot_basis", + "arguments": [ + ["const godot_basis *", "p_self"], + ["const godot_basis *", "p_b"], + ["const godot_real", "p_t"] + ] + }, + { + "name": "godot_node_path_get_as_property_path", + "return_type": "godot_node_path", + "arguments": [ + ["const godot_node_path *", "p_self"] + ] + }, + { + "name": "godot_quat_set_axis_angle", + "return_type": "void", + "arguments": [ + ["godot_quat *", "p_self"], + ["const godot_vector3 *", "p_axis"], + ["const godot_real", "p_angle"] + ] + }, + { + "name": "godot_rect2_grow_individual", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_real", "p_left"], + ["const godot_real", "p_top"], + ["const godot_real", "p_right"], + ["const godot_real", "p_bottom"] + ] + }, + { + "name": "godot_rect2_grow_margin", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"], + ["const godot_int", "p_margin"], + ["const godot_real", "p_by"] + ] + }, + { + "name": "godot_rect2_abs", + "return_type": "godot_rect2", + "arguments": [ + ["const godot_rect2 *", "p_self"] + ] + }, + { + "name": "godot_string_dedent", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"] + ] + }, + { + "name": "godot_string_trim_prefix", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_prefix"] + ] + }, + { + "name": "godot_string_trim_suffix", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_suffix"] + ] + }, + { + "name": "godot_string_rstrip", + "return_type": "godot_string", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_chars"] + ] + }, + { + "name": "godot_string_rsplit", + "return_type": "godot_pool_string_array", + "arguments": [ + ["const godot_string *", "p_self"], + ["const godot_string *", "p_divisor"], + ["const godot_bool", "p_allow_empty"], + ["const godot_int", "p_maxsplit"] + ] + }, + { "name": "godot_basis_get_quat", "return_type": "godot_quat", "arguments": [ diff --git a/modules/gdnative/gdnative_builders.py b/modules/gdnative/gdnative_builders.py index f9d1ed9dc5..ff18a3ae69 100644 --- a/modules/gdnative/gdnative_builders.py +++ b/modules/gdnative/gdnative_builders.py @@ -87,20 +87,20 @@ def _build_gdnative_api_struct_header(api): ret_val = [] if core['next']: ret_val += generate_core_extension_struct(core['next']) - + ret_val += [ 'typedef struct godot_gdnative_core_' + ('{0}_{1}'.format(core['version']['major'], core['version']['minor'])) + '_api_struct {', '\tunsigned int type;', '\tgodot_gdnative_api_version version;', '\tconst godot_gdnative_api_struct *next;', ] - + for funcdef in core['api']: args = ', '.join(['%s%s' % (_spaced(t), n) for t, n in funcdef['arguments']]) ret_val.append('\t%s(*%s)(%s);' % (_spaced(funcdef['return_type']), funcdef['name'], args)) - + ret_val += ['} godot_gdnative_core_' + '{0}_{1}'.format(core['version']['major'], core['version']['minor']) + '_api_struct;', ''] - + return ret_val @@ -171,26 +171,26 @@ def _build_gdnative_api_struct_source(api): ret_val += ['};\n'] return ret_val - - + + def get_core_struct_definition(core): ret_val = [] - + if core['next']: ret_val += get_core_struct_definition(core['next']) - + ret_val += [ 'extern const godot_gdnative_core_' + ('{0}_{1}_api_struct api_{0}_{1}'.format(core['version']['major'], core['version']['minor'])) + ' = {', '\tGDNATIVE_' + core['type'] + ',', '\t{' + str(core['version']['major']) + ', ' + str(core['version']['minor']) + '},', '\t' + ('NULL' if not core['next'] else ('(const godot_gdnative_api_struct *)& api_{0}_{1}'.format(core['version']['major'], core['version']['minor']))) + ',' ] - + for funcdef in core['api']: ret_val.append('\t%s,' % funcdef['name']) - + ret_val += ['};\n'] - + return ret_val for ext in api['extensions']: @@ -204,7 +204,7 @@ def _build_gdnative_api_struct_source(api): out += ['\t(godot_gdnative_api_struct *)&api_extension_' + name + '_struct,'] out += ['};\n'] - + if api['core']['next']: out += get_core_struct_definition(api['core']['next']) diff --git a/modules/gdnative/include/gdnative/array.h b/modules/gdnative/include/gdnative/array.h index 1e66d133b9..876b8f8e8f 100644 --- a/modules/gdnative/include/gdnative/array.h +++ b/modules/gdnative/include/gdnative/array.h @@ -130,6 +130,14 @@ godot_int GDAPI godot_array_bsearch_custom(godot_array *p_self, const godot_vari void GDAPI godot_array_destroy(godot_array *p_self); +godot_array GDAPI godot_array_duplicate(const godot_array *p_self, const godot_bool p_deep); + +godot_variant GDAPI godot_array_max(const godot_array *p_self); + +godot_variant GDAPI godot_array_min(const godot_array *p_self); + +void GDAPI godot_array_shuffle(godot_array *p_self); + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/include/gdnative/basis.h b/modules/gdnative/include/gdnative/basis.h index ebe2b1125b..6128bf3ac3 100644 --- a/modules/gdnative/include/gdnative/basis.h +++ b/modules/gdnative/include/gdnative/basis.h @@ -127,6 +127,8 @@ godot_basis GDAPI godot_basis_operator_multiply_vector(const godot_basis *p_self godot_basis GDAPI godot_basis_operator_multiply_scalar(const godot_basis *p_self, const godot_real p_b); +godot_basis GDAPI godot_basis_slerp(const godot_basis *p_self, const godot_basis *p_b, const godot_real p_t); + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/include/gdnative/color.h b/modules/gdnative/include/gdnative/color.h index 1f0ac8354d..3007dbc6e3 100644 --- a/modules/gdnative/include/gdnative/color.h +++ b/modules/gdnative/include/gdnative/color.h @@ -81,6 +81,14 @@ godot_string GDAPI godot_color_as_string(const godot_color *p_self); godot_int GDAPI godot_color_to_rgba32(const godot_color *p_self); +godot_int GDAPI godot_color_to_abgr32(const godot_color *p_self); + +godot_int GDAPI godot_color_to_abgr64(const godot_color *p_self); + +godot_int GDAPI godot_color_to_argb64(const godot_color *p_self); + +godot_int GDAPI godot_color_to_rgba64(const godot_color *p_self); + godot_int GDAPI godot_color_to_argb32(const godot_color *p_self); godot_real GDAPI godot_color_gray(const godot_color *p_self); @@ -93,6 +101,12 @@ godot_color GDAPI godot_color_linear_interpolate(const godot_color *p_self, cons godot_color GDAPI godot_color_blend(const godot_color *p_self, const godot_color *p_over); +godot_color GDAPI godot_color_darkened(const godot_color *p_self, const godot_real p_amount); + +godot_color GDAPI godot_color_from_hsv(const godot_color *p_self, const godot_real p_h, const godot_real p_s, const godot_real p_v, const godot_real p_a); + +godot_color GDAPI godot_color_lightened(const godot_color *p_self, const godot_real p_amount); + godot_string GDAPI godot_color_to_html(const godot_color *p_self, const godot_bool p_with_alpha); godot_bool GDAPI godot_color_operator_equal(const godot_color *p_self, const godot_color *p_b); diff --git a/modules/gdnative/include/gdnative/gdnative.h b/modules/gdnative/include/gdnative/gdnative.h index 616c305f25..796ced84f4 100644 --- a/modules/gdnative/include/gdnative/gdnative.h +++ b/modules/gdnative/include/gdnative/gdnative.h @@ -35,7 +35,7 @@ extern "C" { #endif -#ifdef _WIN32 +#if defined(_WIN32) || defined(__ANDROID__) #define GDCALLINGCONV #define GDAPI GDCALLINGCONV #elif defined(__APPLE__) @@ -47,7 +47,7 @@ extern "C" { #define GDCALLINGCONV __attribute__((sysv_abi)) #define GDAPI GDCALLINGCONV #endif -#else +#else // !_WIN32 && !__APPLE__ #define GDCALLINGCONV __attribute__((sysv_abi)) #define GDAPI GDCALLINGCONV #endif diff --git a/modules/gdnative/include/gdnative/node_path.h b/modules/gdnative/include/gdnative/node_path.h index 2b55e01d13..48fe5b4d3d 100644 --- a/modules/gdnative/include/gdnative/node_path.h +++ b/modules/gdnative/include/gdnative/node_path.h @@ -80,6 +80,8 @@ godot_bool GDAPI godot_node_path_is_empty(const godot_node_path *p_self); godot_bool GDAPI godot_node_path_operator_equal(const godot_node_path *p_self, const godot_node_path *p_b); +godot_node_path godot_node_path_get_as_property_path(const godot_node_path *p_self); + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/include/gdnative/quat.h b/modules/gdnative/include/gdnative/quat.h index b1290f745c..634f486e66 100644 --- a/modules/gdnative/include/gdnative/quat.h +++ b/modules/gdnative/include/gdnative/quat.h @@ -109,6 +109,8 @@ godot_bool GDAPI godot_quat_operator_equal(const godot_quat *p_self, const godot godot_quat GDAPI godot_quat_operator_neg(const godot_quat *p_self); +void GDAPI godot_quat_set_axis_angle(godot_quat *p_self, const godot_vector3 *p_axis, const godot_real p_angle); + #ifdef __cplusplus } #endif diff --git a/modules/gdnative/include/gdnative/rect2.h b/modules/gdnative/include/gdnative/rect2.h index 4adcb73e3d..47c15c80bd 100644 --- a/modules/gdnative/include/gdnative/rect2.h +++ b/modules/gdnative/include/gdnative/rect2.h @@ -77,6 +77,12 @@ godot_bool GDAPI godot_rect2_has_point(const godot_rect2 *p_self, const godot_ve godot_rect2 GDAPI godot_rect2_grow(const godot_rect2 *p_self, const godot_real p_by); +godot_rect2 GDAPI godot_rect2_grow_individual(const godot_rect2 *p_self, const godot_real p_left, const godot_real p_top, const godot_real p_right, const godot_real p_bottom); + +godot_rect2 GDAPI godot_rect2_grow_margin(const godot_rect2 *p_self, const godot_int p_margin, const godot_real p_by); + +godot_rect2 GDAPI godot_rect2_abs(const godot_rect2 *p_self); + godot_rect2 GDAPI godot_rect2_expand(const godot_rect2 *p_self, const godot_vector2 *p_to); godot_bool GDAPI godot_rect2_operator_equal(const godot_rect2 *p_self, const godot_rect2 *p_b); diff --git a/modules/gdnative/include/gdnative/string.h b/modules/gdnative/include/gdnative/string.h index 73245160c1..95ae42a9ec 100644 --- a/modules/gdnative/include/gdnative/string.h +++ b/modules/gdnative/include/gdnative/string.h @@ -246,6 +246,12 @@ godot_bool GDAPI godot_string_is_valid_identifier(const godot_string *p_self); godot_bool GDAPI godot_string_is_valid_integer(const godot_string *p_self); godot_bool GDAPI godot_string_is_valid_ip_address(const godot_string *p_self); +godot_string GDAPI godot_string_dedent(const godot_string *p_self); +godot_string GDAPI godot_string_trim_prefix(const godot_string *p_self, const godot_string *p_prefix); +godot_string GDAPI godot_string_trim_suffix(const godot_string *p_self, const godot_string *p_suffix); +godot_string GDAPI godot_string_rstrip(const godot_string *p_self, const godot_string *p_chars); +godot_pool_string_array GDAPI godot_string_rsplit(const godot_string *p_self, const godot_string *p_divisor, const godot_bool p_allow_empty, const godot_int p_maxsplit); + void GDAPI godot_string_destroy(godot_string *p_self); #ifdef __cplusplus diff --git a/modules/gdnative/nativescript/api_generator.cpp b/modules/gdnative/nativescript/api_generator.cpp index 0983c12619..8c6dace847 100644 --- a/modules/gdnative/nativescript/api_generator.cpp +++ b/modules/gdnative/nativescript/api_generator.cpp @@ -292,6 +292,7 @@ List<ClassAPI> generate_c_api_classes() { method_api.has_varargs = method_bind && method_bind->is_vararg(); // Method flags + method_api.is_virtual = false; if (method_info.flags) { const uint32_t flags = method_info.flags; method_api.is_editor = flags & METHOD_FLAG_EDITOR; diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index 641e4021d8..bcaf3f346e 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -72,11 +72,11 @@ void NativeScript::_bind_methods() { ClassDB::bind_method(D_METHOD("get_signal_documentation", "signal_name"), &NativeScript::get_signal_documentation); ClassDB::bind_method(D_METHOD("get_property_documentation", "path"), &NativeScript::get_property_documentation); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "class_name"), "set_class_name", "get_class_name"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "GDNativeLibrary"), "set_library", "get_library"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "class_name"), "set_class_name", "get_class_name"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "GDNativeLibrary"), "set_library", "get_library"); ADD_GROUP("Script Class", "script_class_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "script_class_name"), "set_script_class_name", "get_script_class_name"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "script_class_icon_path", PROPERTY_HINT_FILE), "set_script_class_icon_path", "get_script_class_icon_path"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "script_class_name"), "set_script_class_name", "get_script_class_name"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "script_class_icon_path", PROPERTY_HINT_FILE), "set_script_class_icon_path", "get_script_class_icon_path"); ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &NativeScript::_new, MethodInfo(Variant::OBJECT, "new")); } @@ -294,6 +294,10 @@ MethodInfo NativeScript::get_method_info(const StringName &p_method) const { return MethodInfo(); } +bool NativeScript::is_valid() const { + return true; +} + bool NativeScript::is_tool() const { NativeScriptDesc *script_data = get_script_desc(); @@ -1016,6 +1020,16 @@ NativeScriptLanguage::NativeScriptLanguage() { #ifdef DEBUG_ENABLED profiling = false; #endif + + _init_call_type = "nativescript_init"; + _init_call_name = "nativescript_init"; + _terminate_call_name = "nativescript_terminate"; + _noarg_call_type = "nativescript_no_arg"; + _frame_call_name = "nativescript_frame"; +#ifndef NO_THREADS + _thread_enter_call_name = "nativescript_thread_enter"; + _thread_exit_call_name = "nativescript_thread_exit"; +#endif } NativeScriptLanguage::~NativeScriptLanguage() { @@ -1701,8 +1715,7 @@ void NativeReloadNode::_notification(int p_what) { } RES ResourceFormatLoaderNativeScript::load(const String &p_path, const String &p_original_path, Error *r_error) { - ResourceFormatLoaderText rsflt; - return rsflt.load(p_path, p_original_path, r_error); + return ResourceFormatLoaderText::singleton->load(p_path, p_original_path, r_error); } void ResourceFormatLoaderNativeScript::get_recognized_extensions(List<String> *p_extensions) const { diff --git a/modules/gdnative/nativescript/nativescript.h b/modules/gdnative/nativescript/nativescript.h index ade8ffd280..e6f3c06ee5 100644 --- a/modules/gdnative/nativescript/nativescript.h +++ b/modules/gdnative/nativescript/nativescript.h @@ -160,6 +160,7 @@ public: virtual MethodInfo get_method_info(const StringName &p_method) const; virtual bool is_tool() const; + virtual bool is_valid() const; virtual ScriptLanguage *get_language() const; @@ -277,18 +278,14 @@ public: Map<String, Set<NativeScript *> > library_script_users; - const StringName _init_call_type = "nativescript_init"; - const StringName _init_call_name = "nativescript_init"; - - const StringName _terminate_call_name = "nativescript_terminate"; - - const StringName _noarg_call_type = "nativescript_no_arg"; - - const StringName _frame_call_name = "nativescript_frame"; - + StringName _init_call_type; + StringName _init_call_name; + StringName _terminate_call_name; + StringName _noarg_call_type; + StringName _frame_call_name; #ifndef NO_THREADS - const StringName _thread_enter_call_name = "nativescript_thread_enter"; - const StringName _thread_exit_call_name = "nativescript_thread_exit"; + StringName _thread_enter_call_name; + StringName _thread_exit_call_name; #endif NativeScriptLanguage(); @@ -372,11 +369,14 @@ inline NativeScriptDesc *NativeScript::get_script_desc() const { class NativeReloadNode : public Node { GDCLASS(NativeReloadNode, Node) - bool unloaded = false; + bool unloaded; public: static void _bind_methods(); void _notification(int p_what); + + NativeReloadNode() : + unloaded(false) {} }; class ResourceFormatLoaderNativeScript : public ResourceFormatLoader { diff --git a/modules/gdnative/pluginscript/pluginscript_script.h b/modules/gdnative/pluginscript/pluginscript_script.h index 31c6c4d67f..3ade8ac004 100644 --- a/modules/gdnative/pluginscript/pluginscript_script.h +++ b/modules/gdnative/pluginscript/pluginscript_script.h @@ -102,6 +102,7 @@ public: PropertyInfo get_property_info(const StringName &p_property) const; bool is_tool() const { return _tool; } + bool is_valid() const { return true; } virtual ScriptLanguage *get_language() const; diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml index 632970f8c0..4cefdbd7cb 100644 --- a/modules/gdscript/doc_classes/GDScript.xml +++ b/modules/gdscript/doc_classes/GDScript.xml @@ -8,7 +8,7 @@ [method new] creates a new instance of the script. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/scripting/gdscript/index.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/index.html</link> </tutorials> <demos> </demos> diff --git a/modules/gdscript/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp index c199667270..e4aee842ba 100644 --- a/modules/gdscript/editor/gdscript_highlighter.cpp +++ b/modules/gdscript/editor/gdscript_highlighter.cpp @@ -72,6 +72,7 @@ Map<int, TextEdit::HighlighterInfo> GDScriptSyntaxHighlighter::_get_line_syntax_ bool in_word = false; bool in_function_name = false; bool in_variable_declaration = false; + bool in_function_args = false; bool in_member_variable = false; bool in_node_path = false; bool is_hex_notation = false; @@ -220,17 +221,24 @@ Map<int, TextEdit::HighlighterInfo> GDScriptSyntaxHighlighter::_get_line_syntax_ } if (is_symbol) { - in_function_name = false; - in_member_variable = false; - if (expect_type && str[j] != ' ' && str[j] != '\t' && str[j] != ':') { + if (in_function_name) { + in_function_args = true; + } + + if (in_function_args && str[j] == ')') { + in_function_args = false; + } + + if (expect_type && prev_is_char) { expect_type = false; } + if (j > 0 && str[j] == '>' && str[j - 1] == '-') { expect_type = true; } - if (in_variable_declaration || previous_text == "(" || previous_text == ",") { + if (in_variable_declaration || in_function_args) { int k = j; // Skip space while (k < str.length() && (str[k] == '\t' || str[k] == ' ')) { @@ -244,6 +252,8 @@ Map<int, TextEdit::HighlighterInfo> GDScriptSyntaxHighlighter::_get_line_syntax_ } in_variable_declaration = false; + in_function_name = false; + in_member_variable = false; } if (!in_node_path && in_region == -1 && str[j] == '$') { diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 48c1760662..538249c8e2 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -421,31 +421,40 @@ bool GDScript::_update_exports() { base_cache = Ref<GDScript>(); } - if (c->extends_used && String(c->extends_file) != "" && String(c->extends_file) != get_path()) { - - String path = c->extends_file; - if (path.is_rel_path()) { - - String base = get_path(); - if (base == "" || base.is_rel_path()) { - - ERR_PRINT(("Could not resolve relative path for parent class: " + path).utf8().get_data()); - } else { - path = base.get_base_dir().plus_file(path); + if (c->extends_used) { + String path = ""; + if (String(c->extends_file) != "" && String(c->extends_file) != get_path()) { + path = c->extends_file; + if (path.is_rel_path()) { + + String base = get_path(); + if (base == "" || base.is_rel_path()) { + + ERR_PRINT(("Could not resolve relative path for parent class: " + path).utf8().get_data()); + } else { + path = base.get_base_dir().plus_file(path); + } } + } else if (c->extends_class.size() != 0) { + String base = c->extends_class[0]; + + if (ScriptServer::is_global_class(base)) + path = ScriptServer::get_global_class_path(base); } - if (path != get_path()) { + if (path != "") { + if (path != get_path()) { - Ref<GDScript> bf = ResourceLoader::load(path); + Ref<GDScript> bf = ResourceLoader::load(path); - if (bf.is_valid()) { + if (bf.is_valid()) { - base_cache = bf; - bf->inheriters_cache.insert(get_instance_id()); + base_cache = bf; + bf->inheriters_cache.insert(get_instance_id()); + } + } else { + ERR_PRINT(("Path extending itself in " + path).utf8().get_data()); } - } else { - ERR_PRINT(("Path extending itself in " + path).utf8().get_data()); } } @@ -469,8 +478,15 @@ bool GDScript::_update_exports() { for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) { E->get()->set_build_failed(true); } + return false; } } else { + if (!valid) { + for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) { + E->get()->set_build_failed(true); + } + return false; + } } if (base_cache.is_valid()) { @@ -851,7 +867,6 @@ bool GDScript::has_script_signal(const StringName &p_signal) const { else if (base_cache.is_valid()) { return base_cache->has_script_signal(p_signal); } - #endif return false; } @@ -2065,12 +2080,12 @@ GDScriptLanguage::GDScriptLanguage() { _debug_call_stack_pos = 0; int dmcs = GLOBAL_DEF("debug/settings/gdscript/max_call_stack", 1024); + ProjectSettings::get_singleton()->set_custom_property_info("debug/settings/gdscript/max_call_stack", PropertyInfo(Variant::INT, "debug/settings/gdscript/max_call_stack", PROPERTY_HINT_RANGE, "1024,4096,1,or_greater")); //minimum is 1024 + if (ScriptDebugger::get_singleton()) { //debugging enabled! _debug_max_call_stack = dmcs; - if (_debug_max_call_stack < 1024) - _debug_max_call_stack = 1024; _call_stack = memnew_arr(CallLevel, _debug_max_call_stack + 1); } else { @@ -2081,6 +2096,7 @@ GDScriptLanguage::GDScriptLanguage() { #ifdef DEBUG_ENABLED GLOBAL_DEF("debug/gdscript/warnings/enable", true); GLOBAL_DEF("debug/gdscript/warnings/treat_warnings_as_errors", false); + GLOBAL_DEF("debug/gdscript/completion/autocomplete_setters_and_getters", false); for (int i = 0; i < (int)GDScriptWarning::WARNING_MAX; i++) { String warning = GDScriptWarning::get_name_from_code((GDScriptWarning::Code)i).to_lower(); GLOBAL_DEF("debug/gdscript/warnings/" + warning, !warning.begins_with("unsafe_")); diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index f344beba9f..752d660ffb 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -141,7 +141,7 @@ protected: static void _bind_methods(); public: - bool is_valid() const { return valid; } + virtual bool is_valid() const { return valid; } const Map<StringName, Ref<GDScript> > &get_subclasses() const { return subclasses; } const Map<StringName, Variant> &get_constants() const { return constants; } diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index 310c4e21f2..caa7fbfeca 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -132,7 +132,7 @@ GDScriptDataType GDScriptCompiler::_gdtype_from_datatype(const GDScriptParser::D result.kind = GDScriptDataType::SCRIPT; result.script_type = p_datatype.script_type; result.native_type = result.script_type->get_instance_base_type(); - } + } break; case GDScriptParser::DataType::GDSCRIPT: { result.kind = GDScriptDataType::GDSCRIPT; result.script_type = p_datatype.script_type; diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index ddd9e6b01c..068e8d2d92 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -1308,37 +1308,38 @@ static bool _guess_identifier_type(const GDScriptCompletionContext &p_context, c return false; } - // Check ClassDB - if (ClassDB::class_exists(p_identifier)) { - r_type.type.has_type = true; - r_type.type.kind = GDScriptParser::DataType::NATIVE; - r_type.type.native_type = p_identifier; - if (Engine::get_singleton()->has_singleton(p_identifier)) { - r_type.type.is_meta_type = false; - r_type.value = Engine::get_singleton()->get_singleton_object(p_identifier); - } else { - r_type.type.is_meta_type = true; - int idx = GDScriptLanguage::get_singleton()->get_global_map()[p_identifier]; - r_type.value = GDScriptLanguage::get_singleton()->get_global_array()[idx]; + for (int i = 0; i < 2; i++) { + StringName target_id; + switch (i) { + case 0: + // Check ClassDB + target_id = p_identifier; + break; + case 1: + // ClassDB again for underscore-prefixed classes + target_id = String("_") + p_identifier; + break; } - return true; - } - // ClassDB again for underscore-prefixed classes - StringName under_id = String("_") + p_identifier; - if (ClassDB::class_exists(under_id)) { - r_type.type.has_type = true; - r_type.type.kind = GDScriptParser::DataType::NATIVE; - r_type.type.native_type = p_identifier; - if (Engine::get_singleton()->has_singleton(p_identifier)) { - r_type.type.is_meta_type = false; - r_type.value = Engine::get_singleton()->get_singleton_object(p_identifier); - } else { - r_type.type.is_meta_type = true; - int idx = GDScriptLanguage::get_singleton()->get_global_map()[p_identifier]; - r_type.value = GDScriptLanguage::get_singleton()->get_global_array()[idx]; + if (ClassDB::class_exists(target_id)) { + r_type.type.has_type = true; + r_type.type.kind = GDScriptParser::DataType::NATIVE; + r_type.type.native_type = target_id; + if (Engine::get_singleton()->has_singleton(target_id)) { + r_type.type.is_meta_type = false; + r_type.value = Engine::get_singleton()->get_singleton_object(target_id); + } else { + r_type.type.is_meta_type = true; + const Map<StringName, int>::Element *target_elem = GDScriptLanguage::get_singleton()->get_global_map().find(target_id); + // Check because classes like EditorNode are in ClassDB by now, but unknown to GDScript + if (!target_elem) { + return false; + } + int idx = target_elem->get(); + r_type.value = GDScriptLanguage::get_singleton()->get_global_array()[idx]; + } + return true; } - return true; } // Check autoload singletons @@ -1999,7 +2000,8 @@ static void _find_identifiers_in_base(const GDScriptCompletionContext &p_context if (!_static) { List<MethodInfo> methods; - ClassDB::get_method_list(type, &methods, false, true); + bool is_autocompleting_getters = GLOBAL_GET("debug/gdscript/completion/autocomplete_setters_and_getters").booleanize(); + ClassDB::get_method_list(type, &methods, false, !is_autocompleting_getters); for (List<MethodInfo>::Element *E = methods.front(); E; E = E->next()) { if (E->get().name.begins_with("_")) { continue; diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp index b935861652..cd6c21a629 100644 --- a/modules/gdscript/gdscript_function.cpp +++ b/modules/gdscript/gdscript_function.cpp @@ -155,6 +155,7 @@ String GDScriptFunction::_get_call_error(const Variant::CallError &p_err, const return err_text; } +#ifdef DEBUG_ENABLED static String _get_var_type(const Variant *p_type) { String basestr; @@ -164,7 +165,6 @@ static String _get_var_type(const Variant *p_type) { if (!bobj) { basestr = "null instance"; } else { -#ifdef DEBUG_ENABLED if (ObjectDB::instance_validate(bobj)) { if (bobj->get_script_instance()) basestr = bobj->get_class() + " (" + bobj->get_script_instance()->get_script()->get_path().get_file() + ")"; @@ -173,10 +173,6 @@ static String _get_var_type(const Variant *p_type) { } else { basestr = "previously freed instance"; } - -#else - basestr = "Object"; -#endif } } else { @@ -185,6 +181,7 @@ static String _get_var_type(const Variant *p_type) { return basestr; } +#endif #if defined(__GNUC__) #define OPCODES_TABLE \ @@ -278,7 +275,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a #endif uint32_t alloca_size = 0; - GDScript *_class; + GDScript *script; int ip = 0; int line = _initial_line; @@ -289,7 +286,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a line = p_state->line; ip = p_state->ip; alloca_size = p_state->stack.size(); - _class = p_state->_class; + script = p_state->script.ptr(); p_instance = p_state->instance; defarg = p_state->defarg; self = p_state->self; @@ -371,9 +368,9 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a } else { self = p_instance->owner; } - _class = p_instance->script.ptr(); + script = p_instance->script.ptr(); } else { - _class = _script; + script = _script; } } @@ -398,7 +395,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a #define GET_VARIANT_PTR(m_v, m_code_ofs) \ Variant *m_v; \ - m_v = _get_variant(_code_ptr[ip + m_code_ofs], p_instance, _class, self, stack, err_text); \ + m_v = _get_variant(_code_ptr[ip + m_code_ofs], p_instance, script, self, stack, err_text); \ if (unlikely(!m_v)) \ OPCODE_BREAK; @@ -407,7 +404,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a #define CHECK_SPACE(m_space) #define GET_VARIANT_PTR(m_v, m_code_ofs) \ Variant *m_v; \ - m_v = _get_variant(_code_ptr[ip + m_code_ofs], p_instance, _class, self, stack, err_text); + m_v = _get_variant(_code_ptr[ip + m_code_ofs], p_instance, script, self, stack, err_text); #endif @@ -422,8 +419,8 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a profile.call_count++; profile.frame_call_count++; } -#endif bool exit_ok = false; +#endif #ifdef DEBUG_ENABLED OPCODE_WHILE(ip < _code_size) { @@ -480,56 +477,53 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a GET_VARIANT_PTR(dst, 3); #ifdef DEBUG_ENABLED - if (a->get_type() != Variant::OBJECT || a->operator Object *() == NULL) { - - err_text = "Left operand of 'is' is not an instance of anything."; - OPCODE_BREAK; - } if (b->get_type() != Variant::OBJECT || b->operator Object *() == NULL) { err_text = "Right operand of 'is' is not a class."; OPCODE_BREAK; } #endif - Object *obj_A = *a; - Object *obj_B = *b; - - GDScript *scr_B = Object::cast_to<GDScript>(obj_B); bool extends_ok = false; + if (a->get_type() == Variant::OBJECT && a->operator Object *() != NULL) { + Object *obj_A = *a; + Object *obj_B = *b; - if (scr_B) { - //if B is a script, the only valid condition is that A has an instance which inherits from the script - //in other situation, this shoul return false. + GDScript *scr_B = Object::cast_to<GDScript>(obj_B); - if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language() == GDScriptLanguage::get_singleton()) { + if (scr_B) { + //if B is a script, the only valid condition is that A has an instance which inherits from the script + //in other situation, this shoul return false. - GDScript *cmp = static_cast<GDScript *>(obj_A->get_script_instance()->get_script().ptr()); - //bool found=false; - while (cmp) { + if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language() == GDScriptLanguage::get_singleton()) { - if (cmp == scr_B) { - //inherits from script, all ok - extends_ok = true; - break; - } + GDScript *cmp = static_cast<GDScript *>(obj_A->get_script_instance()->get_script().ptr()); + //bool found=false; + while (cmp) { - cmp = cmp->_base; + if (cmp == scr_B) { + //inherits from script, all ok + extends_ok = true; + break; + } + + cmp = cmp->_base; + } } - } - } else { + } else { - GDScriptNativeClass *nc = Object::cast_to<GDScriptNativeClass>(obj_B); + GDScriptNativeClass *nc = Object::cast_to<GDScriptNativeClass>(obj_B); #ifdef DEBUG_ENABLED - if (!nc) { + if (!nc) { - err_text = "Right operand of 'is' is not a class (type: '" + obj_B->get_class() + "')."; - OPCODE_BREAK; - } + err_text = "Right operand of 'is' is not a class (type: '" + obj_B->get_class() + "')."; + OPCODE_BREAK; + } #endif - extends_ok = ClassDB::is_parent_class(obj_A->get_class_name(), nc->get_name()); + extends_ok = ClassDB::is_parent_class(obj_A->get_class_name(), nc->get_name()); + } } *dst = extends_ok; @@ -682,8 +676,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a GET_VARIANT_PTR(src, 2); bool valid; +#ifndef DEBUG_ENABLED + ClassDB::set_property(p_instance->owner, *index, *src, &valid); +#else bool ok = ClassDB::set_property(p_instance->owner, *index, *src, &valid); -#ifdef DEBUG_ENABLED if (!ok) { err_text = "Internal error setting property: " + String(*index); OPCODE_BREAK; @@ -703,9 +699,11 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a GD_ERR_BREAK(indexname < 0 || indexname >= _global_names_count); const StringName *index = &_global_names_ptr[indexname]; GET_VARIANT_PTR(dst, 2); - bool ok = ClassDB::get_property(p_instance->owner, *index, *dst); -#ifdef DEBUG_ENABLED +#ifndef DEBUG_ENABLED + ClassDB::get_property(p_instance->owner, *index, *dst); +#else + bool ok = ClassDB::get_property(p_instance->owner, *index, *dst); if (!ok) { err_text = "Internal error getting property: " + String(*index); OPCODE_BREAK; @@ -752,13 +750,13 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a OPCODE(OPCODE_ASSIGN_TYPED_BUILTIN) { CHECK_SPACE(4); - Variant::Type var_type = (Variant::Type)_code_ptr[ip + 1]; GET_VARIANT_PTR(dst, 2); GET_VARIANT_PTR(src, 3); +#ifdef DEBUG_ENABLED + Variant::Type var_type = (Variant::Type)_code_ptr[ip + 1]; GD_ERR_BREAK(var_type < 0 || var_type >= Variant::VARIANT_MAX); -#ifdef DEBUG_ENABLED if (src->get_type() != var_type) { if (Variant::can_convert_strict(src->get_type(), var_type)) { Variant::CallError ce; @@ -782,11 +780,11 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a OPCODE(OPCODE_ASSIGN_TYPED_NATIVE) { CHECK_SPACE(4); - GET_VARIANT_PTR(type, 1); GET_VARIANT_PTR(dst, 2); GET_VARIANT_PTR(src, 3); #ifdef DEBUG_ENABLED + GET_VARIANT_PTR(type, 1); GDScriptNativeClass *nc = Object::cast_to<GDScriptNativeClass>(type->operator Object *()); GD_ERR_BREAK(!nc); if (src->get_type() != Variant::OBJECT && src->get_type() != Variant::NIL) { @@ -811,11 +809,11 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a OPCODE(OPCODE_ASSIGN_TYPED_SCRIPT) { CHECK_SPACE(4); - GET_VARIANT_PTR(type, 1); GET_VARIANT_PTR(dst, 2); GET_VARIANT_PTR(src, 3); #ifdef DEBUG_ENABLED + GET_VARIANT_PTR(type, 1); Script *base_type = Object::cast_to<Script>(type->operator Object *()); GD_ERR_BREAK(!base_type); @@ -1255,11 +1253,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a gdfs->state.stack_size = _stack_size; gdfs->state.self = self; gdfs->state.alloca_size = alloca_size; - gdfs->state._class = _class; + gdfs->state.script = Ref<GDScript>(_script); gdfs->state.ip = ip + ipofs; gdfs->state.line = line; gdfs->state.instance_id = (p_instance && p_instance->get_owner()) ? p_instance->get_owner()->get_instance_id() : 0; - gdfs->state.script_id = _class->get_instance_id(); //gdfs->state.result_pos=ip+ipofs-1; gdfs->state.defarg = defarg; gdfs->state.instance = p_instance; @@ -1282,10 +1279,11 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a OPCODE_BREAK; } #endif + Object *obj = argobj->operator Object *(); String signal = argname->operator String(); -#ifdef DEBUG_ENABLED +#ifdef DEBUG_ENABLED if (!obj) { err_text = "First argument of yield() is null."; OPCODE_BREAK; @@ -1302,17 +1300,19 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a OPCODE_BREAK; } -#endif Error err = obj->connect(signal, gdfs.ptr(), "_signal_callback", varray(gdfs), Object::CONNECT_ONESHOT); -#ifdef DEBUG_ENABLED if (err != OK) { err_text = "Error connecting to signal: " + signal + " during yield()."; OPCODE_BREAK; } +#else + obj->connect(signal, gdfs.ptr(), "_signal_callback", varray(gdfs), Object::CONNECT_ONESHOT); #endif } +#ifdef DEBUG_ENABLED exit_ok = true; +#endif OPCODE_BREAK; } @@ -1389,7 +1389,9 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a CHECK_SPACE(2); GET_VARIANT_PTR(r, 1); retvalue = *r; +#ifdef DEBUG_ENABLED exit_ok = true; +#endif OPCODE_BREAK; } @@ -1461,9 +1463,9 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a OPCODE(OPCODE_ASSERT) { CHECK_SPACE(2); - GET_VARIANT_PTR(test, 1); #ifdef DEBUG_ENABLED + GET_VARIANT_PTR(test, 1); bool result = test->booleanize(); if (!result) { @@ -1518,8 +1520,9 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a DISPATCH_OPCODE; OPCODE(OPCODE_END) { - +#ifdef DEBUG_ENABLED exit_ok = true; +#endif OPCODE_BREAK; } @@ -1542,8 +1545,8 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a String err_file; if (p_instance) err_file = p_instance->script->path; - else if (_class) - err_file = _class->path; + else if (script) + err_file = script->path; if (err_file == "") err_file = "<built-in>"; String err_func = name; @@ -1757,17 +1760,14 @@ GDScriptFunction::~GDScriptFunction() { Variant GDScriptFunctionState::_signal_callback(const Variant **p_args, int p_argcount, Variant::CallError &r_error) { -#ifdef DEBUG_ENABLED if (state.instance_id && !ObjectDB::get_instance(state.instance_id)) { +#ifdef DEBUG_ENABLED ERR_EXPLAIN("Resumed after yield, but class instance is gone"); ERR_FAIL_V(Variant()); - } - - if (state.script_id && !ObjectDB::get_instance(state.script_id)) { - ERR_EXPLAIN("Resumed after yield, but script is gone"); - ERR_FAIL_V(Variant()); - } +#else + return Variant(); #endif + } Variant arg; r_error.error = Variant::CallError::CALL_OK; @@ -1837,9 +1837,6 @@ bool GDScriptFunctionState::is_valid(bool p_extended_check) const { //class instance gone? if (state.instance_id && !ObjectDB::get_instance(state.instance_id)) return false; - //script gone? - if (state.script_id && !ObjectDB::get_instance(state.script_id)) - return false; } return true; @@ -1848,17 +1845,14 @@ bool GDScriptFunctionState::is_valid(bool p_extended_check) const { Variant GDScriptFunctionState::resume(const Variant &p_arg) { ERR_FAIL_COND_V(!function, Variant()); -#ifdef DEBUG_ENABLED if (state.instance_id && !ObjectDB::get_instance(state.instance_id)) { +#ifdef DEBUG_ENABLED ERR_EXPLAIN("Resumed after yield, but class instance is gone"); ERR_FAIL_V(Variant()); - } - - if (state.script_id && !ObjectDB::get_instance(state.script_id)) { - ERR_EXPLAIN("Resumed after yield, but script is gone"); - ERR_FAIL_V(Variant()); - } +#else + return Variant(); #endif + } state.result = p_arg; Variant::CallError err; diff --git a/modules/gdscript/gdscript_function.h b/modules/gdscript/gdscript_function.h index bfb6d673f1..5509edf24a 100644 --- a/modules/gdscript/gdscript_function.h +++ b/modules/gdscript/gdscript_function.h @@ -272,15 +272,13 @@ private: public: struct CallState { - ObjectID instance_id; //by debug only - ObjectID script_id; - + ObjectID instance_id; GDScriptInstance *instance; Vector<uint8_t> stack; int stack_size; Variant self; uint32_t alloca_size; - GDScript *_class; + Ref<GDScript> script; int ip; int line; int defarg; diff --git a/modules/gdscript/gdscript_functions.cpp b/modules/gdscript/gdscript_functions.cpp index 5af9bbc05f..9ff33594ce 100644 --- a/modules/gdscript/gdscript_functions.cpp +++ b/modules/gdscript/gdscript_functions.cpp @@ -106,6 +106,8 @@ const char *GDScriptFunctions::get_func_name(Function p_func) { "printerr", "printraw", "print_debug", + "push_error", + "push_warning", "var2str", "str2var", "var2bytes", @@ -707,13 +709,40 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ ScriptLanguage *script = GDScriptLanguage::get_singleton(); if (script->debug_get_stack_level_count() > 0) { - str += "\n\t"; - str += "At: " + script->debug_get_stack_level_source(0) + ":" + itos(script->debug_get_stack_level_line(0)); // + " in function '" + script->debug_get_stack_level_function(0) + "'"; + str += "\n At: " + script->debug_get_stack_level_source(0) + ":" + itos(script->debug_get_stack_level_line(0)) + ":" + script->debug_get_stack_level_function(0) + "()"; } print_line(str); r_ret = Variant(); } break; + case PUSH_ERROR: { + VALIDATE_ARG_COUNT(1); + if (p_args[0]->get_type() != Variant::STRING) { + r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument = 0; + r_error.expected = Variant::STRING; + r_ret = Variant(); + break; + } + + String message = *p_args[0]; + ERR_PRINTS(message); + r_ret = Variant(); + } break; + case PUSH_WARNING: { + VALIDATE_ARG_COUNT(1); + if (p_args[0]->get_type() != Variant::STRING) { + r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument = 0; + r_error.expected = Variant::STRING; + r_ret = Variant(); + break; + } + + String message = *p_args[0]; + WARN_PRINTS(message); + r_ret = Variant(); + } break; case VAR_TO_STR: { VALIDATE_ARG_COUNT(1); String vars; @@ -729,22 +758,14 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ r_ret = Variant(); return; } + r_ret = *p_args[0]; VariantParser::StreamString ss; ss.s = *p_args[0]; String errs; int line; - Error err = VariantParser::parse(&ss, r_ret, errs, line); - - if (err != OK) { - r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument = 0; - r_error.expected = Variant::STRING; - r_ret = "Parse error at line " + itos(line) + ": " + errs; - return; - } - + (void)VariantParser::parse(&ss, r_ret, errs, line); } break; case VAR_TO_BYTES: { VALIDATE_ARG_COUNT(1); @@ -1754,11 +1775,25 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) { return mi; } break; + case PUSH_ERROR: { + + MethodInfo mi(Variant::NIL, "push_error", PropertyInfo(Variant::STRING, "message")); + mi.return_val.type = Variant::NIL; + return mi; + + } break; + case PUSH_WARNING: { + + MethodInfo mi(Variant::NIL, "push_warning", PropertyInfo(Variant::STRING, "message")); + mi.return_val.type = Variant::NIL; + return mi; + + } break; case VAR_TO_STR: { + MethodInfo mi("var2str", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT)); mi.return_val.type = Variant::STRING; return mi; - } break; case STR_TO_VAR: { @@ -1768,10 +1803,10 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) { return mi; } break; case VAR_TO_BYTES: { + MethodInfo mi("var2bytes", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT)); mi.return_val.type = Variant::POOL_BYTE_ARRAY; return mi; - } break; case BYTES_TO_VAR: { diff --git a/modules/gdscript/gdscript_functions.h b/modules/gdscript/gdscript_functions.h index e920dd4ece..33d5f27230 100644 --- a/modules/gdscript/gdscript_functions.h +++ b/modules/gdscript/gdscript_functions.h @@ -97,6 +97,8 @@ public: TEXT_PRINTERR, TEXT_PRINTRAW, TEXT_PRINT_DEBUG, + PUSH_ERROR, + PUSH_WARNING, VAR_TO_STR, STR_TO_VAR, VAR_TO_BYTES, @@ -117,7 +119,6 @@ public: LEN, IS_INSTANCE_VALID, FUNC_MAX - }; static const char *get_func_name(Function p_func); diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 2fa5084d84..0926c1a1ab 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -56,7 +56,9 @@ T *GDScriptParser::alloc_node() { return t; } +#ifdef DEBUG_ENABLED static String _find_function_name(const GDScriptParser::OperatorNode *p_call); +#endif // DEBUG_ENABLED bool GDScriptParser::_end_statement() { @@ -677,7 +679,7 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s if (tokenizer->get_token() == GDScriptTokenizer::TK_BUILT_IN_TYPE) { Variant::Type ct = tokenizer->get_token_type(); - if (p_parsing_constant == false) { + if (!p_parsing_constant) { if (ct == Variant::ARRAY) { if (tokenizer->get_token(2) == GDScriptTokenizer::TK_PARENTHESIS_CLOSE) { ArrayNode *arr = alloc_node<ArrayNode>(); @@ -747,7 +749,6 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s while (!bfn && b) { if (b->variables.has(identifier)) { IdentifierNode *id = alloc_node<IdentifierNode>(); - LocalVarNode *lv = b->variables[identifier]; id->name = identifier; id->declared_block = b; id->line = id_line; @@ -755,6 +756,7 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s bfn = true; #ifdef DEBUG_ENABLED + LocalVarNode *lv = b->variables[identifier]; switch (tokenizer->get_token()) { case GDScriptTokenizer::TK_OP_ASSIGN_ADD: case GDScriptTokenizer::TK_OP_ASSIGN_BIT_AND: @@ -3750,6 +3752,19 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { BlockNode *block = alloc_node<BlockNode>(); block->parent_class = p_class; + FunctionNode *function = alloc_node<FunctionNode>(); + function->name = name; + function->arguments = arguments; + function->argument_types = argument_types; + function->default_values = default_values; + function->_static = _static; + function->line = fnline; +#ifdef DEBUG_ENABLED + function->arguments_usage = arguments_usage; +#endif // DEBUG_ENABLED + function->rpc_mode = rpc_mode; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; + if (name == "_init") { if (_static) { @@ -3780,7 +3795,9 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { parenthesis++; while (true) { + current_function = function; Node *arg = _parse_and_reduce_expression(p_class, _static); + current_function = NULL; cparent->arguments.push_back(arg); if (tokenizer->get_token() == GDScriptTokenizer::TK_COMMA) { @@ -3824,19 +3841,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } - FunctionNode *function = alloc_node<FunctionNode>(); - function->name = name; function->return_type = return_type; - function->arguments = arguments; - function->argument_types = argument_types; - function->default_values = default_values; - function->_static = _static; - function->line = fnline; -#ifdef DEBUG_ENABLED - function->arguments_usage = arguments_usage; -#endif // DEBUG_ENABLED - function->rpc_mode = rpc_mode; - rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; if (_static) p_class->static_functions.push_back(function); @@ -4351,6 +4356,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { current_export.type = Variant::INT; current_export.hint = is_flags ? PROPERTY_HINT_FLAGS : PROPERTY_HINT_ENUM; + current_export.usage |= PROPERTY_USAGE_SCRIPT_VARIABLE; Dictionary enum_values = constant; List<Variant> keys; @@ -4837,6 +4843,21 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { tokenizer->advance(); if (tokenizer->is_token_literal(0, true)) { enum_name = tokenizer->get_token_literal(); + + if (current_class->constant_expressions.has(enum_name)) { + _set_error("A constant named '" + String(enum_name) + "' already exists in this class (at line: " + + itos(current_class->constant_expressions[enum_name].expression->line) + ")."); + return; + } + + for (int i = 0; i < current_class->variables.size(); i++) { + if (current_class->variables[i].identifier == enum_name) { + _set_error("A variable named '" + String(enum_name) + "' already exists in this class (at line: " + + itos(current_class->variables[i].line) + ")."); + return; + } + } + tokenizer->advance(); } if (tokenizer->get_token() != GDScriptTokenizer::TK_CURLY_BRACKET_OPEN) { @@ -4863,26 +4884,12 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } else { // tokenizer->is_token_literal(0, true) - ClassNode::Constant constant; - StringName const_id = tokenizer->get_token_literal(); - if (current_class->constant_expressions.has(const_id)) { - _set_error("A constant named '" + String(const_id) + "' already exists in this class (at line: " + - itos(current_class->constant_expressions[const_id].expression->line) + ")."); - return; - } - - for (int i = 0; i < current_class->variables.size(); i++) { - if (current_class->variables[i].identifier == const_id) { - _set_error("A variable named '" + String(const_id) + "' already exists in this class (at line: " + - itos(current_class->variables[i].line) + ")."); - return; - } - } - tokenizer->advance(); + ConstantNode *enum_value_expr; + if (tokenizer->get_token() == GDScriptTokenizer::TK_OP_ASSIGN) { tokenizer->advance(); @@ -4899,23 +4906,20 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } - ConstantNode *subexpr_const = static_cast<ConstantNode *>(subexpr); + enum_value_expr = static_cast<ConstantNode *>(subexpr); - if (subexpr_const->value.get_type() != Variant::INT) { + if (enum_value_expr->value.get_type() != Variant::INT) { _set_error("Expected an int value for enum"); return; } - last_assign = subexpr_const->value; - - constant.expression = subexpr_const; + last_assign = enum_value_expr->value; } else { last_assign = last_assign + 1; - ConstantNode *cn = alloc_node<ConstantNode>(); - cn->value = last_assign; - cn->datatype = _type_from_variant(cn->value); - constant.expression = cn; + enum_value_expr = alloc_node<ConstantNode>(); + enum_value_expr->value = last_assign; + enum_value_expr->datatype = _type_from_variant(enum_value_expr->value); } if (tokenizer->get_token() == GDScriptTokenizer::TK_COMMA) { @@ -4923,14 +4927,29 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { } if (enum_name != "") { - const ConstantNode *cn = static_cast<const ConstantNode *>(constant.expression); - enum_dict[const_id] = cn->value; - } + enum_dict[const_id] = enum_value_expr->value; + } else { + if (current_class->constant_expressions.has(const_id)) { + _set_error("A constant named '" + String(const_id) + "' already exists in this class (at line: " + + itos(current_class->constant_expressions[const_id].expression->line) + ")."); + return; + } + + for (int i = 0; i < current_class->variables.size(); i++) { + if (current_class->variables[i].identifier == const_id) { + _set_error("A variable named '" + String(const_id) + "' already exists in this class (at line: " + + itos(current_class->variables[i].line) + ")."); + return; + } + } - constant.type.has_type = true; - constant.type.kind = DataType::BUILTIN; - constant.type.builtin_type = Variant::INT; - p_class->constant_expressions.insert(const_id, constant); + ClassNode::Constant constant; + constant.type.has_type = true; + constant.type.kind = DataType::BUILTIN; + constant.type.builtin_type = Variant::INT; + constant.expression = enum_value_expr; + p_class->constant_expressions.insert(const_id, constant); + } } } @@ -6416,6 +6435,10 @@ bool GDScriptParser::_get_function_signature(DataType &p_base_type, const String StringName native; if (p_base_type.kind == DataType::GDSCRIPT) { base_gdscript = p_base_type.script_type; + if (base_gdscript.is_null() || !base_gdscript->is_valid()) { + // GDScript wasn't properly compÃled, don't bother trying + return false; + } } else if (p_base_type.kind == DataType::SCRIPT) { base_script = p_base_type.script_type; } else if (p_base_type.kind == DataType::NATIVE) { @@ -6456,6 +6479,12 @@ bool GDScriptParser::_get_function_signature(DataType &p_base_type, const String base_script = base_script->get_base_script(); } + if (native == StringName()) { + // Empty native class, might happen in some Script implementations + // Just ignore it + return false; + } + #ifdef DEBUG_METHODS_ENABLED // Only native remains @@ -6707,9 +6736,15 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat } } + bool rets = false; return_type.has_type = true; return_type.kind = DataType::BUILTIN; - return_type.builtin_type = Variant::get_method_return_type(base_type.builtin_type, callee_name); + return_type.builtin_type = Variant::get_method_return_type(base_type.builtin_type, callee_name, &rets); + // If the method returns, but it might return any type, (Variant::NIL), pretend we don't know the type. + // At least make sure we know that it returns + if (rets && return_type.builtin_type == Variant::NIL) { + return_type.has_type = false; + } break; } @@ -6892,6 +6927,10 @@ bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringN Ref<GDScript> gds; if (base_type.kind == DataType::GDSCRIPT) { gds = base_type.script_type; + if (gds.is_null() || !gds->is_valid()) { + // GDScript wasn't properly compÃled, don't bother trying + return false; + } } Ref<Script> scr; @@ -6954,6 +6993,12 @@ bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringN scr = scr->get_base_script(); } + if (native == StringName()) { + // Empty native class, might happen in some Script implementations + // Just ignore it + return false; + } + // Check ClassDB if (!ClassDB::class_exists(native)) { native = "_" + native.operator String(); @@ -7072,7 +7117,6 @@ GDScriptParser::DataType GDScriptParser::_reduce_identifier_type(const DataType DataType member_type; for (int i = 0; i < current_class->variables.size(); i++) { - ClassNode::Member m = current_class->variables[i]; if (current_class->variables[i].identifier == p_identifier) { member_type = current_class->variables[i].data_type; current_class->variables.write[i].usages += 1; diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index 77e1b7290e..c37142b3c1 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -128,8 +128,8 @@ const char *GDScriptTokenizer::token_names[TK_MAX] = { "'.'", "'?'", "':'", - "'->'", "'$'", + "'->'", "'\\n'", "PI", "TAU", diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index f13479940d..9b9088dd82 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -10,7 +10,7 @@ A GridMap is split into a sparse collection of octants for efficient rendering and physics processing. Every octant has the same dimensions and can contain several cells. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/tutorials/3d/using_gridmaps.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html</link> </tutorials> <demos> </demos> diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index a8fdf8cf1f..274a2f0249 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -892,7 +892,7 @@ void GridMap::_bind_methods() { ClassDB::bind_method(D_METHOD("make_baked_meshes", "gen_lightmap_uv", "lightmap_uv_texel_size"), &GridMap::make_baked_meshes, DEFVAL(false), DEFVAL(0.1)); #ifndef DISABLE_DEPRECATED - ADD_PROPERTYNO(PropertyInfo(Variant::OBJECT, "theme", PROPERTY_HINT_RESOURCE_TYPE, "MeshLibrary", 0), "set_theme", "get_theme"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "theme", PROPERTY_HINT_RESOURCE_TYPE, "MeshLibrary", 0), "set_theme", "get_theme"); #endif // DISABLE_DEPRECATED ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh_library", PROPERTY_HINT_RESOURCE_TYPE, "MeshLibrary"), "set_mesh_library", "get_mesh_library"); diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp index fae88042af..126b49832a 100644 --- a/modules/gridmap/grid_map_editor_plugin.cpp +++ b/modules/gridmap/grid_map_editor_plugin.cpp @@ -802,7 +802,9 @@ void GridMapEditor::edit(GridMap *p_gridmap) { VisualServer::get_singleton()->instance_set_visible(grid_instance[i], false); } - VisualServer::get_singleton()->instance_set_visible(cursor_instance, false); + if (cursor_instance.is_valid()) { + VisualServer::get_singleton()->instance_set_visible(cursor_instance, false); + } return; } diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp index a49137ae73..24d40111cf 100644 --- a/modules/jpg/image_loader_jpegd.cpp +++ b/modules/jpg/image_loader_jpegd.cpp @@ -48,9 +48,9 @@ Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p const int image_width = decoder.get_width(); const int image_height = decoder.get_height(); - int comps = decoder.get_num_components(); - if (comps == 3) - comps = 4; //weird + const int comps = decoder.get_num_components(); + if (comps != 1 && comps != 3) + return ERR_FILE_CORRUPT; if (decoder.begin_decoding() != jpgd::JPGD_SUCCESS) return ERR_FILE_CORRUPT; @@ -73,7 +73,19 @@ Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p } jpgd::uint8 *pDst = pImage_data + y * dst_bpl; - memcpy(pDst, pScan_line, dst_bpl); + + if (comps == 1) { + memcpy(pDst, pScan_line, dst_bpl); + } else { + // For images with more than 1 channel pScan_line will always point to a buffer + // containing 32-bit RGBA pixels. Alpha is always 255 and we ignore it. + for (int x = 0; x < image_width; x++) { + pDst[0] = pScan_line[x * 4 + 0]; + pDst[1] = pScan_line[x * 4 + 1]; + pDst[2] = pScan_line[x * 4 + 2]; + pDst += 3; + } + } } //all good @@ -82,7 +94,7 @@ Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p if (comps == 1) fmt = Image::FORMAT_L8; else - fmt = Image::FORMAT_RGBA8; + fmt = Image::FORMAT_RGB8; dw = PoolVector<uint8_t>::Write(); p_image->create(image_width, image_height, 0, fmt, data); diff --git a/modules/mobile_vr/mobile_vr_interface.cpp b/modules/mobile_vr/mobile_vr_interface.cpp index b9a404709e..87e4ddd900 100644 --- a/modules/mobile_vr/mobile_vr_interface.cpp +++ b/modules/mobile_vr/mobile_vr_interface.cpp @@ -398,7 +398,6 @@ void MobileVRInterface::commit_for_eye(ARVRInterface::Eyes p_eye, RID p_render_t ERR_FAIL_COND(p_screen_rect == Rect2()); Rect2 dest = p_screen_rect; - float aspect_ratio = 0.5 * p_screen_rect.size.x / p_screen_rect.size.y; Vector2 eye_center; // we output half a screen diff --git a/modules/mono/SCsub b/modules/mono/SCsub index 1d5c145027..e1f5e2ef28 100644 --- a/modules/mono/SCsub +++ b/modules/mono/SCsub @@ -44,7 +44,7 @@ def make_cs_files_header(src, dst, version_dst): if i > 0: header.write(', ') header.write(byte_to_str(buf[buf_idx])) - inserted_files += '\tr_files.insert("' + filepath_src_rel + '", ' \ + inserted_files += '\tr_files.insert("' + filepath_src_rel.replace('\\', '\\\\') + '", ' \ 'CompressedFile(_cs_' + name + '_compressed_size, ' \ '_cs_' + name + '_uncompressed_size, ' \ '_cs_' + name + '_compressed));\n' @@ -88,9 +88,6 @@ vars.Update(env_mono) if env_mono['mono_glue']: env_mono.Append(CPPDEFINES=['MONO_GLUE_ENABLED']) -if ARGUMENTS.get('yolo_copy', False): - env_mono.Append(CPPDEFINES=['YOLO_COPY']) - # Configure TLS checks import tls_configure @@ -105,6 +102,87 @@ env_mono = conf.Finish() import os +def find_nuget_unix(): + import os + + if 'NUGET_PATH' in os.environ: + hint_path = os.environ['NUGET_PATH'] + if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK): + return hint_path + hint_path = os.path.join(hint_path, 'nuget') + if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK): + return hint_path + + import os.path + import sys + + hint_dirs = ['/opt/novell/mono/bin'] + if sys.platform == 'darwin': + hint_dirs = ['/Library/Frameworks/Mono.framework/Versions/Current/bin', '/usr/local/var/homebrew/linked/mono/bin'] + hint_dirs + + for hint_dir in hint_dirs: + hint_path = os.path.join(hint_dir, 'nuget') + if os.path.isfile(hint_path): + return hint_path + elif os.path.isfile(hint_path + '.exe'): + return hint_path + '.exe' + + for hint_dir in os.environ['PATH'].split(os.pathsep): + hint_dir = hint_dir.strip('"') + hint_path = os.path.join(hint_dir, 'nuget') + if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK): + return hint_path + if os.path.isfile(hint_path + '.exe') and os.access(hint_path + '.exe', os.X_OK): + return hint_path + '.exe' + + return None + + +def find_nuget_windows(): + import os + + if 'NUGET_PATH' in os.environ: + hint_path = os.environ['NUGET_PATH'] + if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK): + return hint_path + hint_path = os.path.join(hint_path, 'nuget.exe') + if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK): + return hint_path + + import mono_reg_utils as monoreg + + mono_root = '' + bits = env['bits'] + + if bits == '32': + if os.getenv('MONO32_PREFIX'): + mono_root = os.getenv('MONO32_PREFIX') + else: + mono_root = monoreg.find_mono_root_dir(bits) + else: + if os.getenv('MONO64_PREFIX'): + mono_root = os.getenv('MONO64_PREFIX') + else: + mono_root = monoreg.find_mono_root_dir(bits) + + if mono_root: + mono_bin_dir = os.path.join(mono_root, 'bin') + nuget_mono = os.path.join(mono_bin_dir, 'nuget.bat') + + if os.path.isfile(nuget_mono): + return nuget_mono + + # Standalone NuGet + + for hint_dir in os.environ['PATH'].split(os.pathsep): + hint_dir = hint_dir.strip('"') + hint_path = os.path.join(hint_dir, 'nuget.exe') + if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK): + return hint_path + + return None + + def find_msbuild_unix(filename): import os.path import sys @@ -179,14 +257,17 @@ def mono_build_solution(source, target, env): import mono_reg_utils as monoreg from shutil import copyfile - framework_path = '' + sln_path = os.path.abspath(str(source[0])) + target_path = os.path.abspath(str(target[0])) + framework_path = '' msbuild_env = os.environ.copy() # Needed when running from Developer Command Prompt for VS if 'PLATFORM' in msbuild_env: del msbuild_env['PLATFORM'] + # Find MSBuild if os.name == 'nt': msbuild_info = find_msbuild_windows() if msbuild_info is None: @@ -216,11 +297,27 @@ def mono_build_solution(source, target, env): print('MSBuild path: ' + msbuild_path) + # Find NuGet + nuget_path = find_nuget_windows() if os.name == 'nt' else find_nuget_unix() + if nuget_path is None: + raise RuntimeError('Cannot find NuGet executable') + + print('NuGet path: ' + nuget_path) + + # Do NuGet restore + + try: + subprocess.check_call([nuget_path, 'restore', sln_path]) + except subprocess.CalledProcessError: + raise RuntimeError('GodotSharpTools: NuGet restore failed') + + # Build solution + build_config = 'Release' msbuild_args = [ msbuild_path, - os.path.abspath(str(source[0])), + sln_path, '/p:Configuration=' + build_config, ] @@ -230,30 +327,31 @@ def mono_build_solution(source, target, env): try: subprocess.check_call(msbuild_args, env=msbuild_env) except subprocess.CalledProcessError: - raise RuntimeError('GodotSharpTools build failed') + raise RuntimeError('GodotSharpTools: Build failed') - src_dir = os.path.abspath(os.path.join(str(source[0]), os.pardir, 'bin', build_config)) - dst_dir = os.path.abspath(os.path.join(str(target[0]), os.pardir)) + # Copy files + + src_dir = os.path.abspath(os.path.join(sln_path, os.pardir, 'bin', build_config)) + dst_dir = os.path.abspath(os.path.join(target_path, os.pardir)) + asm_file = 'GodotSharpTools.dll' if not os.path.isdir(dst_dir): if os.path.exists(dst_dir): raise RuntimeError('Target directory is a file') os.makedirs(dst_dir) - asm_file = 'GodotSharpTools.dll' - copyfile(os.path.join(src_dir, asm_file), os.path.join(dst_dir, asm_file)) -output_dir = Dir('#bin').abspath -assemblies_output_dir = Dir(env['mono_assemblies_output_dir']).abspath + # Dependencies + copyfile(os.path.join(src_dir, "DotNet.Glob.dll"), os.path.join(dst_dir, "DotNet.Glob.dll")) -mono_sln_builder = Builder(action=mono_build_solution) -env_mono.Append(BUILDERS={'MonoBuildSolution': mono_sln_builder}) -env_mono.MonoBuildSolution( - os.path.join(assemblies_output_dir, 'GodotSharpTools.dll'), - 'editor/GodotSharpTools/GodotSharpTools.sln' -) - -if os.path.normpath(output_dir) != os.path.normpath(assemblies_output_dir): - rel_assemblies_output_dir = os.path.relpath(assemblies_output_dir, output_dir) - env_mono.Append(CPPDEFINES={'GD_MONO_EDITOR_ASSEMBLIES_DIR': rel_assemblies_output_dir}) +if env['tools']: + output_dir = Dir('#bin').abspath + editor_tools_dir = os.path.join(output_dir, 'GodotSharp', 'Tools') + + mono_sln_builder = Builder(action=mono_build_solution) + env_mono.Append(BUILDERS={'MonoBuildSolution': mono_sln_builder}) + env_mono.MonoBuildSolution( + os.path.join(editor_tools_dir, 'GodotSharpTools.dll'), + 'editor/GodotSharpTools/GodotSharpTools.sln' + ) diff --git a/modules/mono/config.py b/modules/mono/config.py index 01649a972e..189699cca8 100644 --- a/modules/mono/config.py +++ b/modules/mono/config.py @@ -5,7 +5,7 @@ import sys import subprocess from distutils.version import LooseVersion -from SCons.Script import BoolVariable, Dir, Environment, File, PathVariable, SCons, Variables +from SCons.Script import BoolVariable, Dir, Environment, File, SCons, Variables monoreg = imp.load_source('mono_reg_utils', 'modules/mono/mono_reg_utils.py') @@ -55,30 +55,20 @@ def copy_file(src_dir, dst_dir, name): copyfile(src_path, dst_path) -def custom_path_is_dir_create(key, val, env): - """Validator to check if Path is a directory, creating it if it does not exist. - Similar to PathIsDirCreate, except it uses SCons.Script.Dir() and - SCons.Script.File() in order to support the '#' top level directory token. - """ - # Dir constructor will throw an error if the path points to a file - fsDir = Dir(val) - if not fsDir.exists: - os.makedirs(fsDir.abspath) - - def configure(env): env.use_ptrcall = True env.add_module_version_string('mono') envvars = Variables() envvars.Add(BoolVariable('mono_static', 'Statically link mono', False)) - envvars.Add(PathVariable('mono_assemblies_output_dir', 'Path to the assemblies output directory', '#bin', custom_path_is_dir_create)) + envvars.Add(BoolVariable('copy_mono_root', 'Make a copy of the mono installation directory to bundle with the editor', False)) envvars.Update(env) bits = env['bits'] + tools_enabled = env['tools'] mono_static = env['mono_static'] - assemblies_output_dir = Dir(env['mono_assemblies_output_dir']).abspath + copy_mono_root = env['copy_mono_root'] mono_lib_names = ['mono-2.0-sgen', 'monosgen-2.0'] @@ -151,8 +141,6 @@ def configure(env): raise RuntimeError('Could not find mono shared library in: ' + mono_bin_path) copy_file(mono_bin_path, 'bin', mono_dll_name + '.dll') - - copy_file(os.path.join(mono_lib_path, 'mono', '4.5'), assemblies_output_dir, 'mscorlib.dll') else: sharedlib_ext = '.dylib' if sys.platform == 'darwin' else '.so' @@ -204,16 +192,14 @@ def configure(env): if sys.platform == 'darwin': env.Append(LINKFLAGS=['-Wl,-force_load,' + mono_lib_file]) - elif sys.platform == 'linux' or sys.platform == 'linux2': - env.Append(LINKFLAGS=['-Wl,-whole-archive', mono_lib_file, '-Wl,-no-whole-archive']) else: - raise RuntimeError('mono-static: Not supported on this platform') + env.Append(LINKFLAGS=['-Wl,-whole-archive', mono_lib_file, '-Wl,-no-whole-archive']) else: env.Append(LIBS=[mono_lib]) if sys.platform == 'darwin': env.Append(LIBS=['iconv', 'pthread']) - elif sys.platform == 'linux' or sys.platform == 'linux2': + else: env.Append(LIBS=['m', 'rt', 'dl', 'pthread']) if not mono_static: @@ -223,8 +209,6 @@ def configure(env): raise RuntimeError('Could not find mono shared library in: ' + mono_lib_path) copy_file(mono_lib_path, 'bin', 'lib' + mono_so_name + sharedlib_ext) - - copy_file(os.path.join(mono_lib_path, 'mono', '4.5'), assemblies_output_dir, 'mscorlib.dll') else: assert not mono_static @@ -238,7 +222,6 @@ def configure(env): mono_lib_path = '' mono_so_name = '' - mono_prefix = subprocess.check_output(['pkg-config', 'mono-2', '--variable=prefix']).decode('utf8').strip() tmpenv = Environment() tmpenv.AppendENVPath('PKG_CONFIG_PATH', os.getenv('PKG_CONFIG_PATH')) @@ -255,16 +238,159 @@ def configure(env): raise RuntimeError('Could not find mono shared library in: ' + str(tmpenv['LIBPATH'])) copy_file(mono_lib_path, 'bin', 'lib' + mono_so_name + sharedlib_ext) - copy_file(os.path.join(mono_prefix, 'lib', 'mono', '4.5'), assemblies_output_dir, 'mscorlib.dll') env.Append(LINKFLAGS='-rdynamic') + if not tools_enabled: + if not mono_root: + mono_root = subprocess.check_output(['pkg-config', 'mono-2', '--variable=prefix']).decode('utf8').strip() + + make_template_dir(env, mono_root) + + if copy_mono_root: + if not mono_root: + mono_root = subprocess.check_output(['pkg-config', 'mono-2', '--variable=prefix']).decode('utf8').strip() + + if tools_enabled: + copy_mono_root_files(env, mono_root) + else: + print("Ignoring option: 'copy_mono_root'. Only available for builds with 'tools' enabled.") + + +def make_template_dir(env, mono_root): + from shutil import rmtree + + platform = env['platform'] + target = env['target'] + + template_dir_name = '' + + if platform in ['windows', 'osx', 'x11']: + template_dir_name = 'data.mono.%s.%s.%s' % (platform, env['bits'], target) + else: + assert False + + output_dir = Dir('#bin').abspath + template_dir = os.path.join(output_dir, template_dir_name) + + template_mono_root_dir = os.path.join(template_dir, 'Mono') + + if os.path.isdir(template_mono_root_dir): + rmtree(template_mono_root_dir) # Clean first + + # Copy etc/mono/ + + template_mono_config_dir = os.path.join(template_mono_root_dir, 'etc', 'mono') + copy_mono_etc_dir(mono_root, template_mono_config_dir, env['platform']) + + # Copy the required shared libraries + + copy_mono_shared_libs(mono_root, template_mono_root_dir, env['platform']) + + +def copy_mono_root_files(env, mono_root): + from glob import glob + from shutil import copy + from shutil import rmtree + + if not mono_root: + raise RuntimeError('Mono installation directory not found') + + output_dir = Dir('#bin').abspath + editor_mono_root_dir = os.path.join(output_dir, 'GodotSharp', 'Mono') + + if os.path.isdir(editor_mono_root_dir): + rmtree(editor_mono_root_dir) # Clean first + + # Copy etc/mono/ + + editor_mono_config_dir = os.path.join(editor_mono_root_dir, 'etc', 'mono') + copy_mono_etc_dir(mono_root, editor_mono_config_dir, env['platform']) + + # Copy the required shared libraries + + copy_mono_shared_libs(mono_root, editor_mono_root_dir, env['platform']) + + # Copy framework assemblies + + mono_framework_dir = os.path.join(mono_root, 'lib', 'mono', '4.5') + mono_framework_facades_dir = os.path.join(mono_framework_dir, 'Facades') + + editor_mono_framework_dir = os.path.join(editor_mono_root_dir, 'lib', 'mono', '4.5') + editor_mono_framework_facades_dir = os.path.join(editor_mono_framework_dir, 'Facades') + + if not os.path.isdir(editor_mono_framework_dir): + os.makedirs(editor_mono_framework_dir) + if not os.path.isdir(editor_mono_framework_facades_dir): + os.makedirs(editor_mono_framework_facades_dir) + + for assembly in glob(os.path.join(mono_framework_dir, '*.dll')): + copy(assembly, editor_mono_framework_dir) + for assembly in glob(os.path.join(mono_framework_facades_dir, '*.dll')): + copy(assembly, editor_mono_framework_facades_dir) + + +def copy_mono_etc_dir(mono_root, target_mono_config_dir, platform): + from distutils.dir_util import copy_tree + from glob import glob + from shutil import copy + + if not os.path.isdir(target_mono_config_dir): + os.makedirs(target_mono_config_dir) + + mono_etc_dir = os.path.join(mono_root, 'etc', 'mono') + if not os.path.isdir(mono_etc_dir): + mono_etc_dir = '' + etc_hint_dirs = [] + if platform != 'windows': + etc_hint_dirs += ['/etc/mono', '/usr/local/etc/mono'] + if 'MONO_CFG_DIR' in os.environ: + etc_hint_dirs += [os.path.join(os.environ['MONO_CFG_DIR'], 'mono')] + for etc_hint_dir in etc_hint_dirs: + if os.path.isdir(etc_hint_dir): + mono_etc_dir = etc_hint_dir + break + if not mono_etc_dir: + raise RuntimeError('Mono installation etc directory not found') + + copy_tree(os.path.join(mono_etc_dir, '2.0'), os.path.join(target_mono_config_dir, '2.0')) + copy_tree(os.path.join(mono_etc_dir, '4.0'), os.path.join(target_mono_config_dir, '4.0')) + copy_tree(os.path.join(mono_etc_dir, '4.5'), os.path.join(target_mono_config_dir, '4.5')) + copy_tree(os.path.join(mono_etc_dir, 'mconfig'), os.path.join(target_mono_config_dir, 'mconfig')) + + for file in glob(os.path.join(mono_etc_dir, '*')): + if os.path.isfile(file): + copy(file, target_mono_config_dir) + + +def copy_mono_shared_libs(mono_root, target_mono_root_dir, platform): + from shutil import copy + + if platform == 'windows': + target_mono_bin_dir = os.path.join(target_mono_root_dir, 'bin') + + if not os.path.isdir(target_mono_bin_dir): + os.makedirs(target_mono_bin_dir) + + copy(os.path.join(mono_root, 'bin', 'MonoPosixHelper.dll'), os.path.join(target_mono_bin_dir, 'MonoPosixHelper.dll')) + else: + target_mono_lib_dir = os.path.join(target_mono_root_dir, 'lib') + + if not os.path.isdir(target_mono_lib_dir): + os.makedirs(target_mono_lib_dir) + + if platform == 'osx': + copy(os.path.join(mono_root, 'lib', 'libMonoPosixHelper.dylib'), os.path.join(target_mono_lib_dir, 'libMonoPosixHelper.dylib')) + elif platform == 'x11': + copy(os.path.join(mono_root, 'lib', 'libmono-btls-shared.so'), os.path.join(target_mono_lib_dir, 'libmono-btls-shared.so')) + copy(os.path.join(mono_root, 'lib', 'libMonoPosixHelper.so'), os.path.join(target_mono_lib_dir, 'libMonoPosixHelper.so')) + def configure_for_mono_version(env, mono_version): if mono_version is None: raise RuntimeError('Mono JIT compiler version not found') print('Found Mono JIT compiler version: ' + str(mono_version)) - if mono_version >= LooseVersion("5.12.0"): + if mono_version >= LooseVersion('5.12.0'): env.Append(CPPFLAGS=['-DHAS_PENDING_EXCEPTIONS']) diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 91fd482235..3c818898e6 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -32,6 +32,7 @@ #include <mono/metadata/threads.h> +#include "core/io/json.h" #include "core/os/file_access.h" #include "core/os/os.h" #include "core/os/thread.h" @@ -42,7 +43,6 @@ #include "editor/csharp_project.h" #include "editor/editor_node.h" #include "editor/godotsharp_editor.h" -#include "utils/string_utils.h" #endif #include "godotsharp_dirs.h" @@ -50,6 +50,8 @@ #include "mono_gd/gd_mono_marshal.h" #include "signal_awaiter_utils.h" #include "utils/macros.h" +#include "utils/mutex_utils.h" +#include "utils/string_utils.h" #include "utils/thread_local.h" #define CACHED_STRING_NAME(m_var) (CSharpLanguage::get_singleton()->get_string_names().m_var) @@ -370,70 +372,82 @@ bool CSharpLanguage::supports_builtin_mode() const { return false; } +#ifdef TOOLS_ENABLED static String variant_type_to_managed_name(const String &p_var_type_name) { if (p_var_type_name.empty()) return "object"; if (!ClassDB::class_exists(p_var_type_name)) { - Variant::Type var_types[] = { - Variant::BOOL, - Variant::INT, - Variant::REAL, - Variant::STRING, - Variant::VECTOR2, - Variant::RECT2, - Variant::VECTOR3, - Variant::TRANSFORM2D, - Variant::PLANE, - Variant::QUAT, - Variant::AABB, - Variant::BASIS, - Variant::TRANSFORM, - Variant::COLOR, - Variant::NODE_PATH, - Variant::_RID - }; - - for (int i = 0; i < sizeof(var_types) / sizeof(Variant::Type); i++) { - if (p_var_type_name == Variant::get_type_name(var_types[i])) - return p_var_type_name; - } + return p_var_type_name; + } + + if (p_var_type_name == Variant::get_type_name(Variant::OBJECT)) + return "Godot.Object"; - if (p_var_type_name == "String") - return "string"; // I prefer this one >:[ + if (p_var_type_name == Variant::get_type_name(Variant::REAL)) { +#ifdef REAL_T_IS_DOUBLE + return "double"; +#else + return "float"; +#endif + } - // TODO these will be rewritten later into custom containers + if (p_var_type_name == Variant::get_type_name(Variant::STRING)) + return "string"; // I prefer this one >:[ - if (p_var_type_name == "Array") - return "object[]"; + if (p_var_type_name == Variant::get_type_name(Variant::DICTIONARY)) + return "Collections.Dictionary"; - if (p_var_type_name == "Dictionary") - return "Dictionary<object, object>"; + if (p_var_type_name == Variant::get_type_name(Variant::ARRAY)) + return "Collections.Array"; - if (p_var_type_name == "PoolByteArray") - return "byte[]"; - if (p_var_type_name == "PoolIntArray") - return "int[]"; - if (p_var_type_name == "PoolRealArray") - return "float[]"; - if (p_var_type_name == "PoolStringArray") - return "string[]"; - if (p_var_type_name == "PoolVector2Array") - return "Vector2[]"; - if (p_var_type_name == "PoolVector3Array") - return "Vector3[]"; - if (p_var_type_name == "PoolColorArray") - return "Color[]"; + if (p_var_type_name == Variant::get_type_name(Variant::POOL_BYTE_ARRAY)) + return "byte[]"; + if (p_var_type_name == Variant::get_type_name(Variant::POOL_INT_ARRAY)) + return "int[]"; + if (p_var_type_name == Variant::get_type_name(Variant::POOL_REAL_ARRAY)) { +#ifdef REAL_T_IS_DOUBLE + return "double[]"; +#else + return "float[]"; +#endif + } + if (p_var_type_name == Variant::get_type_name(Variant::POOL_STRING_ARRAY)) + return "string[]"; + if (p_var_type_name == Variant::get_type_name(Variant::POOL_VECTOR2_ARRAY)) + return "Vector2[]"; + if (p_var_type_name == Variant::get_type_name(Variant::POOL_VECTOR3_ARRAY)) + return "Vector3[]"; + if (p_var_type_name == Variant::get_type_name(Variant::POOL_COLOR_ARRAY)) + return "Color[]"; + + Variant::Type var_types[] = { + Variant::BOOL, + Variant::INT, + Variant::VECTOR2, + Variant::RECT2, + Variant::VECTOR3, + Variant::TRANSFORM2D, + Variant::PLANE, + Variant::QUAT, + Variant::AABB, + Variant::BASIS, + Variant::TRANSFORM, + Variant::COLOR, + Variant::NODE_PATH, + Variant::_RID + }; - return "object"; + for (int i = 0; i < sizeof(var_types) / sizeof(Variant::Type); i++) { + if (p_var_type_name == Variant::get_type_name(var_types[i])) + return p_var_type_name; } - return p_var_type_name; + return "object"; } -String CSharpLanguage::make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const { -#ifdef TOOLS_ENABLED +String CSharpLanguage::make_function(const String &, const String &p_name, const PoolStringArray &p_args) const { // FIXME // - Due to Godot's API limitation this just appends the function to the end of the file // - Use fully qualified name if there is ambiguity @@ -449,10 +463,12 @@ String CSharpLanguage::make_function(const String &p_class, const String &p_name s += ")\n{\n // Replace with function body.\n}\n"; return s; +} #else +String CSharpLanguage::make_function(const String &, const String &, const PoolStringArray &) const { return String(); -#endif } +#endif String CSharpLanguage::_get_indentation() const { #ifdef TOOLS_ENABLED @@ -504,8 +520,7 @@ Vector<ScriptLanguage::StackInfo> CSharpLanguage::stack_trace_get_info(MonoObjec MonoException *exc = NULL; - GDMonoUtils::StackTrace_GetFrames st_get_frames = CACHED_METHOD_THUNK(System_Diagnostics_StackTrace, GetFrames); - MonoArray *frames = st_get_frames(p_stack_trace, (MonoObject **)&exc); + MonoArray *frames = invoke_method_thunk(CACHED_METHOD_THUNK(System_Diagnostics_StackTrace, GetFrames), p_stack_trace, (MonoObject **)&exc); if (exc) { GDMonoUtils::debug_print_unhandled_exception(exc); @@ -529,7 +544,7 @@ Vector<ScriptLanguage::StackInfo> CSharpLanguage::stack_trace_get_info(MonoObjec MonoString *file_name; int file_line_num; MonoString *method_decl; - get_sf_info(frame, &file_name, &file_line_num, &method_decl, (MonoObject **)&exc); + invoke_method_thunk(get_sf_info, frame, &file_name, &file_line_num, &method_decl, (MonoObject **)&exc); if (exc) { GDMonoUtils::debug_print_unhandled_exception(exc); @@ -558,10 +573,8 @@ void CSharpLanguage::frame() { MonoObject *task_scheduler = task_scheduler_handle->get_target(); if (task_scheduler) { - GDMonoUtils::GodotTaskScheduler_Activate thunk = CACHED_METHOD_THUNK(GodotTaskScheduler, Activate); - MonoException *exc = NULL; - thunk(task_scheduler, (MonoObject **)&exc); + invoke_method_thunk(CACHED_METHOD_THUNK(GodotTaskScheduler, Activate), task_scheduler, (MonoObject **)&exc); if (exc) { GDMonoUtils::debug_unhandled_exception(exc); @@ -596,24 +609,20 @@ void CSharpLanguage::reload_all_scripts() { #ifdef DEBUG_ENABLED -#ifndef NO_THREADS - lock->lock(); -#endif - List<Ref<CSharpScript> > scripts; - SelfList<CSharpScript> *elem = script_list.first(); - while (elem) { - if (elem->self()->get_path().is_resource_file()) { - scripts.push_back(Ref<CSharpScript>(elem->self())); //cast to gdscript to avoid being erased by accident + { + SCOPED_MUTEX_LOCK(script_instances_mutex); + + SelfList<CSharpScript> *elem = script_list.first(); + while (elem) { + if (elem->self()->get_path().is_resource_file()) { + scripts.push_back(Ref<CSharpScript>(elem->self())); //cast to gdscript to avoid being erased by accident + } + elem = elem->next(); } - elem = elem->next(); } -#ifndef NO_THREADS - lock->unlock(); -#endif - //as scripts are going to be reloaded, must proceed without locking here scripts.sort_custom<CSharpScriptDepSort>(); //update in inheritance dependency order @@ -622,6 +631,7 @@ void CSharpLanguage::reload_all_scripts() { E->get()->load_source_code(E->get()->get_path()); E->get()->reload(true); } + #endif } @@ -631,15 +641,17 @@ void CSharpLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft #ifdef TOOLS_ENABLED MonoReloadNode::get_singleton()->restart_reload_timer(); - reload_assemblies_if_needed(p_soft_reload); + if (is_assembly_reloading_needed()) { + reload_assemblies(p_soft_reload); + } #endif } #ifdef TOOLS_ENABLED -void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) { +bool CSharpLanguage::is_assembly_reloading_needed() { if (!gdmono->is_runtime_initialized()) - return; + return false; GDMonoAssembly *proj_assembly = gdmono->get_project_assembly(); @@ -657,164 +669,208 @@ void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) { // Maybe it wasn't loaded from the default path, so check this as well proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name); if (!FileAccess::exists(proj_asm_path)) - return; // No assembly to load + return false; // No assembly to load } if (FileAccess::get_modified_time(proj_asm_path) <= proj_assembly->get_modified_time()) - return; // Already up to date + return false; // Already up to date } else { if (!FileAccess::exists(GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name))) - return; // No assembly to load + return false; // No assembly to load } if (!gdmono->get_core_api_assembly() && gdmono->metadata_is_api_assembly_invalidated(APIAssembly::API_CORE)) - return; // The core API assembly to load is invalidated + return false; // The core API assembly to load is invalidated if (!gdmono->get_editor_api_assembly() && gdmono->metadata_is_api_assembly_invalidated(APIAssembly::API_EDITOR)) - return; // The editor API assembly to load is invalidated + return false; // The editor API assembly to load is invalidated -#ifndef NO_THREADS - lock->lock(); -#endif + return true; +} + +void CSharpLanguage::reload_assemblies(bool p_soft_reload) { + + if (!gdmono->is_runtime_initialized()) + return; + + // There is no soft reloading with Mono. It's always hard reloading. List<Ref<CSharpScript> > scripts; - SelfList<CSharpScript> *elem = script_list.first(); - while (elem) { - if (elem->self()->get_path().is_resource_file()) { + { + SCOPED_MUTEX_LOCK(script_instances_mutex); - scripts.push_back(Ref<CSharpScript>(elem->self())); //cast to CSharpScript to avoid being erased by accident + for (SelfList<CSharpScript> *elem = script_list.first(); elem; elem = elem->next()) { + if (elem->self()->get_path().is_resource_file()) { + // Cast to CSharpScript to avoid being erased by accident + scripts.push_back(Ref<CSharpScript>(elem->self())); + } } - elem = elem->next(); } -#ifndef NO_THREADS - lock->unlock(); -#endif + List<Ref<CSharpScript> > to_reload; - //when someone asks you why dynamically typed languages are easier to write.... + // As scripts are going to be reloaded, must proceed without locking here - Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > > to_reload; + scripts.sort_custom<CSharpScriptDepSort>(); // Update in inheritance dependency order - //as scripts are going to be reloaded, must proceed without locking here + for (List<Ref<CSharpScript> >::Element *E = scripts.front(); E; E = E->next()) { - scripts.sort_custom<CSharpScriptDepSort>(); //update in inheritance dependency order + Ref<CSharpScript> &script = E->get(); - for (List<Ref<CSharpScript> >::Element *E = scripts.front(); E; E = E->next()) { + to_reload.push_back(script); - to_reload.insert(E->get(), Map<ObjectID, List<Pair<StringName, Variant> > >()); + // Script::instances are deleted during managed object disposal, which happens on domain finalize. + // Only placeholders are kept. Therefore we need to keep a copy before that happens. - if (!p_soft_reload) { + for (Set<Object *>::Element *E = script->instances.front(); E; E = E->next()) { + script->pending_reload_instances.insert(E->get()->get_instance_id()); + } - //save state and remove script from instances - Map<ObjectID, List<Pair<StringName, Variant> > > &map = to_reload[E->get()]; +#ifdef TOOLS_ENABLED + for (Set<PlaceHolderScriptInstance *>::Element *E = script->placeholders.front(); E; E = E->next()) { + script->pending_reload_instances.insert(E->get()->get_owner()->get_instance_id()); + } +#endif - while (E->get()->instances.front()) { - Object *obj = E->get()->instances.front()->get(); - //save instance info - List<Pair<StringName, Variant> > state; - if (obj->get_script_instance()) { + // FIXME: What about references? Need to keep them alive if only managed code references them. - obj->get_script_instance()->get_property_state(state); + // Save state and remove script from instances + Map<ObjectID, CSharpScript::StateBackup> &owners_map = script->pending_reload_state; - Ref<MonoGCHandle> gchandle = CAST_CSHARP_INSTANCE(obj->get_script_instance())->gchandle; - if (gchandle.is_valid()) - gchandle->release(); + while (script->instances.front()) { + Object *obj = script->instances.front()->get(); + // Save instance info + CSharpScript::StateBackup state; - map[obj->get_instance_id()] = state; - obj->set_script(RefPtr()); - } - } + ERR_CONTINUE(!obj->get_script_instance()); - //same thing for placeholders - while (E->get()->placeholders.size()) { - - Object *obj = E->get()->placeholders.front()->get()->get_owner(); - //save instance info - List<Pair<StringName, Variant> > state; - if (obj->get_script_instance()) { - obj->get_script_instance()->get_property_state(state); - map[obj->get_instance_id()] = state; - obj->set_script(RefPtr()); - } else { - // no instance found. Let's remove it so we don't loop forever - E->get()->placeholders.erase(E->get()->placeholders.front()->get()); - } - } + // TODO: Proper state backup (Not only variants, serialize managed state of scripts) + obj->get_script_instance()->get_property_state(state.properties); - for (Map<ObjectID, List<Pair<StringName, Variant> > >::Element *F = E->get()->pending_reload_state.front(); F; F = F->next()) { - map[F->key()] = F->get(); //pending to reload, use this one instead - } + Ref<MonoGCHandle> gchandle = CAST_CSHARP_INSTANCE(obj->get_script_instance())->gchandle; + if (gchandle.is_valid()) + gchandle->release(); - E->get()->_clear(); + owners_map[obj->get_instance_id()] = state; + obj->set_script(RefPtr()); // Remove script and existing script instances (placeholder are not removed before domain reload) } + + script->_clear(); } + // Do domain reload if (gdmono->reload_scripts_domain() != OK) { // Failed to reload the scripts domain // Make sure to add the scripts back to their owners before returning - for (Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > >::Element *E = to_reload.front(); E; E = E->next()) { - Ref<CSharpScript> scr = E->key(); - for (Map<ObjectID, List<Pair<StringName, Variant> > >::Element *F = E->get().front(); F; F = F->next()) { + for (List<Ref<CSharpScript> >::Element *E = to_reload.front(); E; E = E->next()) { + Ref<CSharpScript> scr = E->get(); + + for (const Map<ObjectID, CSharpScript::StateBackup>::Element *F = scr->pending_reload_state.front(); F; F = F->next()) { Object *obj = ObjectDB::get_instance(F->key()); + if (!obj) continue; + + ObjectID obj_id = obj->get_instance_id(); + + // Use a placeholder for now to avoid losing the state when saving a scene + obj->set_script(scr.get_ref_ptr()); - // Save reload state for next time if not saved - if (!scr->pending_reload_state.has(obj->get_instance_id())) { - scr->pending_reload_state[obj->get_instance_id()] = F->get(); + + PlaceHolderScriptInstance *placeholder = scr->placeholder_instance_create(obj); + obj->set_script_instance(placeholder); + + // Even though build didn't fail, this tells the placeholder to keep properties and + // it allows using property_set_fallback for restoring the state without a valid script. + placeholder->set_build_failed(true); + + // Restore Variant properties state, it will be kept by the placeholder until the next script reloading + for (List<Pair<StringName, Variant> >::Element *G = scr->pending_reload_state[obj_id].properties.front(); G; G = G->next()) { + placeholder->property_set_fallback(G->get().first, G->get().second, NULL); } + + scr->pending_reload_state.erase(obj_id); } } return; } - for (Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > >::Element *E = to_reload.front(); E; E = E->next()) { + for (List<Ref<CSharpScript> >::Element *E = to_reload.front(); E; E = E->next()) { - Ref<CSharpScript> scr = E->key(); + Ref<CSharpScript> scr = E->get(); scr->exports_invalidated = true; scr->signals_invalidated = true; scr->reload(p_soft_reload); scr->update_exports(); - //restore state if saved - for (Map<ObjectID, List<Pair<StringName, Variant> > >::Element *F = E->get().front(); F; F = F->next()) { + { +#ifdef DEBUG_ENABLED + for (Set<ObjectID>::Element *F = scr->pending_reload_instances.front(); F; F = F->next()) { + ObjectID obj_id = F->get(); + Object *obj = ObjectDB::get_instance(obj_id); + + if (!obj) { + scr->pending_reload_state.erase(obj_id); + continue; + } - Object *obj = ObjectDB::get_instance(F->key()); - if (!obj) - continue; + ScriptInstance *si = obj->get_script_instance(); - if (!p_soft_reload) { - //clear it just in case (may be a pending reload state) - obj->set_script(RefPtr()); - } - obj->set_script(scr.get_ref_ptr()); - if (!obj->get_script_instance()) { - //failed, save reload state for next time if not saved - if (!scr->pending_reload_state.has(obj->get_instance_id())) { - scr->pending_reload_state[obj->get_instance_id()] = F->get(); +#ifdef TOOLS_ENABLED + if (si) { + // If the script instance is not null, then it must be a placeholder. + // Non-placeholder script instances are removed in godot_icall_Object_Disposed. + CRASH_COND(!si->is_placeholder()); + + if (scr->is_tool() || ScriptServer::is_scripting_enabled()) { + // Replace placeholder with a script instance + + CSharpScript::StateBackup &state_backup = scr->pending_reload_state[obj_id]; + + // Backup placeholder script instance state before replacing it with a script instance + obj->get_script_instance()->get_property_state(state_backup.properties); + + ScriptInstance *script_instance = scr->instance_create(obj); + + if (script_instance) { + scr->placeholders.erase(static_cast<PlaceHolderScriptInstance *>(si)); + obj->set_script_instance(script_instance); + } + + // TODO: Restore serialized state + + for (List<Pair<StringName, Variant> >::Element *G = state_backup.properties.front(); G; G = G->next()) { + script_instance->set(G->get().first, G->get().second); + } + + scr->pending_reload_state.erase(obj_id); + } + + continue; } - continue; - } +#else + CRASH_COND(si != NULL); +#endif + // Re-create script instance - if (scr->valid && scr->is_tool() && obj->get_script_instance()->is_placeholder()) { - // Script instance was a placeholder, but now the script was built successfully and is a tool script. - // We have to replace the placeholder with an actual C# script instance. - scr->placeholders.erase(static_cast<PlaceHolderScriptInstance *>(obj->get_script_instance())); - ScriptInstance *script_instance = scr->instance_create(obj); - obj->set_script_instance(script_instance); // Not necessary as it's already done in instance_create, but just in case... - } + obj->set_script(scr.get_ref_ptr()); // will create the script instance as well + + // TODO: Restore serialized state + + for (List<Pair<StringName, Variant> >::Element *G = scr->pending_reload_state[obj_id].properties.front(); G; G = G->next()) { + obj->get_script_instance()->set(G->get().first, G->get().second); + } - for (List<Pair<StringName, Variant> >::Element *G = F->get().front(); G; G = G->next()) { - obj->get_script_instance()->set(G->get().first, G->get().second); + scr->pending_reload_state.erase(obj_id); } +#endif - scr->pending_reload_state.erase(obj->get_instance_id()); //as it reloaded, remove pending state + scr->pending_reload_instances.clear(); } - - //if instance states were saved, set them! } + // FIXME: Hack to refresh editor in order to display new properties and signals. See if there is a better alternative. if (Engine::get_singleton()->is_editor_hint()) { EditorNode::get_singleton()->get_inspector()->update_tree(); NodeDock::singleton->update_lists(); @@ -822,6 +878,49 @@ void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) { } #endif +void CSharpLanguage::project_assembly_loaded() { + + scripts_metadata.clear(); + + String scripts_metadata_filename = "scripts_metadata."; + +#ifdef TOOLS_ENABLED + scripts_metadata_filename += Engine::get_singleton()->is_editor_hint() ? "editor" : "editor_player"; +#else +#ifdef DEBUG_ENABLED + scripts_metadata_filename += "debug"; +#else + scripts_metadata_filename += "release"; +#endif +#endif + + String scripts_metadata_path = GodotSharpDirs::get_res_metadata_dir().plus_file(scripts_metadata_filename); + + if (FileAccess::exists(scripts_metadata_path)) { + String old_json; + + Error ferr = read_all_file_utf8(scripts_metadata_path, old_json); + ERR_FAIL_COND(ferr != OK); + + Variant old_dict_var; + String err_str; + int err_line; + Error json_err = JSON::parse(old_json, old_dict_var, err_str, err_line); + if (json_err != OK) { + ERR_PRINTS("Failed to parse metadata file: '" + err_str + "' (" + String::num_int64(err_line) + ")"); + return; + } + + scripts_metadata = old_dict_var.operator Dictionary(); + + print_verbose("Successfully loaded scripts metadata"); + } else { + if (!Engine::get_singleton()->is_editor_hint()) { + ERR_PRINT("Missing scripts metadata file"); + } + } +} + void CSharpLanguage::get_recognized_extensions(List<String> *p_extensions) const { p_extensions->push_back("cs"); @@ -894,27 +993,18 @@ void CSharpLanguage::set_language_index(int p_idx) { void CSharpLanguage::release_script_gchandle(Ref<MonoGCHandle> &p_gchandle) { - if (!p_gchandle->is_released()) { // Do not locking unnecessarily -#ifndef NO_THREADS - get_singleton()->script_gchandle_release_lock->lock(); -#endif - + if (!p_gchandle->is_released()) { // Do not lock unnecessarily + SCOPED_MUTEX_LOCK(get_singleton()->script_gchandle_release_mutex); p_gchandle->release(); - -#ifndef NO_THREADS - get_singleton()->script_gchandle_release_lock->unlock(); -#endif } } -void CSharpLanguage::release_script_gchandle(MonoObject *p_pinned_expected_obj, Ref<MonoGCHandle> &p_gchandle) { +void CSharpLanguage::release_script_gchandle(MonoObject *p_expected_obj, Ref<MonoGCHandle> &p_gchandle) { - uint32_t pinned_gchandle = MonoGCHandle::new_strong_handle_pinned(p_pinned_expected_obj); // we might lock after this, so pin it + uint32_t pinned_gchandle = MonoGCHandle::new_strong_handle_pinned(p_expected_obj); // We might lock after this, so pin it - if (!p_gchandle->is_released()) { // Do not locking unnecessarily -#ifndef NO_THREADS - get_singleton()->script_gchandle_release_lock->lock(); -#endif + if (!p_gchandle->is_released()) { // Do not lock unnecessarily + SCOPED_MUTEX_LOCK(get_singleton()->script_gchandle_release_mutex); MonoObject *target = p_gchandle->get_target(); @@ -922,13 +1012,9 @@ void CSharpLanguage::release_script_gchandle(MonoObject *p_pinned_expected_obj, // already released and could have been replaced) or if we can't get its target MonoObject* // (which doesn't necessarily mean it was released, and we want it released in order to // avoid locking other threads unnecessarily). - if (target == p_pinned_expected_obj || target == NULL) { + if (target == p_expected_obj || target == NULL) { p_gchandle->release(); } - -#ifndef NO_THREADS - get_singleton()->script_gchandle_release_lock->unlock(); -#endif } MonoGCHandle::free_handle(pinned_gchandle); @@ -944,13 +1030,13 @@ CSharpLanguage::CSharpLanguage() { gdmono = NULL; #ifdef NO_THREADS - lock = NULL; - gchandle_bind_lock = NULL; - script_gchandle_release_lock = NULL; + script_instances_mutex = NULL; + script_gchandle_release_mutex = NULL; + language_bind_mutex = NULL; #else - lock = Mutex::create(); - script_bind_lock = Mutex::create(); - script_gchandle_release_lock = Mutex::create(); + script_instances_mutex = Mutex::create(); + script_gchandle_release_mutex = Mutex::create(); + language_bind_mutex = Mutex::create(); #endif lang_idx = -1; @@ -960,19 +1046,19 @@ CSharpLanguage::~CSharpLanguage() { finish(); - if (lock) { - memdelete(lock); - lock = NULL; + if (script_instances_mutex) { + memdelete(script_instances_mutex); + script_instances_mutex = NULL; } - if (script_bind_lock) { - memdelete(script_bind_lock); - script_bind_lock = NULL; + if (language_bind_mutex) { + memdelete(language_bind_mutex); + language_bind_mutex = NULL; } - if (script_gchandle_release_lock) { - memdelete(script_gchandle_release_lock); - script_gchandle_release_lock = NULL; + if (script_gchandle_release_mutex) { + memdelete(script_gchandle_release_mutex); + script_gchandle_release_mutex = NULL; } singleton = NULL; @@ -1009,15 +1095,12 @@ void *CSharpLanguage::alloc_instance_binding_data(Object *p_object) { script_binding.wrapper_class = type_class; // cache script_binding.gchandle = MonoGCHandle::create_strong(mono_object); -#ifndef NO_THREADS - script_bind_lock->lock(); -#endif - - void *data = (void *)script_bindings.insert(p_object, script_binding); + void *data; -#ifndef NO_THREADS - script_bind_lock->unlock(); -#endif + { + SCOPED_MUTEX_LOCK(language_bind_mutex); + data = (void *)script_bindings.insert(p_object, script_binding); + } // Tie managed to unmanaged Reference *ref = Object::cast_to<Reference>(p_object); @@ -1047,23 +1130,19 @@ void CSharpLanguage::free_instance_binding_data(void *p_data) { if (finalizing) return; // inside CSharpLanguage::finish(), all the gchandle bindings are released there -#ifndef NO_THREADS - script_bind_lock->lock(); -#endif + { + SCOPED_MUTEX_LOCK(language_bind_mutex); - Map<Object *, CSharpScriptBinding>::Element *data = (Map<Object *, CSharpScriptBinding>::Element *)p_data; + Map<Object *, CSharpScriptBinding>::Element *data = (Map<Object *, CSharpScriptBinding>::Element *)p_data; - // Set the native instance field to IntPtr.Zero, if not yet garbage collected - MonoObject *mono_object = data->value().gchandle->get_target(); - if (mono_object) { - CACHED_FIELD(GodotObject, ptr)->set_value_raw(mono_object, NULL); - } - - script_bindings.erase(data); + // Set the native instance field to IntPtr.Zero, if not yet garbage collected + MonoObject *mono_object = data->value().gchandle->get_target(); + if (mono_object) { + CACHED_FIELD(GodotObject, ptr)->set_value_raw(mono_object, NULL); + } -#ifndef NO_THREADS - script_bind_lock->unlock(); -#endif + script_bindings.erase(data); + } } void CSharpLanguage::refcount_incremented_instance_binding(Object *p_object) { @@ -1194,7 +1273,7 @@ bool CSharpInstance::set(const StringName &p_name, const Variant &p_value) { MonoObject *ret = method->invoke(mono_object, args); - if (ret && GDMonoMarshal::unbox<MonoBoolean>(ret) == true) + if (ret && GDMonoMarshal::unbox<MonoBoolean>(ret)) return true; break; @@ -1407,6 +1486,8 @@ bool CSharpInstance::_unreference_owner_unsafe() { if (!unsafe_referenced) return false; // Already unreferenced + unsafe_referenced = false; + // Called from CSharpInstance::mono_object_disposed() or ~CSharpInstance() // Unsafe refcount decrement. The managed instance also counts as a reference. @@ -1459,7 +1540,7 @@ MonoObject *CSharpInstance::_internal_new_managed() { void CSharpInstance::mono_object_disposed(MonoObject *p_obj) { #ifdef DEBUG_ENABLED - CRASH_COND(base_ref == true); + CRASH_COND(base_ref); CRASH_COND(gchandle.is_null()); #endif CSharpLanguage::get_singleton()->release_script_gchandle(p_obj, gchandle); @@ -1468,7 +1549,7 @@ void CSharpInstance::mono_object_disposed(MonoObject *p_obj) { void CSharpInstance::mono_object_disposed_baseref(MonoObject *p_obj, bool p_is_finalizer, bool &r_owner_deleted) { #ifdef DEBUG_ENABLED - CRASH_COND(base_ref == false); + CRASH_COND(!base_ref); CRASH_COND(gchandle.is_null()); #endif if (_unreference_owner_unsafe()) { @@ -1476,7 +1557,7 @@ void CSharpInstance::mono_object_disposed_baseref(MonoObject *p_obj, bool p_is_f } else { r_owner_deleted = false; CSharpLanguage::get_singleton()->release_script_gchandle(p_obj, gchandle); - if (p_is_finalizer) { + if (p_is_finalizer && !GDMono::get_singleton()->is_finalizing_scripts_domain()) { // If the native instance is still alive, then it was // referenced from another thread before the finalizer could // unreference it and delete it, so we want to keep it. @@ -1603,6 +1684,8 @@ void CSharpInstance::notification(int p_notification) { // It's safe to call Dispose() multiple times and NOTIFICATION_PREDELETE is guaranteed // to be sent at least once, which happens right before the call to the destructor. + predelete_notified = true; + if (base_ref) { // It's not safe to proceed if the owner derives Reference and the refcount reached 0. // At this point, Dispose() was already called (manually or from the finalizer) so @@ -1618,10 +1701,8 @@ void CSharpInstance::notification(int p_notification) { MonoObject *mono_object = get_mono_object(); ERR_FAIL_NULL(mono_object); - GDMonoUtils::GodotObject_Dispose thunk = CACHED_METHOD_THUNK(GodotObject, Dispose); - MonoException *exc = NULL; - thunk(mono_object, (MonoObject **)&exc); + GDMonoUtils::dispose(mono_object, &exc); if (exc) { GDMonoUtils::set_pending_exception(exc); @@ -1672,12 +1753,35 @@ CSharpInstance::CSharpInstance() : owner(NULL), base_ref(false), ref_dying(false), - unsafe_referenced(false) { + unsafe_referenced(false), + predelete_notified(false), + destructing_script_instance(false) { } CSharpInstance::~CSharpInstance() { if (gchandle.is_valid()) { + if (!predelete_notified && !ref_dying) { + // This destructor is not called from the owners destructor. + // This could be being called from the owner's set_script_instance method, + // meaning this script is being replaced with another one. If this is the case, + // we must call Dispose here, because Dispose calls owner->set_script_instance(NULL) + // and that would mess up with the new script instance if called later. + + MonoObject *mono_object = gchandle->get_target(); + + if (mono_object) { + MonoException *exc = NULL; + destructing_script_instance = true; + GDMonoUtils::dispose(mono_object, &exc); + destructing_script_instance = false; + + if (exc) { + GDMonoUtils::set_pending_exception(exc); + } + } + } + gchandle->release(); // Make sure it's released } @@ -1686,9 +1790,7 @@ CSharpInstance::~CSharpInstance() { } if (script.is_valid() && owner) { -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->lock(); -#endif + SCOPED_MUTEX_LOCK(CSharpLanguage::get_singleton()->script_instances_mutex); #ifdef DEBUG_ENABLED // CSharpInstance must not be created unless it's going to be added to the list for sure @@ -1698,10 +1800,6 @@ CSharpInstance::~CSharpInstance() { #else script->instances.erase(owner); #endif - -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->unlock(); -#endif } } @@ -1834,10 +1932,8 @@ bool CSharpScript::_update_exports() { // Dispose the temporary managed instance - GDMonoUtils::GodotObject_Dispose thunk = CACHED_METHOD_THUNK(GodotObject, Dispose); - MonoException *exc = NULL; - thunk(tmp_object, (MonoObject **)&exc); + GDMonoUtils::dispose(tmp_object, &exc); if (exc) { ERR_PRINT("Exception thrown from method Dispose() of temporary MonoObject:"); @@ -2208,10 +2304,27 @@ bool CSharpScript::can_instance() const { #endif #ifdef TOOLS_ENABLED - return valid && (tool || ScriptServer::is_scripting_enabled()); + bool extra_cond = tool || ScriptServer::is_scripting_enabled(); #else - return valid; + bool extra_cond = true; #endif + + // FIXME Need to think this through better. + // For tool scripts, this will never fire if the class is not found. That's because we + // don't know if it's a tool script if we can't find the class to access the attributes. + if (extra_cond && !script_class) { + if (GDMono::get_singleton()->get_project_assembly() == NULL) { + // The project assembly is not loaded + ERR_EXPLAIN("Cannot instance script because the project assembly is not loaded. Script: " + get_path()); + ERR_FAIL_V(NULL); + } else { + // The project assembly is loaded, but the class could not found + ERR_EXPLAIN("Cannot instance script because the class '" + name + "' could not be found. Script: " + get_path()); + ERR_FAIL_V(NULL); + } + } + + return valid && extra_cond; } StringName CSharpScript::get_instance_base_type() const { @@ -2247,17 +2360,13 @@ CSharpInstance *CSharpScript::_create_instance(const Variant **p_args, int p_arg ERR_FAIL_V(NULL); } - uint32_t pinned_gchandle = MonoGCHandle::new_strong_handle_pinned(mono_object); // we might lock after this, so pin it - -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->lock(); -#endif - - instances.insert(instance->owner); + // Tie managed to unmanaged + instance->gchandle = MonoGCHandle::create_strong(mono_object); -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->unlock(); -#endif + { + SCOPED_MUTEX_LOCK(CSharpLanguage::get_singleton()->script_instances_mutex); + instances.insert(instance->owner); + } CACHED_FIELD(GodotObject, ptr)->set_value_raw(mono_object, instance->owner); @@ -2265,13 +2374,8 @@ CSharpInstance *CSharpScript::_create_instance(const Variant **p_args, int p_arg GDMonoMethod *ctor = script_class->get_method(CACHED_STRING_NAME(dotctor), p_argcount); ctor->invoke(mono_object, p_args); - // Tie managed to unmanaged - instance->gchandle = MonoGCHandle::create_strong(mono_object); - /* STEP 3, PARTY */ - MonoGCHandle::free_handle(pinned_gchandle); - //@TODO make thread safe return instance; } @@ -2317,20 +2421,6 @@ ScriptInstance *CSharpScript::instance_create(Object *p_this) { CRASH_COND(!valid); #endif - if (!script_class) { - if (GDMono::get_singleton()->get_project_assembly() == NULL) { - // The project assembly is not loaded - ERR_EXPLAIN("Cannot instance script because the project assembly is not loaded. Script: " + get_path()); - ERR_FAIL_V(NULL); - } else { - // The project assembly is loaded, but the class could not found - ERR_EXPLAIN("Cannot instance script because the class '" + name + "' could not be found. Script: " + get_path()); - ERR_FAIL_V(NULL); - } - } - - ERR_FAIL_COND_V(!valid, NULL); - if (native) { String native_name = native->get_name(); if (!ClassDB::is_parent_class(p_this->get_class_name(), native_name)) { @@ -2360,17 +2450,8 @@ PlaceHolderScriptInstance *CSharpScript::placeholder_instance_create(Object *p_t bool CSharpScript::instance_has(const Object *p_this) const { -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->lock(); -#endif - - bool ret = instances.has((Object *)p_this); - -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->unlock(); -#endif - - return ret; + SCOPED_MUTEX_LOCK(CSharpLanguage::get_singleton()->script_instances_mutex); + return instances.has((Object *)p_this); } bool CSharpScript::has_source_code() const { @@ -2403,22 +2484,34 @@ bool CSharpScript::has_method(const StringName &p_method) const { Error CSharpScript::reload(bool p_keep_state) { -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->lock(); -#endif - - bool has_instances = instances.size(); - -#ifndef NO_THREADS - CSharpLanguage::singleton->lock->unlock(); -#endif + bool has_instances; + { + SCOPED_MUTEX_LOCK(CSharpLanguage::get_singleton()->script_instances_mutex); + has_instances = instances.size(); + } ERR_FAIL_COND_V(!p_keep_state && has_instances, ERR_ALREADY_IN_USE); GDMonoAssembly *project_assembly = GDMono::get_singleton()->get_project_assembly(); if (project_assembly) { - script_class = project_assembly->get_object_derived_class(name); + const Variant *script_metadata_var = CSharpLanguage::get_singleton()->get_scripts_metadata().getptr(get_path()); + if (script_metadata_var) { + Dictionary script_metadata = script_metadata_var->operator Dictionary()["class"]; + const Variant *namespace_ = script_metadata.getptr("namespace"); + const Variant *class_name = script_metadata.getptr("class_name"); + ERR_FAIL_NULL_V(namespace_, ERR_BUG); + ERR_FAIL_NULL_V(class_name, ERR_BUG); + GDMonoClass *klass = project_assembly->get_class(namespace_->operator String(), class_name->operator String()); + if (klass) { + bool obj_type = CACHED_CLASS(GodotObject)->is_assignable_from(klass); + ERR_FAIL_COND_V(!obj_type, ERR_BUG); + script_class = klass; + } + } else { + // Missing script metadata. Fallback to legacy method + script_class = project_assembly->get_object_derived_class(name); + } valid = script_class != NULL; @@ -2546,29 +2639,14 @@ int CSharpScript::get_member_line(const StringName &p_member) const { Error CSharpScript::load_source_code(const String &p_path) { - PoolVector<uint8_t> sourcef; - Error err; - FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, err); - - int len = f->get_len(); - sourcef.resize(len + 1); - PoolVector<uint8_t>::Write w = sourcef.write(); - int r = f->get_buffer(w.ptr(), len); - f->close(); - memdelete(f); - ERR_FAIL_COND_V(r != len, ERR_CANT_OPEN); - w[len] = 0; - - String s; - if (s.parse_utf8((const char *)w.ptr())) { - - ERR_EXPLAIN("Script '" + p_path + "' contains invalid unicode (utf-8), so it was not loaded. Please ensure that scripts are saved in valid utf-8 unicode."); - ERR_FAIL_V(ERR_INVALID_DATA); + Error ferr = read_all_file_utf8(p_path, source); + if (ferr != OK) { + if (ferr == ERR_INVALID_DATA) { + ERR_EXPLAIN("Script '" + p_path + "' contains invalid unicode (utf-8), so it was not loaded. Please ensure that scripts are saved in valid utf-8 unicode."); + } + ERR_FAIL_V(ferr); } - source = s; - #ifdef TOOLS_ENABLED source_changed_cache = true; #endif @@ -2596,35 +2674,19 @@ CSharpScript::CSharpScript() : _resource_path_changed(); #ifdef DEBUG_ENABLED - -#ifndef NO_THREADS - CSharpLanguage::get_singleton()->lock->lock(); -#endif - - CSharpLanguage::get_singleton()->script_list.add(&script_list); - -#ifndef NO_THREADS - CSharpLanguage::get_singleton()->lock->unlock(); + { + SCOPED_MUTEX_LOCK(CSharpLanguage::get_singleton()->script_instances_mutex); + CSharpLanguage::get_singleton()->script_list.add(&this->script_list); + } #endif - -#endif // DEBUG_ENABLED } CSharpScript::~CSharpScript() { #ifdef DEBUG_ENABLED - -#ifndef NO_THREADS - CSharpLanguage::get_singleton()->lock->lock(); -#endif - - CSharpLanguage::get_singleton()->script_list.remove(&script_list); - -#ifndef NO_THREADS - CSharpLanguage::get_singleton()->lock->unlock(); + SCOPED_MUTEX_LOCK(CSharpLanguage::get_singleton()->script_instances_mutex); + CSharpLanguage::get_singleton()->script_list.remove(&this->script_list); #endif - -#endif // DEBUG_ENABLED } /*************** RESOURCE ***************/ @@ -2718,7 +2780,8 @@ Error ResourceFormatSaverCSharpScript::save(const String &p_path, const RES &p_r "Compile", ProjectSettings::get_singleton()->globalize_path(p_path)); } else { - ERR_PRINTS("Cannot add " + p_path + " to the C# project because it could not be created."); + ERR_PRINTS("Failed to create C# project"); + ERR_PRINTS("Cannot add " + p_path + " to the C# project"); } } #endif diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 8b0a095890..501e0d9d6d 100644 --- a/modules/mono/csharp_script.h +++ b/modules/mono/csharp_script.h @@ -67,7 +67,7 @@ class CSharpScript : public Script { friend class CSharpInstance; friend class CSharpLanguage; - friend class CSharpScriptDepSort; + friend struct CSharpScriptDepSort; bool tool; bool valid; @@ -82,6 +82,21 @@ class CSharpScript : public Script { Set<Object *> instances; +#ifdef DEBUG_ENABLED + Set<ObjectID> pending_reload_instances; +#endif + + struct StateBackup { + // TODO + // Replace with buffer containing the serialized state of managed scripts. + // Keep variant state backup to use only with script instance placeholders. + List<Pair<StringName, Variant> > properties; + }; + +#ifdef TOOLS_ENABLED + Map<ObjectID, CSharpScript::StateBackup> pending_reload_state; +#endif + String source; StringName name; @@ -105,10 +120,6 @@ class CSharpScript : public Script { virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder); #endif -#ifdef DEBUG_ENABLED - Map<ObjectID, List<Pair<StringName, Variant> > > pending_reload_state; -#endif - Map<StringName, PropertyInfo> member_info; void _clear(); @@ -158,6 +169,8 @@ public: virtual void update_exports(); virtual bool is_tool() const { return tool; } + virtual bool is_valid() const { return valid; } + virtual Ref<Script> get_base_script() const; virtual ScriptLanguage *get_language() const; @@ -184,6 +197,8 @@ class CSharpInstance : public ScriptInstance { bool base_ref; bool ref_dying; bool unsafe_referenced; + bool predelete_notified; + bool destructing_script_instance; Ref<CSharpScript> script; Ref<MonoGCHandle> gchandle; @@ -204,6 +219,8 @@ class CSharpInstance : public ScriptInstance { public: MonoObject *get_mono_object() const; + _FORCE_INLINE_ bool is_destructing_script_instance() { return destructing_script_instance; } + virtual bool set(const StringName &p_name, const Variant &p_value); virtual bool get(const StringName &p_name, Variant &r_ret) const; virtual void get_property_list(List<PropertyInfo> *p_properties) const; @@ -253,11 +270,9 @@ class CSharpLanguage : public ScriptLanguage { GDMono *gdmono; SelfList<CSharpScript>::List script_list; - Mutex *lock; - Mutex *script_bind_lock; - Mutex *script_gchandle_release_lock; - - Map<Ref<CSharpScript>, Map<ObjectID, List<Pair<StringName, Variant> > > > to_reload; + Mutex *script_instances_mutex; + Mutex *script_gchandle_release_mutex; + Mutex *language_bind_mutex; Map<Object *, CSharpScriptBinding> script_bindings; @@ -275,6 +290,8 @@ class CSharpLanguage : public ScriptLanguage { int lang_idx; + Dictionary scripts_metadata; + public: StringNameCache string_names; @@ -292,9 +309,14 @@ public: bool debug_break_parse(const String &p_file, int p_line, const String &p_error); #ifdef TOOLS_ENABLED - void reload_assemblies_if_needed(bool p_soft_reload); + bool is_assembly_reloading_needed(); + void reload_assemblies(bool p_soft_reload); #endif + void project_assembly_loaded(); + + _FORCE_INLINE_ const Dictionary &get_scripts_metadata() { return scripts_metadata; } + virtual String get_name() const; /* LANGUAGE FUNCTIONS */ diff --git a/modules/mono/doc_classes/GodotSharp.xml b/modules/mono/doc_classes/GodotSharp.xml index 985c66464b..921c1ca825 100644 --- a/modules/mono/doc_classes/GodotSharp.xml +++ b/modules/mono/doc_classes/GodotSharp.xml @@ -23,18 +23,44 @@ Detaches the current thread from the mono runtime. </description> </method> - <method name="is_domain_loaded"> + <method name="get_domain_id"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_scripts_domain_id"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="is_domain_finalizing_for_unload"> + <return type="bool"> + </return> + <argument index="0" name="domain_id" type="int"> + </argument> + <description> + Returns whether the domain is being finalized. + </description> + </method> + <method name="is_runtime_initialized"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="is_runtime_shutting_down"> <return type="bool"> </return> <description> - Returns whether the scripts domain is loaded. </description> </method> - <method name="is_finalizing_domain"> + <method name="is_scripts_domain_loaded"> <return type="bool"> </return> <description> - Returns whether the scripts domain is being finalized. + Returns whether the scripts domain is loaded. </description> </method> </methods> diff --git a/modules/mono/editor/GodotSharpTools/.gitignore b/modules/mono/editor/GodotSharpTools/.gitignore new file mode 100644 index 0000000000..296ad48834 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/.gitignore @@ -0,0 +1,2 @@ +# nuget packages +packages
\ No newline at end of file diff --git a/modules/mono/editor/GodotSharpTools/Editor/GodotSharpExport.cs b/modules/mono/editor/GodotSharpTools/Editor/GodotSharpExport.cs new file mode 100644 index 0000000000..5fd708d539 --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/Editor/GodotSharpExport.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; + +namespace GodotSharpTools.Editor +{ + public static class GodotSharpExport + { + public static void _ExportBegin(string[] features, bool debug, string path, int flags) + { + var featureSet = new HashSet<string>(features); + + if (PlatformHasTemplateDir(featureSet)) + { + string templateDirName = "data.mono"; + + if (featureSet.Contains("Windows")) + { + templateDirName += ".windows"; + templateDirName += featureSet.Contains("64") ? ".64" : ".32"; + } + else if (featureSet.Contains("X11")) + { + templateDirName += ".x11"; + templateDirName += featureSet.Contains("64") ? ".64" : ".32"; + } + else + { + throw new NotSupportedException("Target platform not supported"); + } + + templateDirName += debug ? ".debug" : ".release"; + + string templateDirPath = Path.Combine(GetTemplatesDir(), templateDirName); + + if (!Directory.Exists(templateDirPath)) + throw new FileNotFoundException("Data template directory not found"); + + string outputDir = new FileInfo(path).Directory.FullName; + + string outputDataDir = Path.Combine(outputDir, GetDataDirName()); + + if (Directory.Exists(outputDataDir)) + Directory.Delete(outputDataDir, recursive: true); // Clean first + + Directory.CreateDirectory(outputDataDir); + + foreach (string dir in Directory.GetDirectories(templateDirPath, "*", SearchOption.AllDirectories)) + { + Directory.CreateDirectory(Path.Combine(outputDataDir, dir.Substring(templateDirPath.Length + 1))); + } + + foreach (string file in Directory.GetFiles(templateDirPath, "*", SearchOption.AllDirectories)) + { + File.Copy(file, Path.Combine(outputDataDir, file.Substring(templateDirPath.Length + 1))); + } + } + } + + public static bool PlatformHasTemplateDir(HashSet<string> featureSet) + { + // OSX export templates are contained in a zip, so we place + // our custom template inside it and let Godot do the rest. + return !featureSet.Contains("OSX"); + } + + [MethodImpl(MethodImplOptions.InternalCall)] + extern static string GetTemplatesDir(); + + [MethodImpl(MethodImplOptions.InternalCall)] + extern static string GetDataDirName(); + } +} diff --git a/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj b/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj index 773e8196f7..f9e9f41977 100644 --- a/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj +++ b/modules/mono/editor/GodotSharpTools/GodotSharpTools.csproj @@ -31,6 +31,9 @@ <Reference Include="System" /> <Reference Include="Microsoft.Build" /> <Reference Include="Microsoft.Build.Framework" /> + <Reference Include="DotNet.Glob, Version=2.1.1.0, Culture=neutral, PublicKeyToken=b68cc888b4f632d1, processorArchitecture=MSIL"> + <HintPath>packages\DotNet.Glob.2.1.1\lib\net45\DotNet.Glob.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="StringExtensions.cs" /> @@ -41,6 +44,10 @@ <Compile Include="Project\ProjectUtils.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Utils\OS.cs" /> + <Compile Include="Editor\GodotSharpExport.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project>
\ No newline at end of file diff --git a/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs b/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs index f00ec5a2ad..647d9ac81d 100644 --- a/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs +++ b/modules/mono/editor/GodotSharpTools/Project/ProjectExtensions.cs @@ -1,4 +1,5 @@ using System; +using DotNet.Globbing; using Microsoft.Build.Construction; namespace GodotSharpTools.Project @@ -7,7 +8,10 @@ namespace GodotSharpTools.Project { public static bool HasItem(this ProjectRootElement root, string itemType, string include) { - string includeNormalized = include.NormalizePath(); + GlobOptions globOptions = new GlobOptions(); + globOptions.Evaluation.CaseInsensitive = false; + + string normalizedInclude = include.NormalizePath(); foreach (var itemGroup in root.ItemGroups) { @@ -16,10 +20,14 @@ namespace GodotSharpTools.Project foreach (var item in itemGroup.Items) { - if (item.ItemType == itemType) + if (item.ItemType != itemType) + continue; + + var glob = Glob.Parse(item.Include.NormalizePath(), globOptions); + + if (glob.IsMatch(normalizedInclude)) { - if (item.Include.NormalizePath() == includeNormalized) - return true; + return true; } } } diff --git a/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs b/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs index 1d863e6f61..2ce7837a27 100644 --- a/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs +++ b/modules/mono/editor/GodotSharpTools/Project/ProjectGenerator.cs @@ -6,18 +6,24 @@ namespace GodotSharpTools.Project { public static class ProjectGenerator { + public const string CoreApiProjectName = "GodotSharp"; + public const string EditorApiProjectName = "GodotSharpEditor"; + const string CoreApiProjectGuid = "{AEBF0036-DA76-4341-B651-A3F2856AB2FA}"; + const string EditorApiProjectGuid = "{8FBEC238-D944-4074-8548-B3B524305905}"; + public static string GenCoreApiProject(string dir, string[] compileItems) { - string path = Path.Combine(dir, CoreApiProject + ".csproj"); + string path = Path.Combine(dir, CoreApiProjectName + ".csproj"); ProjectPropertyGroupElement mainGroup; - var root = CreateLibraryProject(CoreApiProject, out mainGroup); + var root = CreateLibraryProject(CoreApiProjectName, out mainGroup); mainGroup.AddProperty("DocumentationFile", Path.Combine("$(OutputPath)", "$(AssemblyName).xml")); mainGroup.SetProperty("RootNamespace", "Godot"); + mainGroup.SetProperty("ProjectGuid", CoreApiProjectGuid); - GenAssemblyInfoFile(root, dir, CoreApiProject, - new string[] { "[assembly: InternalsVisibleTo(\"" + EditorApiProject + "\")]" }, + GenAssemblyInfoFile(root, dir, CoreApiProjectName, + new string[] { "[assembly: InternalsVisibleTo(\"" + EditorApiProjectName + "\")]" }, new string[] { "System.Runtime.CompilerServices" }); foreach (var item in compileItems) @@ -27,33 +33,33 @@ namespace GodotSharpTools.Project root.Save(path); - return root.GetGuid().ToString().ToUpper(); + return CoreApiProjectGuid; } - public static string GenEditorApiProject(string dir, string coreApiHintPath, string[] compileItems) + public static string GenEditorApiProject(string dir, string coreApiProjPath, string[] compileItems) { - string path = Path.Combine(dir, EditorApiProject + ".csproj"); + string path = Path.Combine(dir, EditorApiProjectName + ".csproj"); ProjectPropertyGroupElement mainGroup; - var root = CreateLibraryProject(EditorApiProject, out mainGroup); + var root = CreateLibraryProject(EditorApiProjectName, out mainGroup); mainGroup.AddProperty("DocumentationFile", Path.Combine("$(OutputPath)", "$(AssemblyName).xml")); mainGroup.SetProperty("RootNamespace", "Godot"); + mainGroup.SetProperty("ProjectGuid", EditorApiProjectGuid); - GenAssemblyInfoFile(root, dir, EditorApiProject); + GenAssemblyInfoFile(root, dir, EditorApiProjectName); foreach (var item in compileItems) { root.AddItem("Compile", item.RelativeToPath(dir).Replace("/", "\\")); } - var coreApiRef = root.AddItem("Reference", CoreApiProject); - coreApiRef.AddMetadata("HintPath", coreApiHintPath); + var coreApiRef = root.AddItem("ProjectReference", coreApiProjPath.Replace("/", "\\")); coreApiRef.AddMetadata("Private", "False"); root.Save(path); - return root.GetGuid().ToString().ToUpper(); + return EditorApiProjectGuid; } public static string GenGameProject(string dir, string name, string[] compileItems) @@ -77,13 +83,13 @@ namespace GodotSharpTools.Project toolsGroup.AddProperty("WarningLevel", "4"); toolsGroup.AddProperty("ConsolePause", "false"); - var coreApiRef = root.AddItem("Reference", CoreApiProject); - coreApiRef.AddMetadata("HintPath", Path.Combine("$(ProjectDir)", ".mono", "assemblies", CoreApiProject + ".dll")); + var coreApiRef = root.AddItem("Reference", CoreApiProjectName); + coreApiRef.AddMetadata("HintPath", Path.Combine("$(ProjectDir)", ".mono", "assemblies", CoreApiProjectName + ".dll")); coreApiRef.AddMetadata("Private", "False"); - var editorApiRef = root.AddItem("Reference", EditorApiProject); + var editorApiRef = root.AddItem("Reference", EditorApiProjectName); editorApiRef.Condition = " '$(Configuration)' == 'Tools' "; - editorApiRef.AddMetadata("HintPath", Path.Combine("$(ProjectDir)", ".mono", "assemblies", EditorApiProject + ".dll")); + editorApiRef.AddMetadata("HintPath", Path.Combine("$(ProjectDir)", ".mono", "assemblies", EditorApiProjectName + ".dll")); editorApiRef.AddMetadata("Private", "False"); GenAssemblyInfoFile(root, dir, name); @@ -182,9 +188,6 @@ namespace GodotSharpTools.Project } } - public const string CoreApiProject = "GodotSharp"; - public const string EditorApiProject = "GodotSharpEditor"; - private const string assemblyInfoTemplate = @"using System.Reflection;{0} diff --git a/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs b/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs index 6889ea715f..a13f4fd6ef 100644 --- a/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs +++ b/modules/mono/editor/GodotSharpTools/Project/ProjectUtils.cs @@ -1,5 +1,6 @@ -using System; +using System.Collections.Generic; using System.IO; +using DotNet.Globbing; using Microsoft.Build.Construction; namespace GodotSharpTools.Project @@ -10,8 +11,61 @@ namespace GodotSharpTools.Project { var dir = Directory.GetParent(projectPath).FullName; var root = ProjectRootElement.Open(projectPath); - if (root.AddItemChecked(itemType, include.RelativeToPath(dir).Replace("/", "\\"))) + var normalizedInclude = include.RelativeToPath(dir).Replace("/", "\\"); + + if (root.AddItemChecked(itemType, normalizedInclude)) root.Save(); } + + private static string[] GetAllFilesRecursive(string rootDirectory, string mask) + { + string[] files = Directory.GetFiles(rootDirectory, mask, SearchOption.AllDirectories); + + // We want relative paths + for (int i = 0; i < files.Length; i++) { + files[i] = files[i].RelativeToPath(rootDirectory); + } + + return files; + } + + public static string[] GetIncludeFiles(string projectPath, string itemType) + { + var result = new List<string>(); + var existingFiles = GetAllFilesRecursive(Path.GetDirectoryName(projectPath), "*.cs"); + + GlobOptions globOptions = new GlobOptions(); + globOptions.Evaluation.CaseInsensitive = false; + + var root = ProjectRootElement.Open(projectPath); + + foreach (var itemGroup in root.ItemGroups) + { + if (itemGroup.Condition.Length != 0) + continue; + + foreach (var item in itemGroup.Items) + { + if (item.ItemType != itemType) + continue; + + string normalizedInclude = item.Include.NormalizePath(); + + var glob = Glob.Parse(normalizedInclude, globOptions); + + // TODO Check somehow if path has no blog to avoid the following loop... + + foreach (var existingFile in existingFiles) + { + if (glob.IsMatch(existingFile)) + { + result.Add(existingFile); + } + } + } + } + + return result.ToArray(); + } } } diff --git a/modules/mono/editor/GodotSharpTools/StringExtensions.cs b/modules/mono/editor/GodotSharpTools/StringExtensions.cs index b66c86f8ce..b0436d2f18 100644 --- a/modules/mono/editor/GodotSharpTools/StringExtensions.cs +++ b/modules/mono/editor/GodotSharpTools/StringExtensions.cs @@ -36,7 +36,9 @@ namespace GodotSharpTools public static bool IsAbsolutePath(this string path) { - return path.StartsWith("/") || path.StartsWith("\\") || path.StartsWith(driveRoot); + return path.StartsWith("/", StringComparison.Ordinal) || + path.StartsWith("\\", StringComparison.Ordinal) || + path.StartsWith(driveRoot, StringComparison.Ordinal); } public static string CsvEscape(this string value, char delimiter = ',') diff --git a/modules/mono/editor/GodotSharpTools/packages.config b/modules/mono/editor/GodotSharpTools/packages.config new file mode 100644 index 0000000000..2c7cb0bd4b --- /dev/null +++ b/modules/mono/editor/GodotSharpTools/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="DotNet.Glob" version="2.1.1" targetFramework="net45" /> +</packages>
\ No newline at end of file diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp index 308c54ecb3..166b3e1324 100644 --- a/modules/mono/editor/bindings_generator.cpp +++ b/modules/mono/editor/bindings_generator.cpp @@ -47,7 +47,6 @@ #include "../utils/path_utils.h" #include "../utils/string_utils.h" #include "csharp_project.h" -#include "net_solution.h" #define CS_INDENT " " // 4 whitespaces @@ -97,7 +96,7 @@ #define C_METHOD_MONOARRAY_TO(m_type) C_NS_MONOMARSHAL "::mono_array_to_" #m_type #define C_METHOD_MONOARRAY_FROM(m_type) C_NS_MONOMARSHAL "::" #m_type "_to_mono_array" -#define BINDINGS_GENERATOR_VERSION UINT32_C(3) +#define BINDINGS_GENERATOR_VERSION UINT32_C(5) const char *BindingsGenerator::TypeInterface::DEFAULT_VARARG_C_IN = "\t%0 %1_in = %1;\n"; @@ -173,23 +172,74 @@ static String snake_to_camel_case(const String &p_identifier, bool p_input_is_up return ret; } -String BindingsGenerator::_determine_enum_prefix(const EnumInterface &p_ienum) { +int BindingsGenerator::_determine_enum_prefix(const EnumInterface &p_ienum) { CRASH_COND(p_ienum.constants.empty()); - const List<ConstantInterface>::Element *front = p_ienum.constants.front(); - int candidate_len = front->get().name.length(); + const ConstantInterface &front_iconstant = p_ienum.constants.front()->get(); + Vector<String> front_parts = front_iconstant.name.split("_", /* p_allow_empty: */ true); + int candidate_len = front_parts.size() - 1; - for (const List<ConstantInterface>::Element *E = front->next(); E; E = E->next()) { - int j = 0; - for (j = 0; j < candidate_len && j < E->get().name.length(); j++) { - if (front->get().name[j] != E->get().name[j]) - break; + if (candidate_len == 0) + return 0; + + for (const List<ConstantInterface>::Element *E = p_ienum.constants.front()->next(); E; E = E->next()) { + const ConstantInterface &iconstant = E->get(); + + Vector<String> parts = iconstant.name.split("_", /* p_allow_empty: */ true); + + int i; + for (i = 0; i < candidate_len && i < parts.size(); i++) { + if (front_parts[i] != parts[i]) { + // HARDCODED: Some Flag enums have the prefix 'FLAG_' for everything except 'FLAGS_DEFAULT' (same for 'METHOD_FLAG_' and'METHOD_FLAGS_DEFAULT'). + bool hardcoded_exc = (i == candidate_len - 1 && ((front_parts[i] == "FLAGS" && parts[i] == "FLAG") || (front_parts[i] == "FLAG" && parts[i] == "FLAGS"))); + if (!hardcoded_exc) + break; + } } - candidate_len = j; + candidate_len = i; + + if (candidate_len == 0) + return 0; } - return front->get().name.substr(0, candidate_len); + return candidate_len; +} + +void BindingsGenerator::_apply_prefix_to_enum_constants(BindingsGenerator::EnumInterface &p_ienum, int p_prefix_length) { + + if (p_prefix_length > 0) { + for (List<ConstantInterface>::Element *E = p_ienum.constants.front(); E; E = E->next()) { + int curr_prefix_length = p_prefix_length; + + ConstantInterface &curr_const = E->get(); + + String constant_name = curr_const.name; + + Vector<String> parts = constant_name.split("_", /* p_allow_empty: */ true); + + if (parts.size() <= curr_prefix_length) + continue; + + if (parts[curr_prefix_length][0] >= '0' && parts[curr_prefix_length][0] <= '9') { + // The name of enum constants may begin with a numeric digit when strip from the enum prefix, + // so we make the prefix for this constant one word shorter in those cases. + for (curr_prefix_length = curr_prefix_length - 1; curr_prefix_length > 0; curr_prefix_length--) { + if (parts[curr_prefix_length][0] < '0' || parts[curr_prefix_length][0] > '9') + break; + } + } + + constant_name = ""; + for (int i = curr_prefix_length; i < parts.size(); i++) { + if (i > curr_prefix_length) + constant_name += "_"; + constant_name += parts[i]; + } + + curr_const.proxy_name = snake_to_pascal_case(constant_name, true); + } + } } void BindingsGenerator::_generate_method_icalls(const TypeInterface &p_itype) { @@ -272,7 +322,7 @@ void BindingsGenerator::_generate_global_constants(List<String> &p_output) { } p_output.push_back(MEMBER_BEGIN "public const int "); - p_output.push_back(iconstant.name); + p_output.push_back(iconstant.proxy_name); p_output.push_back(" = "); p_output.push_back(itos(iconstant.value)); p_output.push_back(";"); @@ -334,25 +384,8 @@ void BindingsGenerator::_generate_global_constants(List<String> &p_output) { p_output.push_back(INDENT2 "/// </summary>\n"); } - String constant_name = iconstant.name; - - if (!ienum.prefix.empty() && constant_name.begins_with(ienum.prefix)) { - constant_name = constant_name.substr(ienum.prefix.length(), constant_name.length()); - } - - if (constant_name[0] >= '0' && constant_name[0] <= '9') { - // The name of enum constants may begin with a numeric digit when strip from the enum prefix, - // so we make the prefix one word shorter in those cases. - int i = 0; - for (i = ienum.prefix.length() - 1; i >= 0; i--) { - if (ienum.prefix[i] >= 'A' && ienum.prefix[i] <= 'Z') - break; - } - constant_name = ienum.prefix.substr(i, ienum.prefix.length()) + constant_name; - } - p_output.push_back(INDENT2); - p_output.push_back(constant_name); + p_output.push_back(iconstant.proxy_name); p_output.push_back(" = "); p_output.push_back(itos(iconstant.value)); p_output.push_back(E != ienum.constants.back() ? ",\n" : "\n"); @@ -367,32 +400,29 @@ void BindingsGenerator::_generate_global_constants(List<String> &p_output) { p_output.push_back(CLOSE_BLOCK); // end of namespace } -Error BindingsGenerator::generate_cs_core_project(const String &p_output_dir, bool p_verbose_output) { +Error BindingsGenerator::generate_cs_core_project(const String &p_solution_dir, DotNetSolution &r_solution, bool p_verbose_output) { verbose_output = p_verbose_output; + String proj_dir = p_solution_dir.plus_file(CORE_API_ASSEMBLY_NAME); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); - if (!DirAccess::exists(p_output_dir)) { - Error err = da->make_dir_recursive(p_output_dir); + if (!DirAccess::exists(proj_dir)) { + Error err = da->make_dir_recursive(proj_dir); ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); } - da->change_dir(p_output_dir); + da->change_dir(proj_dir); da->make_dir("Core"); da->make_dir("ObjectType"); - String core_dir = path_join(p_output_dir, "Core"); - String obj_type_dir = path_join(p_output_dir, "ObjectType"); + String core_dir = path_join(proj_dir, "Core"); + String obj_type_dir = path_join(proj_dir, "ObjectType"); Vector<String> compile_items; - NETSolution solution(API_ASSEMBLY_NAME); - - if (!solution.set_path(p_output_dir)) - return ERR_FILE_NOT_FOUND; - // Generate source file for global scope constants and enums { List<String> constants_source; @@ -496,15 +526,15 @@ Error BindingsGenerator::generate_cs_core_project(const String &p_output_dir, bo compile_items.push_back(internal_methods_file); - String guid = CSharpProject::generate_core_api_project(p_output_dir, compile_items); + String guid = CSharpProject::generate_core_api_project(proj_dir, compile_items); - solution.add_new_project(API_ASSEMBLY_NAME, guid); + DotNetSolution::ProjectInfo proj_info; + proj_info.guid = guid; + proj_info.relpath = String(CORE_API_ASSEMBLY_NAME).plus_file(CORE_API_ASSEMBLY_NAME ".csproj"); + proj_info.configs.push_back("Debug"); + proj_info.configs.push_back("Release"); - Error sln_error = solution.save(); - if (sln_error != OK) { - ERR_PRINT("Could not to save .NET solution."); - return sln_error; - } + r_solution.add_new_project(CORE_API_ASSEMBLY_NAME, proj_info); if (verbose_output) OS::get_singleton()->print("The solution and C# project for the Core API was generated successfully\n"); @@ -512,32 +542,29 @@ Error BindingsGenerator::generate_cs_core_project(const String &p_output_dir, bo return OK; } -Error BindingsGenerator::generate_cs_editor_project(const String &p_output_dir, const String &p_core_dll_path, bool p_verbose_output) { +Error BindingsGenerator::generate_cs_editor_project(const String &p_solution_dir, DotNetSolution &r_solution, bool p_verbose_output) { verbose_output = p_verbose_output; + String proj_dir = p_solution_dir.plus_file(EDITOR_API_ASSEMBLY_NAME); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); - if (!DirAccess::exists(p_output_dir)) { - Error err = da->make_dir_recursive(p_output_dir); + if (!DirAccess::exists(proj_dir)) { + Error err = da->make_dir_recursive(proj_dir); ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); } - da->change_dir(p_output_dir); + da->change_dir(proj_dir); da->make_dir("Core"); da->make_dir("ObjectType"); - String core_dir = path_join(p_output_dir, "Core"); - String obj_type_dir = path_join(p_output_dir, "ObjectType"); + String core_dir = path_join(proj_dir, "Core"); + String obj_type_dir = path_join(proj_dir, "ObjectType"); Vector<String> compile_items; - NETSolution solution(EDITOR_API_ASSEMBLY_NAME); - - if (!solution.set_path(p_output_dir)) - return ERR_FILE_NOT_FOUND; - for (OrderedHashMap<StringName, TypeInterface>::Element E = obj_types.front(); E; E = E.next()) { const TypeInterface &itype = E.get(); @@ -598,19 +625,57 @@ Error BindingsGenerator::generate_cs_editor_project(const String &p_output_dir, compile_items.push_back(internal_methods_file); - String guid = CSharpProject::generate_editor_api_project(p_output_dir, p_core_dll_path, compile_items); + String guid = CSharpProject::generate_editor_api_project(proj_dir, "../" CORE_API_ASSEMBLY_NAME "/" CORE_API_ASSEMBLY_NAME ".csproj", compile_items); + + DotNetSolution::ProjectInfo proj_info; + proj_info.guid = guid; + proj_info.relpath = String(EDITOR_API_ASSEMBLY_NAME).plus_file(EDITOR_API_ASSEMBLY_NAME ".csproj"); + proj_info.configs.push_back("Debug"); + proj_info.configs.push_back("Release"); + + r_solution.add_new_project(EDITOR_API_ASSEMBLY_NAME, proj_info); + + if (verbose_output) + OS::get_singleton()->print("The solution and C# project for the Editor API was generated successfully\n"); + + return OK; +} + +Error BindingsGenerator::generate_cs_api(const String &p_output_dir, bool p_verbose_output) { - solution.add_new_project(EDITOR_API_ASSEMBLY_NAME, guid); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); + + if (!DirAccess::exists(p_output_dir)) { + Error err = da->make_dir_recursive(p_output_dir); + ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); + } + + DotNetSolution solution(API_SOLUTION_NAME); + + if (!solution.set_path(p_output_dir)) + return ERR_FILE_NOT_FOUND; + + Error proj_err; + + proj_err = generate_cs_core_project(p_output_dir, solution, p_verbose_output); + if (proj_err != OK) { + ERR_PRINT("Generation of the Core API C# project failed"); + return proj_err; + } + + proj_err = generate_cs_editor_project(p_output_dir, solution, p_verbose_output); + if (proj_err != OK) { + ERR_PRINT("Generation of the Editor API C# project failed"); + return proj_err; + } Error sln_error = solution.save(); if (sln_error != OK) { - ERR_PRINT("Could not to save .NET solution."); + ERR_PRINT("Failed to save API solution"); return sln_error; } - if (verbose_output) - OS::get_singleton()->print("The solution and C# project for the Editor API was generated successfully\n"); - return OK; } @@ -646,8 +711,11 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str List<String> output; output.push_back("using System;\n"); // IntPtr + output.push_back("using System.Diagnostics;\n"); // DebuggerBrowsable + output.push_back("\n#pragma warning disable CS1591 // Disable warning: " "'Missing XML comment for publicly visible type or member'\n"); + output.push_back("\nnamespace " BINDINGS_NAMESPACE "\n" OPEN_BLOCK); const DocData::ClassDoc *class_doc = itype.class_doc; @@ -717,7 +785,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str } output.push_back(MEMBER_BEGIN "public const int "); - output.push_back(iconstant.name); + output.push_back(iconstant.proxy_name); output.push_back(" = "); output.push_back(itos(iconstant.value)); output.push_back(";"); @@ -757,25 +825,8 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str output.push_back(INDENT3 "/// </summary>\n"); } - String constant_name = iconstant.name; - - if (!ienum.prefix.empty() && constant_name.begins_with(ienum.prefix)) { - constant_name = constant_name.substr(ienum.prefix.length(), constant_name.length()); - } - - if (constant_name[0] >= '0' && constant_name[0] <= '9') { - // The name of enum constants may begin with a numeric digit when strip from the enum prefix, - // so we make the prefix one word shorter in those cases. - int i = 0; - for (i = ienum.prefix.length() - 1; i >= 0; i--) { - if (ienum.prefix[i] >= 'A' && ienum.prefix[i] <= 'Z') - break; - } - constant_name = ienum.prefix.substr(i, ienum.prefix.length()) + constant_name; - } - output.push_back(INDENT3); - output.push_back(constant_name); + output.push_back(iconstant.proxy_name); output.push_back(" = "); output.push_back(itos(iconstant.value)); output.push_back(E != ienum.constants.back() ? ",\n" : "\n"); @@ -1086,7 +1137,7 @@ Error BindingsGenerator::_generate_cs_method(const BindingsGenerator::TypeInterf // Generate method { if (!p_imethod.is_virtual && !p_imethod.requires_object_call) { - p_output.push_back(MEMBER_BEGIN "private static IntPtr "); + p_output.push_back(MEMBER_BEGIN "[DebuggerBrowsable(DebuggerBrowsableState.Never)]" MEMBER_BEGIN "private static IntPtr "); p_output.push_back(method_bind_field + " = Object." ICALL_GET_METHODBIND "(" BINDINGS_NATIVE_NAME_FIELD ", \""); p_output.push_back(p_imethod.name); p_output.push_back("\");\n"); @@ -1269,12 +1320,12 @@ Error BindingsGenerator::generate_glue(const String &p_output_dir) { output.push_back("namespace GodotSharpBindings\n" OPEN_BLOCK "\n"); output.push_back("uint64_t get_core_api_hash() { return "); - output.push_back(String::num_uint64(GDMono::get_singleton()->get_api_core_hash()) + "; }\n"); + output.push_back(String::num_uint64(GDMono::get_singleton()->get_api_core_hash()) + "U; }\n"); output.push_back("#ifdef TOOLS_ENABLED\n" "uint64_t get_editor_api_hash() { return "); - output.push_back(String::num_uint64(GDMono::get_singleton()->get_api_editor_hash()) + - "; }\n#endif // TOOLS_ENABLED\n"); + output.push_back(String::num_uint64(GDMono::get_singleton()->get_api_editor_hash()) + "U; }\n"); + output.push_back("#endif // TOOLS_ENABLED\n"); output.push_back("uint32_t get_bindings_version() { return "); output.push_back(String::num_uint64(BINDINGS_GENERATOR_VERSION) + "; }\n"); @@ -1843,11 +1894,13 @@ void BindingsGenerator::_populate_object_type_interfaces() { EnumInterface ienum(enum_proxy_cname); const List<StringName> &constants = enum_map.get(*k); for (const List<StringName>::Element *E = constants.front(); E; E = E->next()) { - int *value = class_info->constant_map.getptr(E->get()); + const StringName &constant_cname = E->get(); + String constant_name = constant_cname.operator String(); + int *value = class_info->constant_map.getptr(constant_cname); ERR_FAIL_NULL(value); - constant_list.erase(E->get().operator String()); + constant_list.erase(constant_name); - ConstantInterface iconstant(snake_to_pascal_case(E->get(), true), *value); + ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), *value); iconstant.const_doc = NULL; for (int i = 0; i < itype.class_doc->constants.size(); i++) { @@ -1862,7 +1915,9 @@ void BindingsGenerator::_populate_object_type_interfaces() { ienum.constants.push_back(iconstant); } - ienum.prefix = _determine_enum_prefix(ienum); + int prefix_length = _determine_enum_prefix(ienum); + + _apply_prefix_to_enum_constants(ienum, prefix_length); itype.enums.push_back(ienum); @@ -1876,10 +1931,11 @@ void BindingsGenerator::_populate_object_type_interfaces() { } for (const List<String>::Element *E = constant_list.front(); E; E = E->next()) { - int *value = class_info->constant_map.getptr(E->get()); + const String &constant_name = E->get(); + int *value = class_info->constant_map.getptr(StringName(E->get())); ERR_FAIL_NULL(value); - ConstantInterface iconstant(snake_to_pascal_case(E->get(), true), *value); + ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), *value); iconstant.const_doc = NULL; for (int i = 0; i < itype.class_doc->constants.size(); i++) { @@ -1990,18 +2046,18 @@ void BindingsGenerator::_populate_builtin_type_interfaces() { TypeInterface itype; -#define INSERT_STRUCT_TYPE(m_type, m_type_in) \ - { \ - itype = TypeInterface::create_value_type(String(#m_type)); \ - itype.c_in = "\tMARSHALLED_IN(" #m_type ", %1, %1_in);\n"; \ - itype.c_out = "\tMARSHALLED_OUT(" #m_type ", %1, ret_out)\n" \ - "\treturn mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(%2), ret_out);\n"; \ - itype.c_arg_in = "&%s_in"; \ - itype.c_type_in = m_type_in; \ - itype.cs_in = "ref %s"; \ - itype.cs_out = "return (%1)%0;"; \ - itype.im_type_out = "object"; \ - builtin_types.insert(itype.cname, itype); \ +#define INSERT_STRUCT_TYPE(m_type, m_type_in) \ + { \ + itype = TypeInterface::create_value_type(String(#m_type)); \ + itype.c_in = "\t%0 %1_in = MARSHALLED_IN(" #m_type ", %1);\n"; \ + itype.c_out = "\treturn MARSHALLED_OUT(" #m_type ", %1);\n"; \ + itype.c_arg_in = "&%s_in"; \ + itype.c_type_in = "GDMonoMarshal::M_" #m_type "*"; \ + itype.c_type_out = "GDMonoMarshal::M_" #m_type; \ + itype.cs_in = "ref %s"; \ + itype.cs_out = "return (%1)%0;"; \ + itype.im_type_out = itype.cs_type; \ + builtin_types.insert(itype.cname, itype); \ } INSERT_STRUCT_TYPE(Vector2, "real_t*") @@ -2019,26 +2075,31 @@ void BindingsGenerator::_populate_builtin_type_interfaces() { // bool itype = TypeInterface::create_value_type(String("bool")); - itype.c_arg_in = "&%s"; - // /* MonoBoolean <---> bool - itype.c_in = "\t%0 %1_in = (%0)%1;\n"; - itype.c_out = "\treturn (%0)%1;\n"; - itype.c_type = "bool"; - // */ - itype.c_type_in = "MonoBoolean"; - itype.c_type_out = itype.c_type_in; + + { + // MonoBoolean <---> bool + itype.c_in = "\t%0 %1_in = (%0)%1;\n"; + itype.c_out = "\treturn (%0)%1;\n"; + itype.c_type = "bool"; + itype.c_type_in = "MonoBoolean"; + itype.c_type_out = itype.c_type_in; + itype.c_arg_in = "&%s_in"; + } itype.im_type_in = itype.name; itype.im_type_out = itype.name; builtin_types.insert(itype.cname, itype); // int + // C interface is the same as that of enums. Remember to apply any + // changes done here to TypeInterface::postsetup_enum_type as well itype = TypeInterface::create_value_type(String("int")); itype.c_arg_in = "&%s_in"; - // /* ptrcall only supports int64_t and uint64_t - itype.c_in = "\t%0 %1_in = (%0)%1;\n"; - itype.c_out = "\treturn (%0)%1;\n"; - itype.c_type = "int64_t"; - // */ + { + // The expected types for parameters and return value in ptrcall are 'int64_t' or 'uint64_t'. + itype.c_in = "\t%0 %1_in = (%0)%1;\n"; + itype.c_out = "\treturn (%0)%1;\n"; + itype.c_type = "int64_t"; + } itype.c_type_in = "int32_t"; itype.c_type_out = itype.c_type_in; itype.im_type_in = itype.name; @@ -2047,21 +2108,22 @@ void BindingsGenerator::_populate_builtin_type_interfaces() { // real_t itype = TypeInterface(); + itype.name = "float"; // The name is always "float" in Variant, even with REAL_T_IS_DOUBLE. + itype.cname = itype.name; #ifdef REAL_T_IS_DOUBLE - itype.name = "double"; + itype.proxy_name = "double"; #else - itype.name = "float"; + itype.proxy_name = "float"; #endif - itype.cname = itype.name; - itype.proxy_name = itype.name; - itype.c_arg_in = "&%s_in"; - //* ptrcall only supports double - itype.c_in = "\t%0 %1_in = (%0)%1;\n"; - itype.c_out = "\treturn (%0)%1;\n"; - itype.c_type = "double"; - //*/ - itype.c_type_in = "real_t"; - itype.c_type_out = "real_t"; + { + // The expected type for parameters and return value in ptrcall is 'double'. + itype.c_in = "\t%0 %1_in = (%0)%1;\n"; + itype.c_out = "\treturn (%0)%1;\n"; + itype.c_type = "double"; + itype.c_type_in = "real_t"; + itype.c_type_out = "real_t"; + itype.c_arg_in = "&%s_in"; + } itype.cs_type = itype.proxy_name; itype.im_type_in = itype.proxy_name; itype.im_type_out = itype.proxy_name; @@ -2244,8 +2306,8 @@ void BindingsGenerator::_populate_global_constants() { String constant_name = GlobalConstants::get_global_constant_name(i); const DocData::ConstantDoc *const_doc = NULL; - for (int i = 0; i < global_scope_doc.constants.size(); i++) { - const DocData::ConstantDoc &curr_const_doc = global_scope_doc.constants[i]; + for (int j = 0; j < global_scope_doc.constants.size(); j++) { + const DocData::ConstantDoc &curr_const_doc = global_scope_doc.constants[j]; if (curr_const_doc.name == constant_name) { const_doc = &curr_const_doc; @@ -2256,7 +2318,7 @@ void BindingsGenerator::_populate_global_constants() { int constant_value = GlobalConstants::get_global_constant_value(i); StringName enum_name = GlobalConstants::get_global_constant_enum(i); - ConstantInterface iconstant(snake_to_pascal_case(constant_name, true), constant_value); + ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), constant_value); iconstant.const_doc = const_doc; if (enum_name != StringName()) { @@ -2284,16 +2346,18 @@ void BindingsGenerator::_populate_global_constants() { TypeInterface::postsetup_enum_type(enum_itype); enum_types.insert(enum_itype.cname, enum_itype); - ienum.prefix = _determine_enum_prefix(ienum); + int prefix_length = _determine_enum_prefix(ienum); - // HARDCODED + // HARDCODED: The Error enum have the prefix 'ERR_' for everything except 'OK' and 'FAILED'. if (ienum.cname == name_cache.enum_Error) { - if (!ienum.prefix.empty()) { // Just in case it ever changes + if (prefix_length > 0) { // Just in case it ever changes ERR_PRINTS("Prefix for enum 'Error' is not empty"); } - ienum.prefix = "Err"; + prefix_length = 1; // 'ERR_' } + + _apply_prefix_to_enum_constants(ienum, prefix_length); } } @@ -2335,12 +2399,11 @@ void BindingsGenerator::initialize() { void BindingsGenerator::handle_cmdline_args(const List<String> &p_cmdline_args) { - const int NUM_OPTIONS = 3; + const int NUM_OPTIONS = 2; int options_left = NUM_OPTIONS; String mono_glue_option = "--generate-mono-glue"; - String cs_core_api_option = "--generate-cs-core-api"; - String cs_editor_api_option = "--generate-cs-editor-api"; + String cs_api_option = "--generate-cs-api"; verbose_output = true; @@ -2354,42 +2417,24 @@ void BindingsGenerator::handle_cmdline_args(const List<String> &p_cmdline_args) if (path_elem) { if (get_singleton()->generate_glue(path_elem->get()) != OK) - ERR_PRINT("Mono glue generation failed"); + ERR_PRINTS(mono_glue_option + ": Failed to generate mono glue"); elem = elem->next(); } else { - ERR_PRINTS("--generate-mono-glue: No output directory specified"); + ERR_PRINTS(mono_glue_option + ": No output directory specified"); } --options_left; - } else if (elem->get() == cs_core_api_option) { + } else if (elem->get() == cs_api_option) { const List<String>::Element *path_elem = elem->next(); if (path_elem) { - if (get_singleton()->generate_cs_core_project(path_elem->get()) != OK) - ERR_PRINT("Generation of solution and C# project for the Core API failed"); + if (get_singleton()->generate_cs_api(path_elem->get()) != OK) + ERR_PRINTS(cs_api_option + ": Failed to generate the C# API"); elem = elem->next(); } else { - ERR_PRINTS(cs_core_api_option + ": No output directory specified"); - } - - --options_left; - - } else if (elem->get() == cs_editor_api_option) { - - const List<String>::Element *path_elem = elem->next(); - - if (path_elem) { - if (path_elem->next()) { - if (get_singleton()->generate_cs_editor_project(path_elem->get(), path_elem->next()->get()) != OK) - ERR_PRINT("Generation of solution and C# project for the Editor API failed"); - elem = path_elem->next(); - } else { - ERR_PRINTS(cs_editor_api_option + ": No hint path for the Core API dll specified"); - } - } else { - ERR_PRINTS(cs_editor_api_option + ": No output directory specified"); + ERR_PRINTS(cs_api_option + ": No output directory specified"); } --options_left; @@ -2401,7 +2446,7 @@ void BindingsGenerator::handle_cmdline_args(const List<String> &p_cmdline_args) verbose_output = false; if (options_left != NUM_OPTIONS) - exit(0); + ::exit(0); } #endif diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h index ad89255ba5..91c474c4f0 100644 --- a/modules/mono/editor/bindings_generator.h +++ b/modules/mono/editor/bindings_generator.h @@ -32,6 +32,7 @@ #define BINDINGS_GENERATOR_H #include "core/class_db.h" +#include "dotnet_solution.h" #include "editor/doc/doc_data.h" #include "editor/editor_help.h" @@ -43,20 +44,21 @@ class BindingsGenerator { struct ConstantInterface { String name; + String proxy_name; int value; const DocData::ConstantDoc *const_doc; ConstantInterface() {} - ConstantInterface(const String &p_name, int p_value) { + ConstantInterface(const String &p_name, const String &p_proxy_name, int p_value) { name = p_name; + proxy_name = p_proxy_name; value = p_value; } }; struct EnumInterface { StringName cname; - String prefix; List<ConstantInterface> constants; _FORCE_INLINE_ bool operator==(const EnumInterface &p_ienum) const { @@ -223,7 +225,7 @@ class BindingsGenerator { String c_in; /** - * Determines the name of the variable that will be passed as argument to a ptrcall. + * Determines the expression that will be passed as argument to ptrcall. * By default the value equals the name of the parameter, * this varies for types that require special manipulation via [c_in]. * Formatting elements: @@ -333,8 +335,6 @@ class BindingsGenerator { itype.proxy_name = itype.name; itype.c_type = itype.name; - itype.c_type_in = "void*"; - itype.c_type_out = "MonoObject*"; itype.cs_type = itype.proxy_name; itype.im_type_in = "ref " + itype.proxy_name; itype.im_type_out = itype.proxy_name; @@ -385,10 +385,19 @@ class BindingsGenerator { } static void postsetup_enum_type(TypeInterface &r_enum_itype) { - r_enum_itype.c_arg_in = "&%s"; - r_enum_itype.c_type = "int"; - r_enum_itype.c_type_in = "int"; - r_enum_itype.c_type_out = "int"; + // C interface is the same as that of 'int'. Remember to apply any + // changes done here to the 'int' type interface as well + + r_enum_itype.c_arg_in = "&%s_in"; + { + // The expected types for parameters and return value in ptrcall are 'int64_t' or 'uint64_t'. + r_enum_itype.c_in = "\t%0 %1_in = (%0)%1;\n"; + r_enum_itype.c_out = "\treturn (%0)%1;\n"; + r_enum_itype.c_type = "int64_t"; + } + r_enum_itype.c_type_in = "int32_t"; + r_enum_itype.c_type_out = r_enum_itype.c_type_in; + r_enum_itype.cs_type = r_enum_itype.proxy_name; r_enum_itype.cs_in = "(int)%s"; r_enum_itype.cs_out = "return (%1)%0;"; @@ -513,7 +522,8 @@ class BindingsGenerator { return p_type.name; } - String _determine_enum_prefix(const EnumInterface &p_ienum); + int _determine_enum_prefix(const EnumInterface &p_ienum); + void _apply_prefix_to_enum_constants(EnumInterface &p_ienum, int p_prefix_length); void _generate_method_icalls(const TypeInterface &p_itype); @@ -547,8 +557,9 @@ class BindingsGenerator { static BindingsGenerator *singleton; public: - Error generate_cs_core_project(const String &p_output_dir, bool p_verbose_output = true); - Error generate_cs_editor_project(const String &p_output_dir, const String &p_core_dll_path, bool p_verbose_output = true); + Error generate_cs_core_project(const String &p_solution_dir, DotNetSolution &r_solution, bool p_verbose_output = true); + Error generate_cs_editor_project(const String &p_solution_dir, DotNetSolution &r_solution, bool p_verbose_output = true); + Error generate_cs_api(const String &p_output_dir, bool p_verbose_output = true); Error generate_glue(const String &p_output_dir); static uint32_t get_version(); diff --git a/modules/mono/editor/csharp_project.cpp b/modules/mono/editor/csharp_project.cpp index 4764cbe941..416108603b 100644 --- a/modules/mono/editor/csharp_project.cpp +++ b/modules/mono/editor/csharp_project.cpp @@ -30,11 +30,17 @@ #include "csharp_project.h" +#include "core/io/json.h" +#include "core/os/dir_access.h" +#include "core/os/file_access.h" #include "core/os/os.h" #include "core/project_settings.h" +#include "../csharp_script.h" #include "../mono_gd/gd_mono_class.h" #include "../mono_gd/gd_mono_marshal.h" +#include "../utils/string_utils.h" +#include "script_class_parser.h" namespace CSharpProject { @@ -51,28 +57,28 @@ String generate_core_api_project(const String &p_dir, const Vector<String> &p_fi MonoObject *ret = klass->get_method("GenCoreApiProject", 2)->invoke(NULL, args, &exc); if (exc) { - GDMonoUtils::debug_unhandled_exception(exc); + GDMonoUtils::debug_print_unhandled_exception(exc); ERR_FAIL_V(String()); } return ret ? GDMonoMarshal::mono_string_to_godot((MonoString *)ret) : String(); } -String generate_editor_api_project(const String &p_dir, const String &p_core_dll_path, const Vector<String> &p_files) { +String generate_editor_api_project(const String &p_dir, const String &p_core_proj_path, const Vector<String> &p_files) { _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectGenerator"); Variant dir = p_dir; - Variant core_dll_path = p_core_dll_path; + Variant core_proj_path = p_core_proj_path; Variant compile_items = p_files; - const Variant *args[3] = { &dir, &core_dll_path, &compile_items }; + const Variant *args[3] = { &dir, &core_proj_path, &compile_items }; MonoException *exc = NULL; MonoObject *ret = klass->get_method("GenEditorApiProject", 3)->invoke(NULL, args, &exc); if (exc) { - GDMonoUtils::debug_unhandled_exception(exc); + GDMonoUtils::debug_print_unhandled_exception(exc); ERR_FAIL_V(String()); } @@ -93,7 +99,7 @@ String generate_game_project(const String &p_dir, const String &p_name, const Ve MonoObject *ret = klass->get_method("GenGameProject", 3)->invoke(NULL, args, &exc); if (exc) { - GDMonoUtils::debug_unhandled_exception(exc); + GDMonoUtils::debug_print_unhandled_exception(exc); ERR_FAIL_V(String()); } @@ -102,6 +108,9 @@ String generate_game_project(const String &p_dir, const String &p_name, const Ve void add_item(const String &p_project_path, const String &p_item_type, const String &p_include) { + if (!GLOBAL_DEF("mono/project/auto_update_project", true)) + return; + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) GDMonoClass *klass = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectUtils"); @@ -114,8 +123,122 @@ void add_item(const String &p_project_path, const String &p_item_type, const Str klass->get_method("AddItemToProjectChecked", 3)->invoke(NULL, args, &exc); if (exc) { - GDMonoUtils::debug_unhandled_exception(exc); + GDMonoUtils::debug_print_unhandled_exception(exc); ERR_FAIL(); } } + +Error generate_scripts_metadata(const String &p_project_path, const String &p_output_path) { + + _GDMONO_SCOPE_DOMAIN_(TOOLS_DOMAIN) + + if (FileAccess::exists(p_output_path)) { + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES); + Error rm_err = da->remove(p_output_path); + + ERR_EXPLAIN("Failed to remove old scripts metadata file"); + ERR_FAIL_COND_V(rm_err != OK, rm_err); + } + + GDMonoClass *project_utils = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Project", "ProjectUtils"); + + void *args[2] = { + GDMonoMarshal::mono_string_from_godot(p_project_path), + GDMonoMarshal::mono_string_from_godot("Compile") + }; + + MonoException *exc = NULL; + MonoArray *ret = (MonoArray *)project_utils->get_method("GetIncludeFiles", 2)->invoke_raw(NULL, args, &exc); + + if (exc) { + GDMonoUtils::debug_print_unhandled_exception(exc); + ERR_FAIL_V(FAILED); + } + + PoolStringArray project_files = GDMonoMarshal::mono_array_to_PoolStringArray(ret); + PoolStringArray::Read r = project_files.read(); + + Dictionary old_dict = CSharpLanguage::get_singleton()->get_scripts_metadata(); + Dictionary new_dict; + + for (int i = 0; i < project_files.size(); i++) { + const String &project_file = ("res://" + r[i]).simplify_path(); + + uint64_t modified_time = FileAccess::get_modified_time(project_file); + + const Variant *old_file_var = old_dict.getptr(project_file); + if (old_file_var) { + Dictionary old_file_dict = old_file_var->operator Dictionary(); + + if (old_file_dict["modified_time"].operator uint64_t() == modified_time) { + // No changes so no need to parse again + new_dict[project_file] = old_file_dict; + continue; + } + } + + ScriptClassParser scp; + Error err = scp.parse_file(project_file); + if (err != OK) { + ERR_PRINTS("Parse error: " + scp.get_error()); + ERR_EXPLAIN("Failed to determine namespace and class for script: " + project_file); + ERR_FAIL_V(err); + } + + Vector<ScriptClassParser::ClassDecl> classes = scp.get_classes(); + + bool found = false; + Dictionary class_dict; + + String search_name = project_file.get_file().get_basename(); + + for (int j = 0; j < classes.size(); j++) { + const ScriptClassParser::ClassDecl &class_decl = classes[j]; + + if (class_decl.base.size() == 0) + continue; // Does not inherit nor implement anything, so it can't be a script class + + String class_cmp; + + if (class_decl.nested) { + class_cmp = class_decl.name.get_slice(".", class_decl.name.get_slice_count(".") - 1); + } else { + class_cmp = class_decl.name; + } + + if (class_cmp != search_name) + continue; + + class_dict["namespace"] = class_decl.namespace_; + class_dict["class_name"] = class_decl.name; + class_dict["nested"] = class_decl.nested; + + found = true; + break; + } + + if (found) { + Dictionary file_dict; + file_dict["modified_time"] = modified_time; + file_dict["class"] = class_dict; + new_dict[project_file] = file_dict; + } + } + + if (new_dict.size()) { + String json = JSON::print(new_dict, "", false); + + Error ferr; + FileAccess *f = FileAccess::open(p_output_path, FileAccess::WRITE, &ferr); + ERR_EXPLAIN("Cannot open file for writing: " + p_output_path); + ERR_FAIL_COND_V(ferr != OK, ferr); + f->store_string(json); + f->flush(); + f->close(); + memdelete(f); + } + + return OK; +} + } // namespace CSharpProject diff --git a/modules/mono/editor/csharp_project.h b/modules/mono/editor/csharp_project.h index d852139de0..aeeeff50f0 100644 --- a/modules/mono/editor/csharp_project.h +++ b/modules/mono/editor/csharp_project.h @@ -40,6 +40,9 @@ String generate_editor_api_project(const String &p_dir, const String &p_core_dll String generate_game_project(const String &p_dir, const String &p_name, const Vector<String> &p_files = Vector<String>()); void add_item(const String &p_project_path, const String &p_item_type, const String &p_include); + +Error generate_scripts_metadata(const String &p_project_path, const String &p_output_path); + } // namespace CSharpProject #endif // CSHARP_PROJECT_H diff --git a/modules/mono/editor/net_solution.cpp b/modules/mono/editor/dotnet_solution.cpp index 8bbd376c9a..ab92e2e378 100644 --- a/modules/mono/editor/net_solution.cpp +++ b/modules/mono/editor/dotnet_solution.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* net_solution.cpp */ +/* dotnet_solution.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,7 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "net_solution.h" +#include "dotnet_solution.h" #include "core/os/dir_access.h" #include "core/os/file_access.h" @@ -52,33 +52,32 @@ #define PROJECT_DECLARATION "Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"%0\", \"%1\", \"{%2}\"\nEndProject" -#define SOLUTION_PLATFORMS_CONFIG "\t\%0|Any CPU = %0|Any CPU" +#define SOLUTION_PLATFORMS_CONFIG "\t%0|Any CPU = %0|Any CPU" #define PROJECT_PLATFORMS_CONFIG \ "\t\t{%0}.%1|Any CPU.ActiveCfg = %1|Any CPU\n" \ "\t\t{%0}.%1|Any CPU.Build.0 = %1|Any CPU" -void NETSolution::add_new_project(const String &p_name, const String &p_guid, const Vector<String> &p_extra_configs) { - if (projects.has(p_name)) - WARN_PRINT("Overriding existing project."); - - ProjectInfo procinfo; - procinfo.guid = p_guid; +void DotNetSolution::add_new_project(const String &p_name, const ProjectInfo &p_project_info) { + projects[p_name] = p_project_info; +} - procinfo.configs.push_back("Debug"); - procinfo.configs.push_back("Release"); +bool DotNetSolution::has_project(const String &p_name) const { + return projects.find(p_name) != NULL; +} - for (int i = 0; i < p_extra_configs.size(); i++) { - procinfo.configs.push_back(p_extra_configs[i]); - } +const DotNetSolution::ProjectInfo &DotNetSolution::get_project_info(const String &p_name) const { + return projects[p_name]; +} - projects[p_name] = procinfo; +bool DotNetSolution::remove_project(const String &p_name) { + return projects.erase(p_name); } -Error NETSolution::save() { +Error DotNetSolution::save() { bool dir_exists = DirAccess::exists(path); ERR_EXPLAIN("The directory does not exist."); - ERR_FAIL_COND_V(!dir_exists, ERR_FILE_BAD_PATH); + ERR_FAIL_COND_V(!dir_exists, ERR_FILE_NOT_FOUND); String projs_decl; String sln_platform_cfg; @@ -86,34 +85,40 @@ Error NETSolution::save() { for (Map<String, ProjectInfo>::Element *E = projects.front(); E; E = E->next()) { const String &name = E->key(); - const ProjectInfo &procinfo = E->value(); + const ProjectInfo &proj_info = E->value(); - projs_decl += sformat(PROJECT_DECLARATION, name, name + ".csproj", procinfo.guid); + bool is_front = E == projects.front(); - for (int i = 0; i < procinfo.configs.size(); i++) { - const String &config = procinfo.configs[i]; + if (!is_front) + projs_decl += "\n"; - if (i != 0) { + projs_decl += sformat(PROJECT_DECLARATION, name, proj_info.relpath.replace("/", "\\"), proj_info.guid); + + for (int i = 0; i < proj_info.configs.size(); i++) { + const String &config = proj_info.configs[i]; + + if (i != 0 || !is_front) { sln_platform_cfg += "\n"; proj_platform_cfg += "\n"; } sln_platform_cfg += sformat(SOLUTION_PLATFORMS_CONFIG, config); - proj_platform_cfg += sformat(PROJECT_PLATFORMS_CONFIG, procinfo.guid, config); + proj_platform_cfg += sformat(PROJECT_PLATFORMS_CONFIG, proj_info.guid, config); } } String content = sformat(SOLUTION_TEMPLATE, projs_decl, sln_platform_cfg, proj_platform_cfg); - FileAccessRef file = FileAccess::open(path_join(path, name + ".sln"), FileAccess::WRITE); - ERR_FAIL_COND_V(!file, ERR_FILE_CANT_WRITE); + FileAccess *file = FileAccess::open(path_join(path, name + ".sln"), FileAccess::WRITE); + ERR_FAIL_NULL_V(file, ERR_FILE_CANT_WRITE); file->store_string(content); file->close(); + memdelete(file); return OK; } -bool NETSolution::set_path(const String &p_existing_path) { +bool DotNetSolution::set_path(const String &p_existing_path) { if (p_existing_path.is_abs_path()) { path = p_existing_path; } else { @@ -126,6 +131,10 @@ bool NETSolution::set_path(const String &p_existing_path) { return true; } -NETSolution::NETSolution(const String &p_name) { +String DotNetSolution::get_path() { + return path; +} + +DotNetSolution::DotNetSolution(const String &p_name) { name = p_name; } diff --git a/modules/mono/editor/net_solution.h b/modules/mono/editor/dotnet_solution.h index bdff24af0b..629605ad18 100644 --- a/modules/mono/editor/net_solution.h +++ b/modules/mono/editor/dotnet_solution.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* net_solution.h */ +/* dotnet_solution.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -34,23 +34,28 @@ #include "core/map.h" #include "core/ustring.h" -struct NETSolution { +struct DotNetSolution { String name; - void add_new_project(const String &p_name, const String &p_guid, const Vector<String> &p_extra_configs = Vector<String>()); + struct ProjectInfo { + String guid; + String relpath; // Must be relative to the solution directory + Vector<String> configs; + }; + + void add_new_project(const String &p_name, const ProjectInfo &p_project_info); + bool has_project(const String &p_name) const; + const ProjectInfo &get_project_info(const String &p_name) const; + bool remove_project(const String &p_name); Error save(); bool set_path(const String &p_existing_path); + String get_path(); - NETSolution(const String &p_name); + DotNetSolution(const String &p_name); private: - struct ProjectInfo { - String guid; - Vector<String> configs; - }; - String path; Map<String, ProjectInfo> projects; }; diff --git a/modules/mono/editor/godotsharp_builds.cpp b/modules/mono/editor/godotsharp_builds.cpp index d397814fa7..0f12fc5243 100644 --- a/modules/mono/editor/godotsharp_builds.cpp +++ b/modules/mono/editor/godotsharp_builds.cpp @@ -39,6 +39,7 @@ #include "../mono_gd/gd_mono_marshal.h" #include "../utils/path_utils.h" #include "bindings_generator.h" +#include "csharp_project.h" #include "godotsharp_editor.h" #define PROP_NAME_MSBUILD_MONO "MSBuild (Mono)" @@ -226,20 +227,24 @@ void GodotSharpBuilds::show_build_error_dialog(const String &p_message) { MonoBottomPanel::get_singleton()->show_build_tab(); } -bool GodotSharpBuilds::build_api_sln(const String &p_name, const String &p_api_sln_dir, const String &p_config) { +bool GodotSharpBuilds::build_api_sln(const String &p_api_sln_dir, const String &p_config) { - String api_sln_file = p_api_sln_dir.plus_file(p_name + ".sln"); - String api_assembly_dir = p_api_sln_dir.plus_file("bin").plus_file(p_config); - String api_assembly_file = api_assembly_dir.plus_file(p_name + ".dll"); + String api_sln_file = p_api_sln_dir.plus_file(API_SOLUTION_NAME ".sln"); - if (!FileAccess::exists(api_assembly_file)) { + String core_api_assembly_dir = p_api_sln_dir.plus_file(CORE_API_ASSEMBLY_NAME).plus_file("bin").plus_file(p_config); + String core_api_assembly_file = core_api_assembly_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); + + String editor_api_assembly_dir = p_api_sln_dir.plus_file(EDITOR_API_ASSEMBLY_NAME).plus_file("bin").plus_file(p_config); + String editor_api_assembly_file = editor_api_assembly_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); + + if (!FileAccess::exists(core_api_assembly_file) || !FileAccess::exists(editor_api_assembly_file)) { MonoBuildInfo api_build_info(api_sln_file, p_config); // TODO Replace this global NoWarn with '#pragma warning' directives on generated files, // once we start to actively document manually maintained C# classes api_build_info.custom_props.push_back("NoWarn=1591"); // Ignore missing documentation warnings if (!GodotSharpBuilds::get_singleton()->build(api_build_info)) { - show_build_error_dialog("Failed to build " + p_name + " solution."); + show_build_error_dialog("Failed to build " API_SOLUTION_NAME " solution."); return false; } } @@ -249,6 +254,18 @@ bool GodotSharpBuilds::build_api_sln(const String &p_name, const String &p_api_s bool GodotSharpBuilds::copy_api_assembly(const String &p_src_dir, const String &p_dst_dir, const String &p_assembly_name, APIAssembly::Type p_api_type) { + // Create destination directory if needed + if (!DirAccess::exists(p_dst_dir)) { + DirAccess *da = DirAccess::create_for_path(p_dst_dir); + Error err = da->make_dir_recursive(p_dst_dir); + memdelete(da); + + if (err != OK) { + show_build_error_dialog("Failed to create destination directory for the API assemblies. Error: " + itos(err)); + return false; + } + } + String assembly_file = p_assembly_name + ".dll"; String assembly_src = p_src_dir.plus_file(assembly_file); String assembly_dst = p_dst_dir.plus_file(assembly_file); @@ -256,7 +273,7 @@ bool GodotSharpBuilds::copy_api_assembly(const String &p_src_dir, const String & if (!FileAccess::exists(assembly_dst) || FileAccess::get_modified_time(assembly_src) > FileAccess::get_modified_time(assembly_dst) || GDMono::get_singleton()->metadata_is_api_assembly_invalidated(p_api_type)) { - DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); String xml_file = p_assembly_name + ".xml"; if (da->copy(p_src_dir.plus_file(xml_file), p_dst_dir.plus_file(xml_file)) != OK) @@ -268,8 +285,6 @@ bool GodotSharpBuilds::copy_api_assembly(const String &p_src_dir, const String & Error err = da->copy(assembly_src, assembly_dst); - memdelete(da); - if (err != OK) { show_build_error_dialog("Failed to copy " + assembly_file); return false; @@ -291,79 +306,53 @@ String GodotSharpBuilds::_api_folder_name(APIAssembly::Type p_api_type) { "_" + String::num_uint64(CS_GLUE_VERSION); } -bool GodotSharpBuilds::make_api_sln(APIAssembly::Type p_api_type) { +bool GodotSharpBuilds::make_api_assembly(APIAssembly::Type p_api_type) { - String api_name = p_api_type == APIAssembly::API_CORE ? API_ASSEMBLY_NAME : EDITOR_API_ASSEMBLY_NAME; - String api_build_config = "Release"; + String api_name = p_api_type == APIAssembly::API_CORE ? CORE_API_ASSEMBLY_NAME : EDITOR_API_ASSEMBLY_NAME; - EditorProgress pr("mono_build_release_" + api_name, "Building " + api_name + " solution...", 4); + String editor_prebuilt_api_dir = GodotSharpDirs::get_data_editor_prebuilt_api_dir(); + String res_assemblies_dir = GodotSharpDirs::get_res_assemblies_dir(); - pr.step("Generating " + api_name + " solution"); + if (FileAccess::exists(editor_prebuilt_api_dir.plus_file(api_name + ".dll"))) { + EditorProgress pr("mono_copy_prebuilt_api_assembly", "Copying prebuilt " + api_name + " assembly...", 1); + pr.step("Copying " + api_name + " assembly", 0); + return GodotSharpBuilds::copy_api_assembly(editor_prebuilt_api_dir, res_assemblies_dir, api_name, p_api_type); + } - String core_api_sln_dir = GodotSharpDirs::get_mono_solutions_dir() - .plus_file(_api_folder_name(APIAssembly::API_CORE)) - .plus_file(API_ASSEMBLY_NAME); - String editor_api_sln_dir = GodotSharpDirs::get_mono_solutions_dir() - .plus_file(_api_folder_name(APIAssembly::API_EDITOR)) - .plus_file(EDITOR_API_ASSEMBLY_NAME); + String api_build_config = "Release"; - String api_sln_dir = p_api_type == APIAssembly::API_CORE ? core_api_sln_dir : editor_api_sln_dir; - String api_sln_file = api_sln_dir.plus_file(api_name + ".sln"); + EditorProgress pr("mono_build_release_" API_SOLUTION_NAME, "Building " API_SOLUTION_NAME " solution...", 3); - if (!DirAccess::exists(api_sln_dir) || !FileAccess::exists(api_sln_file)) { - String core_api_assembly; + pr.step("Generating " API_SOLUTION_NAME " solution", 0); - if (p_api_type == APIAssembly::API_EDITOR) { - core_api_assembly = core_api_sln_dir.plus_file("bin") - .plus_file(api_build_config) - .plus_file(API_ASSEMBLY_NAME ".dll"); - } + String api_sln_dir = GodotSharpDirs::get_mono_solutions_dir() + .plus_file(_api_folder_name(APIAssembly::API_CORE)); -#ifndef DEBUG_METHODS_ENABLED -#error "How am I supposed to generate the bindings?" -#endif + String api_sln_file = api_sln_dir.plus_file(API_SOLUTION_NAME ".sln"); + if (!DirAccess::exists(api_sln_dir) || !FileAccess::exists(api_sln_file)) { BindingsGenerator *gen = BindingsGenerator::get_singleton(); bool gen_verbose = OS::get_singleton()->is_stdout_verbose(); - Error err = p_api_type == APIAssembly::API_CORE ? - gen->generate_cs_core_project(api_sln_dir, gen_verbose) : - gen->generate_cs_editor_project(api_sln_dir, core_api_assembly, gen_verbose); - + Error err = gen->generate_cs_api(api_sln_dir, gen_verbose); if (err != OK) { - show_build_error_dialog("Failed to generate " + api_name + " solution. Error: " + itos(err)); + show_build_error_dialog("Failed to generate " API_SOLUTION_NAME " solution. Error: " + itos(err)); return false; } } - pr.step("Building " + api_name + " solution"); + pr.step("Building " API_SOLUTION_NAME " solution", 1); - if (!GodotSharpBuilds::build_api_sln(api_name, api_sln_dir, api_build_config)) + if (!GodotSharpBuilds::build_api_sln(api_sln_dir, api_build_config)) return false; - pr.step("Copying " + api_name + " assembly"); - - String res_assemblies_dir = GodotSharpDirs::get_res_assemblies_dir(); - - // Create assemblies directory if needed - if (!DirAccess::exists(res_assemblies_dir)) { - DirAccess *da = DirAccess::create_for_path(res_assemblies_dir); - Error err = da->make_dir_recursive(res_assemblies_dir); - memdelete(da); - - if (err != OK) { - show_build_error_dialog("Failed to create assemblies directory. Error: " + itos(err)); - return false; - } - } + pr.step("Copying " + api_name + " assembly", 2); // Copy the built assembly to the assemblies directory - String api_assembly_dir = api_sln_dir.plus_file("bin").plus_file(api_build_config); + String api_assembly_dir = api_sln_dir.plus_file(api_name).plus_file("bin").plus_file(api_build_config); if (!GodotSharpBuilds::copy_api_assembly(api_assembly_dir, res_assemblies_dir, api_name, p_api_type)) return false; - pr.step("Done"); - return true; } @@ -372,15 +361,14 @@ bool GodotSharpBuilds::build_project_blocking(const String &p_config) { if (!FileAccess::exists(GodotSharpDirs::get_project_sln_path())) return true; // No solution to build - if (!GodotSharpBuilds::make_api_sln(APIAssembly::API_CORE)) + if (!GodotSharpBuilds::make_api_assembly(APIAssembly::API_CORE)) return false; - if (!GodotSharpBuilds::make_api_sln(APIAssembly::API_EDITOR)) + if (!GodotSharpBuilds::make_api_assembly(APIAssembly::API_EDITOR)) return false; - EditorProgress pr("mono_project_debug_build", "Building project solution...", 2); - - pr.step("Building project solution"); + EditorProgress pr("mono_project_debug_build", "Building project solution...", 1); + pr.step("Building project solution", 0); MonoBuildInfo build_info(GodotSharpDirs::get_project_sln_path(), p_config); if (!GodotSharpBuilds::get_singleton()->build(build_info)) { @@ -388,13 +376,25 @@ bool GodotSharpBuilds::build_project_blocking(const String &p_config) { return false; } - pr.step("Done"); - return true; } bool GodotSharpBuilds::editor_build_callback() { + String scripts_metadata_path_editor = GodotSharpDirs::get_res_metadata_dir().plus_file("scripts_metadata.editor"); + String scripts_metadata_path_player = GodotSharpDirs::get_res_metadata_dir().plus_file("scripts_metadata.editor_player"); + + Error metadata_err = CSharpProject::generate_scripts_metadata(GodotSharpDirs::get_project_csproj_path(), scripts_metadata_path_editor); + ERR_FAIL_COND_V(metadata_err != OK, false); + + if (FileAccess::exists(scripts_metadata_path_editor)) { + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES); + Error copy_err = da->copy(scripts_metadata_path_editor, scripts_metadata_path_player); + + ERR_EXPLAIN("Failed to copy scripts metadata file"); + ERR_FAIL_COND_V(copy_err != OK, false); + } + return build_project_blocking("Tools"); } diff --git a/modules/mono/editor/godotsharp_builds.h b/modules/mono/editor/godotsharp_builds.h index c6dc6b6236..7f38b0aa49 100644 --- a/modules/mono/editor/godotsharp_builds.h +++ b/modules/mono/editor/godotsharp_builds.h @@ -84,10 +84,10 @@ public: bool build(const MonoBuildInfo &p_build_info); bool build_async(const MonoBuildInfo &p_build_info, GodotSharpBuild_ExitCallback p_callback = NULL); - static bool build_api_sln(const String &p_name, const String &p_api_sln_dir, const String &p_config); + static bool build_api_sln(const String &p_api_sln_dir, const String &p_config); static bool copy_api_assembly(const String &p_src_dir, const String &p_dst_dir, const String &p_assembly_name, APIAssembly::Type p_api_type); - static bool make_api_sln(APIAssembly::Type p_api_type); + static bool make_api_assembly(APIAssembly::Type p_api_type); static bool build_project_blocking(const String &p_config); diff --git a/modules/mono/editor/godotsharp_editor.cpp b/modules/mono/editor/godotsharp_editor.cpp index 3ee38515bf..cce86efbf5 100644 --- a/modules/mono/editor/godotsharp_editor.cpp +++ b/modules/mono/editor/godotsharp_editor.cpp @@ -42,8 +42,8 @@ #include "../utils/path_utils.h" #include "bindings_generator.h" #include "csharp_project.h" +#include "dotnet_solution.h" #include "godotsharp_export.h" -#include "net_solution.h" #ifdef OSX_ENABLED #include "../utils/osx_utils.h" @@ -71,17 +71,21 @@ bool GodotSharpEditor::_create_project_solution() { if (guid.length()) { - NETSolution solution(name); + DotNetSolution solution(name); if (!solution.set_path(path)) { show_error_dialog(TTR("Failed to create solution.")); return false; } - Vector<String> extra_configs; - extra_configs.push_back("Tools"); + DotNetSolution::ProjectInfo proj_info; + proj_info.guid = guid; + proj_info.relpath = name + ".csproj"; + proj_info.configs.push_back("Debug"); + proj_info.configs.push_back("Release"); + proj_info.configs.push_back("Tools"); - solution.add_new_project(name, guid, extra_configs); + solution.add_new_project(name, proj_info); Error sln_error = solution.save(); @@ -90,10 +94,10 @@ bool GodotSharpEditor::_create_project_solution() { return false; } - if (!GodotSharpBuilds::make_api_sln(APIAssembly::API_CORE)) + if (!GodotSharpBuilds::make_api_assembly(APIAssembly::API_CORE)) return false; - if (!GodotSharpBuilds::make_api_sln(APIAssembly::API_EDITOR)) + if (!GodotSharpBuilds::make_api_assembly(APIAssembly::API_EDITOR)) return false; pr.step(TTR("Done")); @@ -108,6 +112,33 @@ bool GodotSharpEditor::_create_project_solution() { return true; } +void GodotSharpEditor::_make_api_solutions_if_needed() { + // I'm sick entirely of ProgressDialog + static bool recursion_guard = false; + if (!recursion_guard) { + recursion_guard = true; + _make_api_solutions_if_needed_impl(); + recursion_guard = false; + } +} + +void GodotSharpEditor::_make_api_solutions_if_needed_impl() { + // If the project has a solution and C# project make sure the API assemblies are present and up to date + String res_assemblies_dir = GodotSharpDirs::get_res_assemblies_dir(); + + if (!FileAccess::exists(res_assemblies_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll")) || + GDMono::get_singleton()->metadata_is_api_assembly_invalidated(APIAssembly::API_CORE)) { + if (!GodotSharpBuilds::make_api_assembly(APIAssembly::API_CORE)) + return; + } + + if (!FileAccess::exists(res_assemblies_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll")) || + GDMono::get_singleton()->metadata_is_api_assembly_invalidated(APIAssembly::API_EDITOR)) { + if (!GodotSharpBuilds::make_api_assembly(APIAssembly::API_EDITOR)) + return; // Redundant? I don't think so + } +} + void GodotSharpEditor::_remove_create_sln_menu_option() { menu_popup->remove_item(menu_popup->get_item_index(MENU_CREATE_SLN)); @@ -169,6 +200,7 @@ void GodotSharpEditor::_notification(int p_notification) { void GodotSharpEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_create_project_solution"), &GodotSharpEditor::_create_project_solution); + ClassDB::bind_method(D_METHOD("_make_api_solutions_if_needed"), &GodotSharpEditor::_make_api_solutions_if_needed); ClassDB::bind_method(D_METHOD("_remove_create_sln_menu_option"), &GodotSharpEditor::_remove_create_sln_menu_option); ClassDB::bind_method(D_METHOD("_toggle_about_dialog_on_start"), &GodotSharpEditor::_toggle_about_dialog_on_start); ClassDB::bind_method(D_METHOD("_menu_option_pressed", "id"), &GodotSharpEditor::_menu_option_pressed); @@ -197,6 +229,7 @@ void GodotSharpEditor::register_internal_calls() { mono_add_internal_call("GodotSharpTools.Utils.OS::GetPlatformName", (void *)godot_icall_Utils_OS_GetPlatformName); GodotSharpBuilds::register_internal_calls(); + GodotSharpExport::register_internal_calls(); } void GodotSharpEditor::show_error_dialog(const String &p_message, const String &p_title) { @@ -389,7 +422,10 @@ GodotSharpEditor::GodotSharpEditor(EditorNode *p_editor) { String sln_path = GodotSharpDirs::get_project_sln_path(); String csproj_path = GodotSharpDirs::get_project_csproj_path(); - if (!FileAccess::exists(sln_path) || !FileAccess::exists(csproj_path)) { + if (FileAccess::exists(sln_path) && FileAccess::exists(csproj_path)) { + // We can't use EditorProgress here. It calls Main::iterarion() and the main loop is not initialized yet. + call_deferred("_make_api_solutions_if_needed"); + } else { bottom_panel_btn->hide(); menu_popup->add_item(TTR("Create C# solution"), MENU_CREATE_SLN); } @@ -439,7 +475,9 @@ MonoReloadNode *MonoReloadNode::singleton = NULL; void MonoReloadNode::_reload_timer_timeout() { - CSharpLanguage::get_singleton()->reload_assemblies_if_needed(false); + if (CSharpLanguage::get_singleton()->is_assembly_reloading_needed()) { + CSharpLanguage::get_singleton()->reload_assemblies(false); + } } void MonoReloadNode::restart_reload_timer() { @@ -457,7 +495,9 @@ void MonoReloadNode::_notification(int p_what) { switch (p_what) { case MainLoop::NOTIFICATION_WM_FOCUS_IN: { restart_reload_timer(); - CSharpLanguage::get_singleton()->reload_assemblies_if_needed(true); + if (CSharpLanguage::get_singleton()->is_assembly_reloading_needed()) { + CSharpLanguage::get_singleton()->reload_assemblies(false); + } } break; default: { } break; diff --git a/modules/mono/editor/godotsharp_editor.h b/modules/mono/editor/godotsharp_editor.h index 46b6bd5ebf..9fb0e40132 100644 --- a/modules/mono/editor/godotsharp_editor.h +++ b/modules/mono/editor/godotsharp_editor.h @@ -56,6 +56,8 @@ class GodotSharpEditor : public Node { #endif bool _create_project_solution(); + void _make_api_solutions_if_needed(); + void _make_api_solutions_if_needed_impl(); void _remove_create_sln_menu_option(); void _show_about_dialog(); diff --git a/modules/mono/editor/godotsharp_export.cpp b/modules/mono/editor/godotsharp_export.cpp index cd09e6516a..34c710320a 100644 --- a/modules/mono/editor/godotsharp_export.cpp +++ b/modules/mono/editor/godotsharp_export.cpp @@ -30,12 +30,38 @@ #include "godotsharp_export.h" +#include "core/version.h" + #include "../csharp_script.h" #include "../godotsharp_defs.h" #include "../godotsharp_dirs.h" +#include "../mono_gd/gd_mono_class.h" +#include "../mono_gd/gd_mono_marshal.h" +#include "csharp_project.h" #include "godotsharp_builds.h" -void GodotSharpExport::_export_file(const String &p_path, const String &p_type, const Set<String> &p_features) { +static MonoString *godot_icall_GodotSharpExport_GetTemplatesDir() { + String current_version = VERSION_FULL_CONFIG; + String templates_dir = EditorSettings::get_singleton()->get_templates_dir().plus_file(current_version); + return GDMonoMarshal::mono_string_from_godot(ProjectSettings::get_singleton()->globalize_path(templates_dir)); +} + +static MonoString *godot_icall_GodotSharpExport_GetDataDirName() { + String appname = ProjectSettings::get_singleton()->get("application/config/name"); + String appname_safe = OS::get_singleton()->get_safe_dir_name(appname); + return GDMonoMarshal::mono_string_from_godot("data_" + appname_safe); +} + +void GodotSharpExport::register_internal_calls() { + static bool registered = false; + ERR_FAIL_COND(registered); + registered = true; + + mono_add_internal_call("GodotSharpTools.Editor.GodotSharpExport::GetTemplatesDir", (void *)godot_icall_GodotSharpExport_GetTemplatesDir); + mono_add_internal_call("GodotSharpTools.Editor.GodotSharpExport::GetDataDirName", (void *)godot_icall_GodotSharpExport_GetDataDirName); +} + +void GodotSharpExport::_export_file(const String &p_path, const String &p_type, const Set<String> &) { if (p_type != CSharpLanguage::get_singleton()->get_type()) return; @@ -56,62 +82,87 @@ void GodotSharpExport::_export_begin(const Set<String> &p_features, bool p_debug // TODO right now there is no way to stop the export process with an error ERR_FAIL_COND(!GDMono::get_singleton()->is_runtime_initialized()); - ERR_FAIL_NULL(GDMono::get_singleton()->get_tools_domain()); + ERR_FAIL_NULL(TOOLS_DOMAIN); + ERR_FAIL_NULL(GDMono::get_singleton()->get_editor_tools_assembly()); String build_config = p_debug ? "Debug" : "Release"; - ERR_FAIL_COND(!GodotSharpBuilds::build_project_blocking(build_config)); + String scripts_metadata_path = GodotSharpDirs::get_res_metadata_dir().plus_file("scripts_metadata." + String(p_debug ? "debug" : "release")); + Error metadata_err = CSharpProject::generate_scripts_metadata(GodotSharpDirs::get_project_csproj_path(), scripts_metadata_path); + ERR_FAIL_COND(metadata_err != OK); - // Add API assemblies + ERR_FAIL_COND(!_add_file(scripts_metadata_path, scripts_metadata_path)); - String core_api_dll_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(API_ASSEMBLY_NAME ".dll"); - ERR_FAIL_COND(!_add_assembly(core_api_dll_path, core_api_dll_path)); + ERR_FAIL_COND(!GodotSharpBuilds::build_project_blocking(build_config)); - String editor_api_dll_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); - ERR_FAIL_COND(!_add_assembly(editor_api_dll_path, editor_api_dll_path)); + // Add dependency assemblies - // Add project assembly + Map<String, String> dependencies; String project_dll_name = ProjectSettings::get_singleton()->get("application/config/name"); if (project_dll_name.empty()) { project_dll_name = "UnnamedProject"; } - String project_dll_src_path = GodotSharpDirs::get_res_temp_assemblies_base_dir().plus_file(build_config).plus_file(project_dll_name + ".dll"); - String project_dll_dst_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(project_dll_name + ".dll"); - ERR_FAIL_COND(!_add_assembly(project_dll_src_path, project_dll_dst_path)); + String project_dll_src_dir = GodotSharpDirs::get_res_temp_assemblies_base_dir().plus_file(build_config); + String project_dll_src_path = project_dll_src_dir.plus_file(project_dll_name + ".dll"); + dependencies.insert(project_dll_name, project_dll_src_path); - // Add dependencies + { + MonoDomain *export_domain = GDMonoUtils::create_domain("GodotEngine.ProjectExportDomain"); + ERR_FAIL_NULL(export_domain); + _GDMONO_SCOPE_EXIT_DOMAIN_UNLOAD_(export_domain); - MonoDomain *prev_domain = mono_domain_get(); - MonoDomain *export_domain = GDMonoUtils::create_domain("GodotEngine.ProjectExportDomain"); + _GDMONO_SCOPE_DOMAIN_(export_domain); - ERR_FAIL_COND(!export_domain); - ERR_FAIL_COND(!mono_domain_set(export_domain, false)); + GDMonoAssembly *scripts_assembly = NULL; + bool load_success = GDMono::get_singleton()->load_assembly_from(project_dll_name, + project_dll_src_path, &scripts_assembly, /* refonly: */ true); - Map<String, String> dependencies; - dependencies.insert("mscorlib", GDMono::get_singleton()->get_corlib_assembly()->get_path()); + ERR_EXPLAIN("Cannot load refonly assembly: " + project_dll_name); + ERR_FAIL_COND(!load_success); - GDMonoAssembly *scripts_assembly = GDMonoAssembly::load_from(project_dll_name, project_dll_src_path, /* refonly: */ true); + Vector<String> search_dirs; + GDMonoAssembly::fill_search_dirs(search_dirs); + Error depend_error = _get_assembly_dependencies(scripts_assembly, search_dirs, dependencies); + ERR_FAIL_COND(depend_error != OK); + } + + for (Map<String, String>::Element *E = dependencies.front(); E; E = E->next()) { + String depend_src_path = E->value(); + String depend_dst_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(depend_src_path.get_file()); + ERR_FAIL_COND(!_add_file(depend_src_path, depend_dst_path)); + } - ERR_EXPLAIN("Cannot load refonly assembly: " + project_dll_name); - ERR_FAIL_COND(!scripts_assembly); + // Mono specific export template extras (data dir) - Error depend_error = _get_assembly_dependencies(scripts_assembly, dependencies); + GDMonoClass *export_class = GDMono::get_singleton()->get_editor_tools_assembly()->get_class("GodotSharpTools.Editor", "GodotSharpExport"); + ERR_FAIL_NULL(export_class); + GDMonoMethod *export_begin_method = export_class->get_method("_ExportBegin", 4); + ERR_FAIL_NULL(export_begin_method); - GDMono::get_singleton()->finalize_and_unload_domain(export_domain); - mono_domain_set(prev_domain, false); + MonoArray *features = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(String), p_features.size()); + int i = 0; + for (const Set<String>::Element *E = p_features.front(); E; E = E->next()) { + MonoString *boxed = GDMonoMarshal::mono_string_from_godot(E->get()); + mono_array_set(features, MonoString *, i, boxed); + i++; + } - ERR_FAIL_COND(depend_error != OK); + MonoBoolean debug = p_debug; + MonoString *path = GDMonoMarshal::mono_string_from_godot(p_path); + uint32_t flags = p_flags; + void *args[4] = { features, &debug, path, &flags }; + MonoException *exc = NULL; + export_begin_method->invoke_raw(NULL, args, &exc); - for (Map<String, String>::Element *E = dependencies.front(); E; E = E->next()) { - String depend_src_path = E->value(); - String depend_dst_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(depend_src_path.get_file()); - ERR_FAIL_COND(!_add_assembly(depend_src_path, depend_dst_path)); + if (exc) { + GDMonoUtils::debug_print_unhandled_exception(exc); + ERR_FAIL(); } } -bool GodotSharpExport::_add_assembly(const String &p_src_path, const String &p_dst_path) { +bool GodotSharpExport::_add_file(const String &p_src_path, const String &p_dst_path, bool p_remap) { FileAccessRef f = FileAccess::open(p_src_path, FileAccess::READ); ERR_FAIL_COND_V(!f, false); @@ -120,12 +171,12 @@ bool GodotSharpExport::_add_assembly(const String &p_src_path, const String &p_d data.resize(f->get_len()); f->get_buffer(data.ptrw(), data.size()); - add_file(p_dst_path, data, false); + add_file(p_dst_path, data, p_remap); return true; } -Error GodotSharpExport::_get_assembly_dependencies(GDMonoAssembly *p_assembly, Map<String, String> &r_dependencies) { +Error GodotSharpExport::_get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String> &p_search_dirs, Map<String, String> &r_dependencies) { MonoImage *image = p_assembly->get_image(); @@ -134,18 +185,48 @@ Error GodotSharpExport::_get_assembly_dependencies(GDMonoAssembly *p_assembly, M mono_assembly_get_assemblyref(image, i, ref_aname); String ref_name = mono_assembly_name_get_name(ref_aname); - if (ref_name == "mscorlib" || r_dependencies.find(ref_name)) + if (r_dependencies.find(ref_name)) continue; GDMonoAssembly *ref_assembly = NULL; - if (!GDMono::get_singleton()->load_assembly(ref_name, ref_aname, &ref_assembly, /* refonly: */ true)) { - ERR_EXPLAIN("Cannot load refonly assembly: " + ref_name); + String path; + bool has_extension = ref_name.ends_with(".dll") || ref_name.ends_with(".exe"); + + for (int i = 0; i < p_search_dirs.size(); i++) { + const String &search_dir = p_search_dirs[i]; + + if (has_extension) { + path = search_dir.plus_file(ref_name); + if (FileAccess::exists(path)) { + GDMono::get_singleton()->load_assembly_from(ref_name.get_basename(), path, &ref_assembly, true); + if (ref_assembly != NULL) + break; + } + } else { + path = search_dir.plus_file(ref_name + ".dll"); + if (FileAccess::exists(path)) { + GDMono::get_singleton()->load_assembly_from(ref_name, path, &ref_assembly, true); + if (ref_assembly != NULL) + break; + } + + path = search_dir.plus_file(ref_name + ".exe"); + if (FileAccess::exists(path)) { + GDMono::get_singleton()->load_assembly_from(ref_name, path, &ref_assembly, true); + if (ref_assembly != NULL) + break; + } + } + } + + if (!ref_assembly) { + ERR_EXPLAIN("Cannot load assembly (refonly): " + ref_name); ERR_FAIL_V(ERR_CANT_RESOLVE); } r_dependencies.insert(ref_name, ref_assembly->get_path()); - Error err = _get_assembly_dependencies(ref_assembly, r_dependencies); + Error err = _get_assembly_dependencies(ref_assembly, p_search_dirs, r_dependencies); if (err != OK) return err; } diff --git a/modules/mono/editor/godotsharp_export.h b/modules/mono/editor/godotsharp_export.h index b38db9660c..10d4375567 100644 --- a/modules/mono/editor/godotsharp_export.h +++ b/modules/mono/editor/godotsharp_export.h @@ -41,15 +41,17 @@ class GodotSharpExport : public EditorExportPlugin { MonoAssemblyName *aname_prealloc; - bool _add_assembly(const String &p_src_path, const String &p_dst_path); + bool _add_file(const String &p_src_path, const String &p_dst_path, bool p_remap = false); - Error _get_assembly_dependencies(GDMonoAssembly *p_assembly, Map<String, String> &r_dependencies); + Error _get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String> &p_search_dirs, Map<String, String> &r_dependencies); protected: virtual void _export_file(const String &p_path, const String &p_type, const Set<String> &p_features); virtual void _export_begin(const Set<String> &p_features, bool p_debug, const String &p_path, int p_flags); public: + static void register_internal_calls(); + GodotSharpExport(); ~GodotSharpExport(); }; diff --git a/modules/mono/editor/mono_bottom_panel.cpp b/modules/mono/editor/mono_bottom_panel.cpp index ecc3e4c59e..e89d21d92d 100644 --- a/modules/mono/editor/mono_bottom_panel.cpp +++ b/modules/mono/editor/mono_bottom_panel.cpp @@ -31,6 +31,8 @@ #include "mono_bottom_panel.h" #include "../csharp_script.h" +#include "../godotsharp_dirs.h" +#include "csharp_project.h" #include "godotsharp_editor.h" MonoBottomPanel *MonoBottomPanel::singleton = NULL; @@ -63,7 +65,7 @@ void MonoBottomPanel::_update_build_tabs_list() { item_tooltip += "Running"; } - if (!tab->build_exited || !tab->build_result == MonoBuildTab::RESULT_SUCCESS) { + if (!tab->build_exited || tab->build_result == MonoBuildTab::RESULT_ERROR) { item_tooltip += "\nErrors: " + itos(tab->error_count); } @@ -148,10 +150,18 @@ void MonoBottomPanel::_errors_toggled(bool p_pressed) { void MonoBottomPanel::_build_project_pressed() { - GodotSharpBuilds::get_singleton()->build_project_blocking("Tools"); + String scripts_metadata_path = GodotSharpDirs::get_res_metadata_dir().plus_file("scripts_metadata.editor"); + Error metadata_err = CSharpProject::generate_scripts_metadata(GodotSharpDirs::get_project_csproj_path(), scripts_metadata_path); + ERR_FAIL_COND(metadata_err != OK); - MonoReloadNode::get_singleton()->restart_reload_timer(); - CSharpLanguage::get_singleton()->reload_assemblies_if_needed(true); + bool build_success = GodotSharpBuilds::get_singleton()->build_project_blocking("Tools"); + + if (build_success) { + MonoReloadNode::get_singleton()->restart_reload_timer(); + if (CSharpLanguage::get_singleton()->is_assembly_reloading_needed()) { + CSharpLanguage::get_singleton()->reload_assemblies(false); + } + } } void MonoBottomPanel::_view_log_pressed() { @@ -475,14 +485,14 @@ void MonoBuildTab::_bind_methods() { } MonoBuildTab::MonoBuildTab(const MonoBuildInfo &p_build_info, const String &p_logs_dir) : - build_info(p_build_info), - logs_dir(p_logs_dir), build_exited(false), issues_list(memnew(ItemList)), error_count(0), warning_count(0), errors_visible(true), - warnings_visible(true) { + warnings_visible(true), + logs_dir(p_logs_dir), + build_info(p_build_info) { issues_list->set_v_size_flags(SIZE_EXPAND_FILL); issues_list->connect("item_activated", this, "_issue_activated"); add_child(issues_list); diff --git a/modules/mono/editor/script_class_parser.cpp b/modules/mono/editor/script_class_parser.cpp new file mode 100644 index 0000000000..9042bff74a --- /dev/null +++ b/modules/mono/editor/script_class_parser.cpp @@ -0,0 +1,635 @@ +#include "script_class_parser.h" + +#include "core/map.h" +#include "core/os/os.h" + +#include "../utils/string_utils.h" + +const char *ScriptClassParser::token_names[ScriptClassParser::TK_MAX] = { + "[", + "]", + "{", + "}", + ".", + ":", + ",", + "Symbol", + "Identifier", + "String", + "Number", + "<", + ">", + "EOF", + "Error" +}; + +String ScriptClassParser::get_token_name(ScriptClassParser::Token p_token) { + + ERR_FAIL_INDEX_V(p_token, TK_MAX, "<error>"); + return token_names[p_token]; +} + +ScriptClassParser::Token ScriptClassParser::get_token() { + + while (true) { + switch (code[idx]) { + case '\n': { + line++; + idx++; + break; + }; + case 0: { + return TK_EOF; + } break; + case '{': { + idx++; + return TK_CURLY_BRACKET_OPEN; + }; + case '}': { + idx++; + return TK_CURLY_BRACKET_CLOSE; + }; + case '[': { + idx++; + return TK_BRACKET_OPEN; + }; + case ']': { + idx++; + return TK_BRACKET_CLOSE; + }; + case '<': { + idx++; + return TK_OP_LESS; + }; + case '>': { + idx++; + return TK_OP_GREATER; + }; + case ':': { + idx++; + return TK_COLON; + }; + case ',': { + idx++; + return TK_COMMA; + }; + case '.': { + idx++; + return TK_PERIOD; + }; + case '#': { + //compiler directive + while (code[idx] != '\n' && code[idx] != 0) { + idx++; + } + continue; + } break; + case '/': { + switch (code[idx + 1]) { + case '*': { // block comment + idx += 2; + while (true) { + if (code[idx] == 0) { + error_str = "Unterminated comment"; + error = true; + return TK_ERROR; + } else if (code[idx] == '*' && code[idx + 1] == '/') { + idx += 2; + break; + } else if (code[idx] == '\n') { + line++; + } + + idx++; + } + + } break; + case '/': { // line comment skip + while (code[idx] != '\n' && code[idx] != 0) { + idx++; + } + + } break; + default: { + value = "/"; + idx++; + return TK_SYMBOL; + } + } + + continue; // a comment + } break; + case '\'': + case '"': { + bool verbatim = idx != 0 && code[idx - 1] == '@'; + + CharType begin_str = code[idx]; + idx++; + String tk_string = String(); + while (true) { + if (code[idx] == 0) { + error_str = "Unterminated String"; + error = true; + return TK_ERROR; + } else if (code[idx] == begin_str) { + if (verbatim && code[idx + 1] == '"') { // `""` is verbatim string's `\"` + idx += 2; // skip next `"` as well + continue; + } + + idx += 1; + break; + } else if (code[idx] == '\\' && !verbatim) { + //escaped characters... + idx++; + CharType next = code[idx]; + if (next == 0) { + error_str = "Unterminated String"; + error = true; + return TK_ERROR; + } + CharType res = 0; + + switch (next) { + case 'b': res = 8; break; + case 't': res = 9; break; + case 'n': res = 10; break; + case 'f': res = 12; break; + case 'r': + res = 13; + break; + case '\"': res = '\"'; break; + case '\\': + res = '\\'; + break; + default: { + res = next; + } break; + } + + tk_string += res; + + } else { + if (code[idx] == '\n') + line++; + tk_string += code[idx]; + } + idx++; + } + + value = tk_string; + + return TK_STRING; + } break; + default: { + if (code[idx] <= 32) { + idx++; + break; + } + + if ((code[idx] >= 33 && code[idx] <= 47) || (code[idx] >= 58 && code[idx] <= 63) || (code[idx] >= 91 && code[idx] <= 94) || code[idx] == 96 || (code[idx] >= 123 && code[idx] <= 127)) { + value = String::chr(code[idx]); + idx++; + return TK_SYMBOL; + } + + if (code[idx] == '-' || (code[idx] >= '0' && code[idx] <= '9')) { + //a number + const CharType *rptr; + double number = String::to_double(&code[idx], &rptr); + idx += (rptr - &code[idx]); + value = number; + return TK_NUMBER; + + } else if ((code[idx] == '@' && code[idx + 1] != '"') || code[idx] == '_' || (code[idx] >= 'A' && code[idx] <= 'Z') || (code[idx] >= 'a' && code[idx] <= 'z') || code[idx] > 127) { + String id; + + id += code[idx]; + idx++; + + while (code[idx] == '_' || (code[idx] >= 'A' && code[idx] <= 'Z') || (code[idx] >= 'a' && code[idx] <= 'z') || (code[idx] >= '0' && code[idx] <= '9') || code[idx] > 127) { + id += code[idx]; + idx++; + } + + value = id; + return TK_IDENTIFIER; + } else if (code[idx] == '@' && code[idx + 1] == '"') { + // begin of verbatim string + idx++; + } else { + error_str = "Unexpected character."; + error = true; + return TK_ERROR; + } + } + } + } +} + +Error ScriptClassParser::_skip_generic_type_params() { + + Token tk; + + while (true) { + tk = get_token(); + + if (tk == TK_IDENTIFIER) { + tk = get_token(); + + if (tk == TK_PERIOD) { + while (true) { + tk = get_token(); + + if (tk != TK_IDENTIFIER) { + error_str = "Expected " + get_token_name(TK_IDENTIFIER) + ", found: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + tk = get_token(); + + if (tk != TK_PERIOD) + break; + } + } + + if (tk == TK_OP_LESS) { + Error err = _skip_generic_type_params(); + if (err) + return err; + continue; + } else if (tk == TK_OP_GREATER) { + return OK; + } else if (tk != TK_COMMA) { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + } else if (tk == TK_OP_LESS) { + error_str = "Expected " + get_token_name(TK_IDENTIFIER) + ", found " + get_token_name(TK_OP_LESS); + error = true; + return ERR_PARSE_ERROR; + } else if (tk == TK_OP_GREATER) { + return OK; + } else { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + } +} + +Error ScriptClassParser::_parse_type_full_name(String &r_full_name) { + + Token tk = get_token(); + + if (tk != TK_IDENTIFIER) { + error_str = "Expected " + get_token_name(TK_IDENTIFIER) + ", found: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + r_full_name += String(value); + + if (code[idx] != '.') // We only want to take the next token if it's a period + return OK; + + tk = get_token(); + + CRASH_COND(tk != TK_PERIOD); // Assertion + + r_full_name += "."; + + return _parse_type_full_name(r_full_name); +} + +Error ScriptClassParser::_parse_class_base(Vector<String> &r_base) { + + String name; + + Error err = _parse_type_full_name(name); + if (err) + return err; + + Token tk = get_token(); + + bool generic = false; + if (tk == TK_OP_LESS) { + Error err = _skip_generic_type_params(); + if (err) + return err; + // We don't add it to the base list if it's generic + generic = true; + tk = get_token(); + } + + if (tk == TK_COMMA) { + Error err = _parse_class_base(r_base); + if (err) + return err; + } else if (tk == TK_IDENTIFIER && String(value) == "where") { + Error err = _parse_type_constraints(); + if (err) { + return err; + } + + // An open curly bracket was parsed by _parse_type_constraints, so we can exit + } else if (tk == TK_CURLY_BRACKET_OPEN) { + // we are finished when we hit the open curly bracket + } else { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + if (!generic) { + r_base.push_back(name); + } + + return OK; +} + +Error ScriptClassParser::_parse_type_constraints() { + Token tk = get_token(); + if (tk != TK_IDENTIFIER) { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + tk = get_token(); + if (tk != TK_COLON) { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + while (true) { + tk = get_token(); + if (tk == TK_IDENTIFIER) { + if (String(value) == "where") { + return _parse_type_constraints(); + } + + tk = get_token(); + if (tk == TK_PERIOD) { + while (true) { + tk = get_token(); + + if (tk != TK_IDENTIFIER) { + error_str = "Expected " + get_token_name(TK_IDENTIFIER) + ", found: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + tk = get_token(); + + if (tk != TK_PERIOD) + break; + } + } + } + + if (tk == TK_COMMA) { + continue; + } else if (tk == TK_IDENTIFIER && String(value) == "where") { + return _parse_type_constraints(); + } else if (tk == TK_SYMBOL && String(value) == "(") { + tk = get_token(); + if (tk != TK_SYMBOL || String(value) != ")") { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + } else if (tk == TK_OP_LESS) { + Error err = _skip_generic_type_params(); + if (err) + return err; + } else if (tk == TK_CURLY_BRACKET_OPEN) { + return OK; + } else { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + } +} + +Error ScriptClassParser::_parse_namespace_name(String &r_name, int &r_curly_stack) { + + Token tk = get_token(); + + if (tk == TK_IDENTIFIER) { + r_name += String(value); + } else { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + + tk = get_token(); + + if (tk == TK_PERIOD) { + r_name += "."; + return _parse_namespace_name(r_name, r_curly_stack); + } else if (tk == TK_CURLY_BRACKET_OPEN) { + r_curly_stack++; + return OK; + } else { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } +} + +Error ScriptClassParser::parse(const String &p_code) { + + code = p_code; + idx = 0; + line = 0; + error_str = String(); + error = false; + value = Variant(); + classes.clear(); + + Token tk = get_token(); + + Map<int, NameDecl> name_stack; + int curly_stack = 0; + int type_curly_stack = 0; + + while (!error && tk != TK_EOF) { + if (tk == TK_IDENTIFIER && String(value) == "class") { + tk = get_token(); + + if (tk == TK_IDENTIFIER) { + String name = value; + int at_level = type_curly_stack; + + ClassDecl class_decl; + + for (Map<int, NameDecl>::Element *E = name_stack.front(); E; E = E->next()) { + const NameDecl &name_decl = E->value(); + + if (name_decl.type == NameDecl::NAMESPACE_DECL) { + if (E != name_stack.front()) + class_decl.namespace_ += "."; + class_decl.namespace_ += name_decl.name; + } else { + class_decl.name += name_decl.name + "."; + } + } + + class_decl.name += name; + class_decl.nested = type_curly_stack > 0; + + bool generic = false; + + while (true) { + tk = get_token(); + + if (tk == TK_COLON) { + Error err = _parse_class_base(class_decl.base); + if (err) + return err; + + curly_stack++; + type_curly_stack++; + + break; + } else if (tk == TK_CURLY_BRACKET_OPEN) { + curly_stack++; + type_curly_stack++; + break; + } else if (tk == TK_OP_LESS && !generic) { + generic = true; + + Error err = _skip_generic_type_params(); + if (err) + return err; + } else if (tk == TK_IDENTIFIER && String(value) == "where") { + Error err = _parse_type_constraints(); + if (err) { + return err; + } + + // An open curly bracket was parsed by _parse_type_constraints, so we can exit + curly_stack++; + type_curly_stack++; + break; + } else { + error_str = "Unexpected token: " + get_token_name(tk); + error = true; + return ERR_PARSE_ERROR; + } + } + + NameDecl name_decl; + name_decl.name = name; + name_decl.type = NameDecl::CLASS_DECL; + name_stack[at_level] = name_decl; + + if (!generic) { // no generics, thanks + classes.push_back(class_decl); + } else if (OS::get_singleton()->is_stdout_verbose()) { + String full_name = class_decl.namespace_; + if (full_name.length()) + full_name += "."; + full_name += class_decl.name; + OS::get_singleton()->print(String("Ignoring generic class declaration: " + class_decl.name).utf8()); + } + } + } else if (tk == TK_IDENTIFIER && String(value) == "struct") { + String name; + int at_level = type_curly_stack; + while (true) { + tk = get_token(); + if (tk == TK_IDENTIFIER && name.empty()) { + name = String(value); + } else if (tk == TK_CURLY_BRACKET_OPEN) { + if (name.empty()) { + error_str = "Expected " + get_token_name(TK_IDENTIFIER) + " after keyword `struct`, found " + get_token_name(TK_CURLY_BRACKET_OPEN); + error = true; + return ERR_PARSE_ERROR; + } + + curly_stack++; + type_curly_stack++; + break; + } else if (tk == TK_EOF) { + error_str = "Expected " + get_token_name(TK_CURLY_BRACKET_OPEN) + " after struct decl, found " + get_token_name(TK_EOF); + error = true; + return ERR_PARSE_ERROR; + } + } + + NameDecl name_decl; + name_decl.name = name; + name_decl.type = NameDecl::STRUCT_DECL; + name_stack[at_level] = name_decl; + } else if (tk == TK_IDENTIFIER && String(value) == "namespace") { + if (type_curly_stack > 0) { + error_str = "Found namespace nested inside type."; + error = true; + return ERR_PARSE_ERROR; + } + + String name; + int at_level = curly_stack; + + Error err = _parse_namespace_name(name, curly_stack); + if (err) + return err; + + NameDecl name_decl; + name_decl.name = name; + name_decl.type = NameDecl::NAMESPACE_DECL; + name_stack[at_level] = name_decl; + } else if (tk == TK_CURLY_BRACKET_OPEN) { + curly_stack++; + } else if (tk == TK_CURLY_BRACKET_CLOSE) { + curly_stack--; + if (name_stack.has(curly_stack)) { + if (name_stack[curly_stack].type != NameDecl::NAMESPACE_DECL) + type_curly_stack--; + name_stack.erase(curly_stack); + } + } + + tk = get_token(); + } + + if (!error && tk == TK_EOF && curly_stack > 0) { + error_str = "Reached EOF with missing close curly brackets."; + error = true; + } + + if (error) + return ERR_PARSE_ERROR; + + return OK; +} + +Error ScriptClassParser::parse_file(const String &p_filepath) { + + String source; + + Error ferr = read_all_file_utf8(p_filepath, source); + if (ferr != OK) { + if (ferr == ERR_INVALID_DATA) { + ERR_EXPLAIN("File '" + p_filepath + "' contains invalid unicode (utf-8), so it was not loaded. Please ensure that scripts are saved in valid utf-8 unicode."); + } + ERR_FAIL_V(ferr); + } + + return parse(source); +} + +String ScriptClassParser::get_error() { + return error_str; +} + +Vector<ScriptClassParser::ClassDecl> ScriptClassParser::get_classes() { + return classes; +} diff --git a/modules/mono/editor/script_class_parser.h b/modules/mono/editor/script_class_parser.h new file mode 100644 index 0000000000..184adebaf2 --- /dev/null +++ b/modules/mono/editor/script_class_parser.h @@ -0,0 +1,80 @@ +#ifndef SCRIPT_CLASS_PARSER_H +#define SCRIPT_CLASS_PARSER_H + +#include "core/ustring.h" +#include "core/variant.h" +#include "core/vector.h" + +class ScriptClassParser { + +public: + struct NameDecl { + enum Type { + NAMESPACE_DECL, + CLASS_DECL, + STRUCT_DECL + }; + + String name; + Type type; + }; + + struct ClassDecl { + String name; + String namespace_; + Vector<String> base; + bool nested; + bool has_script_attr; + }; + +private: + String code; + int idx; + int line; + String error_str; + bool error; + Variant value; + + Vector<ClassDecl> classes; + + enum Token { + TK_BRACKET_OPEN, + TK_BRACKET_CLOSE, + TK_CURLY_BRACKET_OPEN, + TK_CURLY_BRACKET_CLOSE, + TK_PERIOD, + TK_COLON, + TK_COMMA, + TK_SYMBOL, + TK_IDENTIFIER, + TK_STRING, + TK_NUMBER, + TK_OP_LESS, + TK_OP_GREATER, + TK_EOF, + TK_ERROR, + TK_MAX + }; + + static const char *token_names[TK_MAX]; + static String get_token_name(Token p_token); + + Token get_token(); + + Error _skip_generic_type_params(); + + Error _parse_type_full_name(String &r_full_name); + Error _parse_class_base(Vector<String> &r_base); + Error _parse_type_constraints(); + Error _parse_namespace_name(String &r_name, int &r_curly_stack); + +public: + Error parse(const String &p_code); + Error parse_file(const String &p_filepath); + + String get_error(); + + Vector<ClassDecl> get_classes(); +}; + +#endif // SCRIPT_CLASS_PARSER_H diff --git a/modules/mono/glue/Managed/Files/AABB.cs b/modules/mono/glue/Managed/Files/AABB.cs index 66490b5e25..33b2b46712 100644 --- a/modules/mono/glue/Managed/Files/AABB.cs +++ b/modules/mono/glue/Managed/Files/AABB.cs @@ -407,8 +407,8 @@ namespace Godot return new AABB(min, max - min); } - - // Constructors + + // Constructors public AABB(Vector3 position, Vector3 size) { _position = position; diff --git a/modules/mono/glue/Managed/Files/Basis.cs b/modules/mono/glue/Managed/Files/Basis.cs index a5618cb28d..b318d96bb9 100644 --- a/modules/mono/glue/Managed/Files/Basis.cs +++ b/modules/mono/glue/Managed/Files/Basis.cs @@ -13,9 +13,9 @@ namespace Godot { private static readonly Basis identity = new Basis ( - new Vector3(1f, 0f, 0f), - new Vector3(0f, 1f, 0f), - new Vector3(0f, 0f, 1f) + 1f, 0f, 0f, + 0f, 1f, 0f, + 0f, 0f, 1f ); private static readonly Basis[] orthoBases = { @@ -159,9 +159,9 @@ namespace Godot { return new Basis ( - new Vector3(xAxis.x, yAxis.x, zAxis.x), - new Vector3(xAxis.y, yAxis.y, zAxis.y), - new Vector3(xAxis.z, yAxis.z, zAxis.z) + xAxis.x, yAxis.x, zAxis.x, + xAxis.y, yAxis.y, zAxis.y, + xAxis.z, yAxis.z, zAxis.z ); } @@ -410,10 +410,12 @@ namespace Godot ); } - public Quat Quat() { + public Quat Quat() + { real_t trace = _x[0] + _y[1] + _z[2]; - if (trace > 0.0f) { + if (trace > 0.0f) + { real_t s = Mathf.Sqrt(trace + 1.0f) * 2f; real_t inv_s = 1f / s; return new Quat( @@ -424,7 +426,8 @@ namespace Godot ); } - if (_x[0] > _y[1] && _x[0] > _z[2]) { + if (_x[0] > _y[1] && _x[0] > _z[2]) + { real_t s = Mathf.Sqrt(_x[0] - _y[1] - _z[2] + 1.0f) * 2f; real_t inv_s = 1f / s; return new Quat( @@ -435,7 +438,8 @@ namespace Godot ); } - if (_y[1] > _z[2]) { + if (_y[1] > _z[2]) + { real_t s = Mathf.Sqrt(-_x[0] + _y[1] - _z[2] + 1.0f) * 2f; real_t inv_s = 1f / s; return new Quat( @@ -444,7 +448,9 @@ namespace Godot (_y[2] + _z[1]) * inv_s, (_x[2] - _z[0]) * inv_s ); - } else { + } + else + { real_t s = Mathf.Sqrt(-_x[0] - _y[1] + _z[2] + 1.0f) * 2f; real_t inv_s = 1f / s; return new Quat( @@ -502,8 +508,8 @@ namespace Godot { var axis_sq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z); - real_t cosine = Mathf.Cos( phi); - real_t sine = Mathf.Sin( phi); + real_t cosine = Mathf.Cos(phi); + real_t sine = Mathf.Sin(phi); _x = new Vector3 ( @@ -529,12 +535,17 @@ namespace Godot public Basis(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis) { - _x = xAxis; - _y = yAxis; - _z = zAxis; + _x = new Vector3(xAxis.x, yAxis.x, zAxis.x); + _y = new Vector3(xAxis.y, yAxis.y, zAxis.y); + _z = new Vector3(xAxis.z, yAxis.z, zAxis.z); + // Same as: + // SetAxis(0, xAxis); + // SetAxis(1, yAxis); + // SetAxis(2, zAxis); + // We need to assign the struct fields so we can't do that... } - public Basis(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) + internal Basis(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) { _x = new Vector3(xx, xy, xz); _y = new Vector3(yx, yy, yz); diff --git a/modules/mono/glue/Managed/Files/Color.cs b/modules/mono/glue/Managed/Files/Color.cs index 88cb8524b8..fc5bb010a9 100644 --- a/modules/mono/glue/Managed/Files/Color.cs +++ b/modules/mono/glue/Managed/Files/Color.cs @@ -379,8 +379,8 @@ namespace Godot return txt; } - - // Constructors + + // Constructors public Color(float r, float g, float b, float a = 1.0f) { this.r = r; diff --git a/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs b/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs index 71534d7782..366d89b1c2 100644 --- a/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs +++ b/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs @@ -2,42 +2,42 @@ namespace Godot { public partial class Node { - public T GetNode<T>(NodePath path) where T : Godot.Node + public T GetNode<T>(NodePath path) where T : class { - return (T)GetNode(path); + return (T)(object)GetNode(path); } - public T GetNodeOrNull<T>(NodePath path) where T : Godot.Node + public T GetNodeOrNull<T>(NodePath path) where T : class { return GetNode(path) as T; } - public T GetChild<T>(int idx) where T : Godot.Node + public T GetChild<T>(int idx) where T : class { - return (T)GetChild(idx); + return (T)(object)GetChild(idx); } - public T GetChildOrNull<T>(int idx) where T : Godot.Node + public T GetChildOrNull<T>(int idx) where T : class { return GetChild(idx) as T; } - public T GetOwner<T>() where T : Godot.Node + public T GetOwner<T>() where T : class { - return (T)GetOwner(); + return (T)(object)GetOwner(); } - public T GetOwnerOrNull<T>() where T : Godot.Node + public T GetOwnerOrNull<T>() where T : class { return GetOwner() as T; } - public T GetParent<T>() where T : Godot.Node + public T GetParent<T>() where T : class { - return (T)GetParent(); + return (T)(object)GetParent(); } - public T GetParentOrNull<T>() where T : Godot.Node + public T GetParentOrNull<T>() where T : class { return GetParent() as T; } diff --git a/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs b/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs index ceecc589e6..684d160b57 100644 --- a/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs +++ b/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs @@ -2,9 +2,9 @@ namespace Godot { public static partial class ResourceLoader { - public static T Load<T>(string path) where T : Godot.Resource + public static T Load<T>(string path) where T : class { - return (T) Load(path); + return (T)(object)Load(path); } } } diff --git a/modules/mono/glue/Managed/Files/GD.cs b/modules/mono/glue/Managed/Files/GD.cs index 264be23588..75a35a9eea 100644 --- a/modules/mono/glue/Managed/Files/GD.cs +++ b/modules/mono/glue/Managed/Files/GD.cs @@ -65,9 +65,19 @@ namespace Godot return ResourceLoader.Load(path); } - public static T Load<T>(string path) where T : Godot.Resource + public static T Load<T>(string path) where T : class { - return (T) ResourceLoader.Load(path); + return ResourceLoader.Load<T>(path); + } + + public static void PushError(string message) + { + godot_icall_GD_pusherror(message); + } + + public static void PushWarning(string message) + { + godot_icall_GD_pushwarning(message); } public static void Print(params object[] what) @@ -238,5 +248,11 @@ namespace Godot [MethodImpl(MethodImplOptions.InternalCall)] internal extern static string godot_icall_GD_var2str(object var); + + [MethodImpl(MethodImplOptions.InternalCall)] + internal extern static void godot_icall_GD_pusherror(string type); + + [MethodImpl(MethodImplOptions.InternalCall)] + internal extern static void godot_icall_GD_pushwarning(string type); } } diff --git a/modules/mono/glue/Managed/Files/Mathf.cs b/modules/mono/glue/Managed/Files/Mathf.cs index a89dfe5f27..dcab3c1ffc 100644 --- a/modules/mono/glue/Managed/Files/Mathf.cs +++ b/modules/mono/glue/Managed/Files/Mathf.cs @@ -206,7 +206,7 @@ namespace Godot public static real_t PosMod(real_t a, real_t b) { real_t c = a % b; - if ((c < 0 && b > 0) || (c > 0 && b < 0)) + if ((c < 0 && b > 0) || (c > 0 && b < 0)) { c += b; } @@ -219,7 +219,7 @@ namespace Godot public static int PosMod(int a, int b) { int c = a % b; - if ((c < 0 && b > 0) || (c > 0 && b < 0)) + if ((c < 0 && b > 0) || (c > 0 && b < 0)) { c += b; } diff --git a/modules/mono/glue/Managed/Files/MathfEx.cs b/modules/mono/glue/Managed/Files/MathfEx.cs index 739b7fb568..2ef02cc288 100644 --- a/modules/mono/glue/Managed/Files/MathfEx.cs +++ b/modules/mono/glue/Managed/Files/MathfEx.cs @@ -29,7 +29,7 @@ namespace Godot public static int FloorToInt(real_t s) { return (int)Math.Floor(s); - } + } public static int RoundToInt(real_t s) { diff --git a/modules/mono/glue/Managed/Files/Plane.cs b/modules/mono/glue/Managed/Files/Plane.cs index 9611dce11e..f11cd490a9 100644 --- a/modules/mono/glue/Managed/Files/Plane.cs +++ b/modules/mono/glue/Managed/Files/Plane.cs @@ -144,7 +144,7 @@ namespace Godot { return point - _normal * DistanceTo(point); } - + // Constants private static readonly Plane _planeYZ = new Plane(1, 0, 0, 0); private static readonly Plane _planeXZ = new Plane(0, 1, 0, 0); @@ -153,8 +153,8 @@ namespace Godot public static Plane PlaneYZ { get { return _planeYZ; } } public static Plane PlaneXZ { get { return _planeXZ; } } public static Plane PlaneXY { get { return _planeXY; } } - - // Constructors + + // Constructors public Plane(real_t a, real_t b, real_t c, real_t d) { _normal = new Vector3(a, b, c); diff --git a/modules/mono/glue/Managed/Files/Quat.cs b/modules/mono/glue/Managed/Files/Quat.cs index eaa027eb69..fd1ac01083 100644 --- a/modules/mono/glue/Managed/Files/Quat.cs +++ b/modules/mono/glue/Managed/Files/Quat.cs @@ -202,7 +202,7 @@ namespace Godot // Static Readonly Properties public static Quat Identity { get; } = new Quat(0f, 0f, 0f, 1f); - // Constructors + // Constructors public Quat(real_t x, real_t y, real_t z, real_t w) { this.x = x; diff --git a/modules/mono/glue/Managed/Files/Rect2.cs b/modules/mono/glue/Managed/Files/Rect2.cs index cb25c267bc..888f300347 100644 --- a/modules/mono/glue/Managed/Files/Rect2.cs +++ b/modules/mono/glue/Managed/Files/Rect2.cs @@ -182,8 +182,8 @@ namespace Godot return newRect; } - - // Constructors + + // Constructors public Rect2(Vector2 position, Vector2 size) { _position = position; diff --git a/modules/mono/glue/Managed/Files/StringExtensions.cs b/modules/mono/glue/Managed/Files/StringExtensions.cs index 21c9be98c1..c194facd0b 100644 --- a/modules/mono/glue/Managed/Files/StringExtensions.cs +++ b/modules/mono/glue/Managed/Files/StringExtensions.cs @@ -185,7 +185,7 @@ namespace Godot int instanceIndex = 0; int toIndex = 0; - + if (caseSensitive) // Outside while loop to avoid checking multiple times, despite some code duplication. { while (true) @@ -480,9 +480,9 @@ namespace Godot return false; // Don't start with number plz } - bool validChar = instance[i] >= '0' && - instance[i] <= '9' || instance[i] >= 'a' && - instance[i] <= 'z' || instance[i] >= 'A' && + bool validChar = instance[i] >= '0' && + instance[i] <= '9' || instance[i] >= 'a' && + instance[i] <= 'z' || instance[i] >= 'A' && instance[i] <= 'Z' || instance[i] == '_'; if (!validChar) diff --git a/modules/mono/glue/Managed/Files/Transform.cs b/modules/mono/glue/Managed/Files/Transform.cs index 068007d7f0..fa85855edd 100644 --- a/modules/mono/glue/Managed/Files/Transform.cs +++ b/modules/mono/glue/Managed/Files/Transform.cs @@ -124,16 +124,16 @@ namespace Godot // Constants private static readonly Transform _identity = new Transform(Basis.Identity, Vector3.Zero); - private static readonly Transform _flipX = new Transform(new Basis(new Vector3(-1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)), Vector3.Zero); - private static readonly Transform _flipY = new Transform(new Basis(new Vector3(1, 0, 0), new Vector3(0, -1, 0), new Vector3(0, 0, 1)), Vector3.Zero); - private static readonly Transform _flipZ = new Transform(new Basis(new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, -1)), Vector3.Zero); + private static readonly Transform _flipX = new Transform(new Basis(-1, 0, 0, 0, 1, 0, 0, 0, 1), Vector3.Zero); + private static readonly Transform _flipY = new Transform(new Basis(1, 0, 0, 0, -1, 0, 0, 0, 1), Vector3.Zero); + private static readonly Transform _flipZ = new Transform(new Basis(1, 0, 0, 0, 1, 0, 0, 0, -1), Vector3.Zero); public static Transform Identity { get { return _identity; } } public static Transform FlipX { get { return _flipX; } } public static Transform FlipY { get { return _flipY; } } public static Transform FlipZ { get { return _flipZ; } } - // Constructors + // Constructors public Transform(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis, Vector3 origin) { basis = Basis.CreateFromAxes(xAxis, yAxis, zAxis); diff --git a/modules/mono/glue/Managed/Files/Transform2D.cs b/modules/mono/glue/Managed/Files/Transform2D.cs index 8d30833066..c9e5b560b2 100644 --- a/modules/mono/glue/Managed/Files/Transform2D.cs +++ b/modules/mono/glue/Managed/Files/Transform2D.cs @@ -261,15 +261,15 @@ namespace Godot public static Transform2D Identity { get { return _identity; } } public static Transform2D FlipX { get { return _flipX; } } public static Transform2D FlipY { get { return _flipY; } } - - // Constructors + + // Constructors public Transform2D(Vector2 xAxis, Vector2 yAxis, Vector2 origin) { x = xAxis; y = yAxis; o = origin; } - + public Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) { x = new Vector2(xx, xy); diff --git a/modules/mono/glue/Managed/Files/Vector2.cs b/modules/mono/glue/Managed/Files/Vector2.cs index 080b8802ba..ce41886bfc 100644 --- a/modules/mono/glue/Managed/Files/Vector2.cs +++ b/modules/mono/glue/Managed/Files/Vector2.cs @@ -215,7 +215,7 @@ namespace Godot x = v.x; y = v.y; } - + public Vector2 Slerp(Vector2 b, real_t t) { real_t theta = AngleTo(b); @@ -242,7 +242,7 @@ namespace Godot private static readonly Vector2 _one = new Vector2(1, 1); private static readonly Vector2 _negOne = new Vector2(-1, -1); private static readonly Vector2 _inf = new Vector2(Mathf.Inf, Mathf.Inf); - + private static readonly Vector2 _up = new Vector2(0, -1); private static readonly Vector2 _down = new Vector2(0, 1); private static readonly Vector2 _right = new Vector2(1, 0); diff --git a/modules/mono/glue/Managed/Files/Vector3.cs b/modules/mono/glue/Managed/Files/Vector3.cs index 6fffe5e4d6..f6ff27989d 100644 --- a/modules/mono/glue/Managed/Files/Vector3.cs +++ b/modules/mono/glue/Managed/Files/Vector3.cs @@ -204,9 +204,9 @@ namespace Godot public Basis Outer(Vector3 b) { return new Basis( - new Vector3(x * b.x, x * b.y, x * b.z), - new Vector3(y * b.x, y * b.y, y * b.z), - new Vector3(z * b.x, z * b.y, z * b.z) + x * b.x, x * b.y, x * b.z, + y * b.x, y * b.y, y * b.z, + z * b.x, z * b.y, z * b.z ); } @@ -276,13 +276,13 @@ namespace Godot 0f, 0f, z ); } - + // Constants private static readonly Vector3 _zero = new Vector3(0, 0, 0); private static readonly Vector3 _one = new Vector3(1, 1, 1); private static readonly Vector3 _negOne = new Vector3(-1, -1, -1); private static readonly Vector3 _inf = new Vector3(Mathf.Inf, Mathf.Inf, Mathf.Inf); - + private static readonly Vector3 _up = new Vector3(0, 1, 0); private static readonly Vector3 _down = new Vector3(0, -1, 0); private static readonly Vector3 _right = new Vector3(1, 0, 0); @@ -294,7 +294,7 @@ namespace Godot public static Vector3 One { get { return _one; } } public static Vector3 NegOne { get { return _negOne; } } public static Vector3 Inf { get { return _inf; } } - + public static Vector3 Up { get { return _up; } } public static Vector3 Down { get { return _down; } } public static Vector3 Right { get { return _right; } } diff --git a/modules/mono/glue/Managed/Properties/AssemblyInfo.cs b/modules/mono/glue/Managed/Properties/AssemblyInfo.cs index 7ed68acad7..77b3774e81 100644 --- a/modules/mono/glue/Managed/Properties/AssemblyInfo.cs +++ b/modules/mono/glue/Managed/Properties/AssemblyInfo.cs @@ -1,7 +1,7 @@ using System.Reflection; using System.Runtime.CompilerServices; -// Information about this assembly is defined by the following attributes. +// Information about this assembly is defined by the following attributes. // Change them to the values specific to your project. [assembly: AssemblyTitle("Managed")] @@ -19,7 +19,7 @@ using System.Runtime.CompilerServices; [assembly: AssemblyVersion("1.0.*")] -// The following attributes are used to specify the signing key for the assembly, +// The following attributes are used to specify the signing key for the assembly, // if desired. See the Mono documentation for more information about signing. //[assembly: AssemblyDelaySign(false)] diff --git a/modules/mono/glue/base_object_glue.cpp b/modules/mono/glue/base_object_glue.cpp index d718c3cc61..58916c5283 100644 --- a/modules/mono/glue/base_object_glue.cpp +++ b/modules/mono/glue/base_object_glue.cpp @@ -54,8 +54,10 @@ void godot_icall_Object_Disposed(MonoObject *p_obj, Object *p_ptr) { if (p_ptr->get_script_instance()) { CSharpInstance *cs_instance = CAST_CSHARP_INSTANCE(p_ptr->get_script_instance()); if (cs_instance) { - cs_instance->mono_object_disposed(p_obj); - p_ptr->set_script_instance(NULL); + if (!cs_instance->is_destructing_script_instance()) { + cs_instance->mono_object_disposed(p_obj); + p_ptr->set_script_instance(NULL); + } return; } } @@ -82,12 +84,14 @@ void godot_icall_Reference_Disposed(MonoObject *p_obj, Object *p_ptr, bool p_is_ if (ref->get_script_instance()) { CSharpInstance *cs_instance = CAST_CSHARP_INSTANCE(ref->get_script_instance()); if (cs_instance) { - bool r_owner_deleted; - cs_instance->mono_object_disposed_baseref(p_obj, p_is_finalizer, r_owner_deleted); - if (!r_owner_deleted && !p_is_finalizer) { - // If the native instance is still alive and Dispose() was called - // (instead of the finalizer), then we remove the script instance. - ref->set_script_instance(NULL); + if (!cs_instance->is_destructing_script_instance()) { + bool r_owner_deleted; + cs_instance->mono_object_disposed_baseref(p_obj, p_is_finalizer, r_owner_deleted); + if (!r_owner_deleted && !p_is_finalizer) { + // If the native instance is still alive and Dispose() was called + // (instead of the finalizer), then we remove the script instance. + ref->set_script_instance(NULL); + } } return; } diff --git a/modules/mono/glue/gd_glue.cpp b/modules/mono/glue/gd_glue.cpp index 051f42b966..9f5bcecdd9 100644 --- a/modules/mono/glue/gd_glue.cpp +++ b/modules/mono/glue/gd_glue.cpp @@ -157,6 +157,14 @@ bool godot_icall_GD_type_exists(MonoString *p_type) { return ClassDB::class_exists(GDMonoMarshal::mono_string_to_godot(p_type)); } +void godot_icall_GD_pusherror(MonoString *p_str) { + ERR_PRINTS(GDMonoMarshal::mono_string_to_godot(p_str)); +} + +void godot_icall_GD_pushwarning(MonoString *p_str) { + WARN_PRINTS(GDMonoMarshal::mono_string_to_godot(p_str)); +} + MonoArray *godot_icall_GD_var2bytes(MonoObject *p_var) { Variant var = GDMonoMarshal::mono_object_to_variant(p_var); @@ -186,6 +194,8 @@ void godot_register_gd_icalls() { mono_add_internal_call("Godot.GD::godot_icall_GD_convert", (void *)godot_icall_GD_convert); mono_add_internal_call("Godot.GD::godot_icall_GD_hash", (void *)godot_icall_GD_hash); mono_add_internal_call("Godot.GD::godot_icall_GD_instance_from_id", (void *)godot_icall_GD_instance_from_id); + mono_add_internal_call("Godot.GD::godot_icall_GD_pusherror", (void *)godot_icall_GD_pusherror); + mono_add_internal_call("Godot.GD::godot_icall_GD_pushwarning", (void *)godot_icall_GD_pushwarning); mono_add_internal_call("Godot.GD::godot_icall_GD_print", (void *)godot_icall_GD_print); mono_add_internal_call("Godot.GD::godot_icall_GD_printerr", (void *)godot_icall_GD_printerr); mono_add_internal_call("Godot.GD::godot_icall_GD_printraw", (void *)godot_icall_GD_printraw); diff --git a/modules/mono/glue/nodepath_glue.cpp b/modules/mono/glue/nodepath_glue.cpp index 4b7648a4f9..422d73104d 100644 --- a/modules/mono/glue/nodepath_glue.cpp +++ b/modules/mono/glue/nodepath_glue.cpp @@ -40,7 +40,7 @@ NodePath *godot_icall_NodePath_Ctor(MonoString *p_path) { void godot_icall_NodePath_Dtor(NodePath *p_ptr) { ERR_FAIL_NULL(p_ptr); - _GodotSharp::get_singleton()->queue_dispose(p_ptr); + memdelete(p_ptr); } MonoString *godot_icall_NodePath_operator_String(NodePath *p_np) { diff --git a/modules/mono/glue/rid_glue.cpp b/modules/mono/glue/rid_glue.cpp index 5d66b8aa6f..6c002b5b9d 100644 --- a/modules/mono/glue/rid_glue.cpp +++ b/modules/mono/glue/rid_glue.cpp @@ -45,7 +45,7 @@ RID *godot_icall_RID_Ctor(Object *p_from) { void godot_icall_RID_Dtor(RID *p_ptr) { ERR_FAIL_NULL(p_ptr); - _GodotSharp::get_singleton()->queue_dispose(p_ptr); + memdelete(p_ptr); } uint32_t godot_icall_RID_get_id(RID *p_ptr) { diff --git a/modules/mono/godotsharp_defs.h b/modules/mono/godotsharp_defs.h index 39d608de9f..5a6a2d1742 100644 --- a/modules/mono/godotsharp_defs.h +++ b/modules/mono/godotsharp_defs.h @@ -36,7 +36,8 @@ #define BINDINGS_GLOBAL_SCOPE_CLASS "GD" #define BINDINGS_PTR_FIELD "ptr" #define BINDINGS_NATIVE_NAME_FIELD "nativeName" -#define API_ASSEMBLY_NAME "GodotSharp" +#define API_SOLUTION_NAME "GodotSharp" +#define CORE_API_ASSEMBLY_NAME "GodotSharp" #define EDITOR_API_ASSEMBLY_NAME "GodotSharpEditor" #define EDITOR_TOOLS_ASSEMBLY_NAME "GodotSharpTools" diff --git a/modules/mono/godotsharp_dirs.cpp b/modules/mono/godotsharp_dirs.cpp index 2570e68f13..d3fb2cb640 100644 --- a/modules/mono/godotsharp_dirs.cpp +++ b/modules/mono/godotsharp_dirs.cpp @@ -30,11 +30,11 @@ #include "godotsharp_dirs.h" +#include "core/os/dir_access.h" #include "core/os/os.h" +#include "core/project_settings.h" #ifdef TOOLS_ENABLED -#include "core/os/dir_access.h" -#include "core/project_settings.h" #include "core/version.h" #include "editor/editor_settings.h" #endif @@ -95,10 +95,18 @@ public: #ifdef TOOLS_ENABLED String mono_solutions_dir; String build_logs_dir; + String sln_filepath; String csproj_filepath; + + String data_mono_bin_dir; + String data_editor_tools_dir; + String data_editor_prebuilt_api_dir; #endif + String data_mono_etc_dir; + String data_mono_lib_dir; + private: _GodotSharpDirs() { res_data_dir = "res://.mono"; @@ -123,10 +131,60 @@ private: name = "UnnamedProject"; } - String base_path = String("res://") + name; + String base_path = ProjectSettings::get_singleton()->globalize_path("res://"); + + sln_filepath = base_path.plus_file(name + ".sln"); + csproj_filepath = base_path.plus_file(name + ".csproj"); +#endif + + String exe_dir = OS::get_singleton()->get_executable_path().get_base_dir(); + +#ifdef TOOLS_ENABLED + + String data_dir_root = exe_dir.plus_file("GodotSharp"); + data_editor_tools_dir = data_dir_root.plus_file("Tools"); + data_editor_prebuilt_api_dir = data_dir_root.plus_file("Api"); + + String data_mono_root_dir = data_dir_root.plus_file("Mono"); + data_mono_bin_dir = data_mono_root_dir.plus_file("bin"); + data_mono_etc_dir = data_mono_root_dir.plus_file("etc"); + data_mono_lib_dir = data_mono_root_dir.plus_file("lib"); + +#ifdef OSX_ENABLED + if (!DirAccess::exists(data_editor_tools_dir)) { + data_editor_tools_dir = exe_dir.plus_file("../Frameworks/GodotSharp/Tools"); + } + + if (!DirAccess::exists(data_editor_prebuilt_api_dir)) { + data_editor_prebuilt_api_dir = exe_dir.plus_file("../Frameworks/GodotSharp/Api"); + } + + if (!DirAccess::exists(data_mono_root_dir)) { + data_mono_bin_dir = exe_dir.plus_file("../Frameworks/GodotSharp/Mono/bin"); + data_mono_etc_dir = exe_dir.plus_file("../Resources/GodotSharp/Mono/etc"); + data_mono_lib_dir = exe_dir.plus_file("../Frameworks/GodotSharp/Mono/lib"); + } +#endif + +#else + + String appname = OS::get_singleton()->get_safe_dir_name(ProjectSettings::get_singleton()->get("application/config/name")); + String data_dir_root = exe_dir.plus_file("data_" + appname); + if (!DirAccess::exists(data_dir_root)) { + data_dir_root = exe_dir.plus_file("data_Godot"); + } + + String data_mono_root_dir = data_dir_root.plus_file("Mono"); + data_mono_etc_dir = data_mono_root_dir.plus_file("etc"); + data_mono_lib_dir = data_mono_root_dir.plus_file("lib"); + +#ifdef OSX_ENABLED + if (!DirAccess::exists(data_mono_root_dir)) { + data_mono_etc_dir = exe_dir.plus_file("../Resources/GodotSharp/Mono/etc"); + data_mono_lib_dir = exe_dir.plus_file("../Frameworks/GodotSharp/Mono/lib"); + } +#endif - sln_filepath = ProjectSettings::get_singleton()->globalize_path(base_path + ".sln"); - csproj_filepath = ProjectSettings::get_singleton()->globalize_path(base_path + ".csproj"); #endif } @@ -192,5 +250,26 @@ String get_project_sln_path() { String get_project_csproj_path() { return _GodotSharpDirs::get_singleton().csproj_filepath; } + +String get_data_mono_bin_dir() { + return _GodotSharpDirs::get_singleton().data_mono_bin_dir; +} + +String get_data_editor_tools_dir() { + return _GodotSharpDirs::get_singleton().data_editor_tools_dir; +} + +String get_data_editor_prebuilt_api_dir() { + return _GodotSharpDirs::get_singleton().data_editor_prebuilt_api_dir; +} #endif + +String get_data_mono_etc_dir() { + return _GodotSharpDirs::get_singleton().data_mono_etc_dir; +} + +String get_data_mono_lib_dir() { + return _GodotSharpDirs::get_singleton().data_mono_lib_dir; +} + } // namespace GodotSharpDirs diff --git a/modules/mono/godotsharp_dirs.h b/modules/mono/godotsharp_dirs.h index 3466cb271d..35b564be30 100644 --- a/modules/mono/godotsharp_dirs.h +++ b/modules/mono/godotsharp_dirs.h @@ -49,11 +49,18 @@ String get_mono_logs_dir(); #ifdef TOOLS_ENABLED String get_mono_solutions_dir(); String get_build_logs_dir(); -String get_custom_project_settings_dir(); -#endif String get_project_sln_path(); String get_project_csproj_path(); + +String get_data_mono_bin_dir(); +String get_data_editor_tools_dir(); +String get_data_editor_prebuilt_api_dir(); +#endif + +String get_data_mono_etc_dir(); +String get_data_mono_lib_dir(); + } // namespace GodotSharpDirs #endif // GODOTSHARP_DIRS_H diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp index 9311aa3930..a80155bd89 100644 --- a/modules/mono/mono_gd/gd_mono.cpp +++ b/modules/mono/mono_gd/gd_mono.cpp @@ -162,50 +162,62 @@ void GDMono::initialize() { mono_trace_set_printerr_handler(gdmono_MonoPrintCallback); #endif + String assembly_rootdir; + String config_dir; + +#ifdef TOOLS_ENABLED #ifdef WINDOWS_ENABLED mono_reg_info = MonoRegUtils::find_mono(); - CharString assembly_dir; - CharString config_dir; - if (mono_reg_info.assembly_dir.length() && DirAccess::exists(mono_reg_info.assembly_dir)) { - assembly_dir = mono_reg_info.assembly_dir.utf8(); + assembly_rootdir = mono_reg_info.assembly_dir; } if (mono_reg_info.config_dir.length() && DirAccess::exists(mono_reg_info.config_dir)) { - config_dir = mono_reg_info.config_dir.utf8(); + config_dir = mono_reg_info.config_dir; } - - mono_set_dirs(assembly_dir.length() ? assembly_dir.get_data() : NULL, - config_dir.length() ? config_dir.get_data() : NULL); #elif OSX_ENABLED - mono_set_dirs(NULL, NULL); - - { - const char *assembly_rootdir = mono_assembly_getrootdir(); - const char *config_dir = mono_get_config_dir(); - - if (!assembly_rootdir || !config_dir || !DirAccess::exists(assembly_rootdir) || !DirAccess::exists(config_dir)) { - Vector<const char *> locations; - locations.push_back("/Library/Frameworks/Mono.framework/Versions/Current/"); - locations.push_back("/usr/local/var/homebrew/linked/mono/"); - - for (int i = 0; i < locations.size(); i++) { - String hint_assembly_rootdir = path_join(locations[i], "lib"); - String hint_mscorlib_path = path_join(hint_assembly_rootdir, "mono", "4.5", "mscorlib.dll"); - String hint_config_dir = path_join(locations[i], "etc"); - - if (FileAccess::exists(hint_mscorlib_path) && DirAccess::exists(hint_config_dir)) { - mono_set_dirs(hint_assembly_rootdir.utf8().get_data(), hint_config_dir.utf8().get_data()); - break; - } + const char *c_assembly_rootdir = mono_assembly_getrootdir(); + const char *c_config_dir = mono_get_config_dir(); + + if (!c_assembly_rootdir || !c_config_dir || !DirAccess::exists(c_assembly_rootdir) || !DirAccess::exists(c_config_dir)) { + Vector<const char *> locations; + locations.push_back("/Library/Frameworks/Mono.framework/Versions/Current/"); + locations.push_back("/usr/local/var/homebrew/linked/mono/"); + + for (int i = 0; i < locations.size(); i++) { + String hint_assembly_rootdir = path_join(locations[i], "lib"); + String hint_mscorlib_path = path_join(hint_assembly_rootdir, "mono", "4.5", "mscorlib.dll"); + String hint_config_dir = path_join(locations[i], "etc"); + + if (FileAccess::exists(hint_mscorlib_path) && DirAccess::exists(hint_config_dir)) { + assembly_rootdir = hint_assembly_rootdir; + config_dir = hint_config_dir; + break; } } } +#endif +#endif // TOOLS_ENABLED + + String bundled_assembly_rootdir = GodotSharpDirs::get_data_mono_lib_dir(); + String bundled_config_dir = GodotSharpDirs::get_data_mono_etc_dir(); + +#ifdef TOOLS_ENABLED + if (DirAccess::exists(bundled_assembly_rootdir) && DirAccess::exists(bundled_config_dir)) { + assembly_rootdir = bundled_assembly_rootdir; + config_dir = bundled_config_dir; + } #else - mono_set_dirs(NULL, NULL); + // These are always the directories in export templates + assembly_rootdir = bundled_assembly_rootdir; + config_dir = bundled_config_dir; #endif + // Leak if we call mono_set_dirs more than once + mono_set_dirs(assembly_rootdir.length() ? assembly_rootdir.utf8().get_data() : NULL, + config_dir.length() ? config_dir.utf8().get_data() : NULL); + GDMonoAssembly::initialize(); #ifdef DEBUG_ENABLED @@ -262,8 +274,11 @@ void GDMono::initialize() { // Everything is fine with the api assemblies, load the project assembly _load_project_assembly(); } else { - if ((core_api_assembly && (core_api_assembly_out_of_sync || !GDMonoUtils::mono_cache.godot_api_cache_updated)) || - (editor_api_assembly && editor_api_assembly_out_of_sync)) { + if ((core_api_assembly && (core_api_assembly_out_of_sync || !GDMonoUtils::mono_cache.godot_api_cache_updated)) +#ifdef TOOLS_ENABLED + || (editor_api_assembly && editor_api_assembly_out_of_sync) +#endif + ) { #ifdef TOOLS_ENABLED // The assembly was successfully loaded, but the full api could not be cached. // This is most likely an outdated assembly loaded because of an invalid version in the @@ -400,6 +415,32 @@ bool GDMono::load_assembly(const String &p_name, MonoAssemblyName *p_aname, GDMo return true; } +bool GDMono::load_assembly_from(const String &p_name, const String &p_path, GDMonoAssembly **r_assembly, bool p_refonly) { + + CRASH_COND(!r_assembly); + + print_verbose("Mono: Loading assembly " + p_name + (p_refonly ? " (refonly)" : "") + "..."); + + GDMonoAssembly *assembly = GDMonoAssembly::load_from(p_name, p_path, p_refonly); + + if (!assembly) + return false; + +#ifdef DEBUG_ENABLED + uint32_t domain_id = mono_domain_get_id(mono_domain_get()); + GDMonoAssembly **stored_assembly = assemblies[domain_id].getptr(p_name); + + ERR_FAIL_COND_V(stored_assembly == NULL, false); + ERR_FAIL_COND_V(*stored_assembly != assembly, false); +#endif + + *r_assembly = assembly; + + print_verbose("Mono: Assembly " + p_name + (p_refonly ? " (refonly)" : "") + " loaded from path: " + (*r_assembly)->get_path()); + + return true; +} + APIAssembly::Version APIAssembly::Version::get_from_loaded_assembly(GDMonoAssembly *p_api_assembly, APIAssembly::Type p_api_type) { APIAssembly::Version api_assembly_version; @@ -455,7 +496,14 @@ bool GDMono::_load_core_api_assembly() { } #endif - bool success = load_assembly(API_ASSEMBLY_NAME, &core_api_assembly); + String assembly_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(CORE_API_ASSEMBLY_NAME ".dll"); + + if (!FileAccess::exists(assembly_path)) + return false; + + bool success = load_assembly_from(CORE_API_ASSEMBLY_NAME, + assembly_path, + &core_api_assembly); if (success) { #ifdef MONO_GLUE_ENABLED @@ -480,14 +528,19 @@ bool GDMono::_load_editor_api_assembly() { if (editor_api_assembly) return true; -#ifdef TOOLS_ENABLED if (metadata_is_api_assembly_invalidated(APIAssembly::API_EDITOR)) { print_verbose("Mono: Skipping loading of Editor API assembly because it was invalidated"); return false; } -#endif - bool success = load_assembly(EDITOR_API_ASSEMBLY_NAME, &editor_api_assembly); + String assembly_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); + + if (!FileAccess::exists(assembly_path)) + return false; + + bool success = load_assembly_from(EDITOR_API_ASSEMBLY_NAME, + assembly_path, + &editor_api_assembly); if (success) { #ifdef MONO_GLUE_ENABLED @@ -528,6 +581,8 @@ bool GDMono::_load_project_assembly() { if (success) { mono_assembly_set_main(project_assembly->get_assembly()); + + CSharpLanguage::get_singleton()->project_assembly_loaded(); } else { if (OS::get_singleton()->is_stdout_verbose()) print_error("Mono: Failed to load project assembly"); @@ -580,7 +635,7 @@ void GDMono::metadata_set_api_assembly_invalidated(APIAssembly::Type p_api_type, String assembly_path = GodotSharpDirs::get_res_assemblies_dir() .plus_file(p_api_type == APIAssembly::API_CORE ? - API_ASSEMBLY_NAME ".dll" : + CORE_API_ASSEMBLY_NAME ".dll" : EDITOR_API_ASSEMBLY_NAME ".dll"); ERR_FAIL_COND(!FileAccess::exists(assembly_path)); @@ -611,7 +666,7 @@ bool GDMono::metadata_is_api_assembly_invalidated(APIAssembly::Type p_api_type) String assembly_path = GodotSharpDirs::get_res_assemblies_dir() .plus_file(p_api_type == APIAssembly::API_CORE ? - API_ASSEMBLY_NAME ".dll" : + CORE_API_ASSEMBLY_NAME ".dll" : EDITOR_API_ASSEMBLY_NAME ".dll"); if (!FileAccess::exists(assembly_path)) @@ -647,14 +702,18 @@ Error GDMono::_unload_scripts_domain() { print_verbose("Mono: Unloading scripts domain..."); - _GodotSharp::get_singleton()->_dispose_callback(); - if (mono_domain_get() != root_domain) mono_domain_set(root_domain, true); mono_gc_collect(mono_gc_max_generation()); - mono_domain_finalize(scripts_domain, 2000); + finalizing_scripts_domain = true; + + if (!mono_domain_finalize(scripts_domain, 2000)) { + ERR_PRINT("Mono: Domain finalization timeout"); + } + + finalizing_scripts_domain = false; mono_gc_collect(mono_gc_max_generation()); @@ -672,8 +731,6 @@ Error GDMono::_unload_scripts_domain() { MonoDomain *domain = scripts_domain; scripts_domain = NULL; - _GodotSharp::get_singleton()->_dispose_callback(); - MonoException *exc = NULL; mono_domain_try_unload(domain, (MonoObject **)&exc); @@ -772,11 +829,13 @@ Error GDMono::finalize_and_unload_domain(MonoDomain *p_domain) { print_verbose("Mono: Unloading domain `" + domain_name + "`..."); - if (mono_domain_get() != root_domain) + if (mono_domain_get() == p_domain) mono_domain_set(root_domain, true); mono_gc_collect(mono_gc_max_generation()); - mono_domain_finalize(p_domain, 2000); + if (!mono_domain_finalize(p_domain, 2000)) { + ERR_PRINT("Mono: Domain finalization timeout"); + } mono_gc_collect(mono_gc_max_generation()); _domain_assemblies_cleanup(mono_domain_get_id(p_domain)); @@ -851,6 +910,7 @@ GDMono::GDMono() { gdmono_log = memnew(GDMonoLog); runtime_initialized = false; + finalizing_scripts_domain = false; root_domain = NULL; scripts_domain = NULL; @@ -917,29 +977,6 @@ GDMono::~GDMono() { _GodotSharp *_GodotSharp::singleton = NULL; -void _GodotSharp::_dispose_callback() { - -#ifndef NO_THREADS - queue_mutex->lock(); -#endif - - for (List<NodePath *>::Element *E = np_delete_queue.front(); E; E = E->next()) { - memdelete(E->get()); - } - - for (List<RID *>::Element *E = rid_delete_queue.front(); E; E = E->next()) { - memdelete(E->get()); - } - - np_delete_queue.clear(); - rid_delete_queue.clear(); - queue_empty = true; - -#ifndef NO_THREADS - queue_mutex->unlock(); -#endif -} - void _GodotSharp::attach_thread() { GDMonoUtils::attach_current_thread(); @@ -988,6 +1025,8 @@ bool _GodotSharp::is_domain_finalizing_for_unload(MonoDomain *p_domain) { if (!p_domain) return true; + if (p_domain == SCRIPTS_DOMAIN && GDMono::get_singleton()->is_finalizing_scripts_domain()) + return true; return mono_domain_is_unloading(p_domain); } @@ -1001,49 +1040,6 @@ bool _GodotSharp::is_runtime_initialized() { return GDMono::get_singleton()->is_runtime_initialized(); } -#define ENQUEUE_FOR_DISPOSAL(m_queue, m_inst) \ - m_queue.push_back(m_inst); \ - if (queue_empty) { \ - queue_empty = false; \ - if (!is_domain_finalizing_for_unload(SCRIPTS_DOMAIN)) { /* call_deferred may not be safe here */ \ - call_deferred("_dispose_callback"); \ - } \ - } - -void _GodotSharp::queue_dispose(NodePath *p_node_path) { - - if (GDMonoUtils::is_main_thread() && !is_domain_finalizing_for_unload(SCRIPTS_DOMAIN)) { - memdelete(p_node_path); - } else { -#ifndef NO_THREADS - queue_mutex->lock(); -#endif - - ENQUEUE_FOR_DISPOSAL(np_delete_queue, p_node_path); - -#ifndef NO_THREADS - queue_mutex->unlock(); -#endif - } -} - -void _GodotSharp::queue_dispose(RID *p_rid) { - - if (GDMonoUtils::is_main_thread() && !is_domain_finalizing_for_unload(SCRIPTS_DOMAIN)) { - memdelete(p_rid); - } else { -#ifndef NO_THREADS - queue_mutex->lock(); -#endif - - ENQUEUE_FOR_DISPOSAL(rid_delete_queue, p_rid); - -#ifndef NO_THREADS - queue_mutex->unlock(); -#endif - } -} - void _GodotSharp::_bind_methods() { ClassDB::bind_method(D_METHOD("attach_thread"), &_GodotSharp::attach_thread); @@ -1056,8 +1052,6 @@ void _GodotSharp::_bind_methods() { ClassDB::bind_method(D_METHOD("is_runtime_shutting_down"), &_GodotSharp::is_runtime_shutting_down); ClassDB::bind_method(D_METHOD("is_runtime_initialized"), &_GodotSharp::is_runtime_initialized); - - ClassDB::bind_method(D_METHOD("_dispose_callback"), &_GodotSharp::_dispose_callback); } _GodotSharp::_GodotSharp() { diff --git a/modules/mono/mono_gd/gd_mono.h b/modules/mono/mono_gd/gd_mono.h index 0c5503d28e..fd9551b6de 100644 --- a/modules/mono/mono_gd/gd_mono.h +++ b/modules/mono/mono_gd/gd_mono.h @@ -142,7 +142,7 @@ class GDMono { GDMonoLog *gdmono_log; -#ifdef WINDOWS_ENABLED +#if defined(WINDOWS_ENABLED) && defined(TOOLS_ENABLED) MonoRegInfo mono_reg_info; #endif @@ -172,6 +172,8 @@ public: _FORCE_INLINE_ bool is_runtime_initialized() const { return runtime_initialized && !mono_runtime_is_shutting_down() /* stays true after shutdown finished */; } + _FORCE_INLINE_ bool is_finalizing_scripts_domain() { return finalizing_scripts_domain; } + _FORCE_INLINE_ MonoDomain *get_scripts_domain() { return scripts_domain; } #ifdef TOOLS_ENABLED _FORCE_INLINE_ MonoDomain *get_tools_domain() { return tools_domain; } @@ -185,7 +187,7 @@ public: _FORCE_INLINE_ GDMonoAssembly *get_editor_tools_assembly() const { return editor_tools_assembly; } #endif -#ifdef WINDOWS_ENABLED +#if defined(WINDOWS_ENABLED) && defined(TOOLS_ENABLED) const MonoRegInfo &get_mono_reg_info() { return mono_reg_info; } #endif @@ -197,6 +199,8 @@ public: bool load_assembly(const String &p_name, GDMonoAssembly **r_assembly, bool p_refonly = false); bool load_assembly(const String &p_name, MonoAssemblyName *p_aname, GDMonoAssembly **r_assembly, bool p_refonly = false); + bool load_assembly_from(const String &p_name, const String &p_path, GDMonoAssembly **r_assembly, bool p_refonly = false); + Error finalize_and_unload_domain(MonoDomain *p_domain); void initialize(); @@ -205,12 +209,14 @@ public: ~GDMono(); }; -class GDMonoScopeDomain { +namespace gdmono { + +class ScopeDomain { MonoDomain *prev_domain; public: - GDMonoScopeDomain(MonoDomain *p_domain) { + ScopeDomain(MonoDomain *p_domain) { MonoDomain *prev_domain = mono_domain_get(); if (prev_domain != p_domain) { this->prev_domain = prev_domain; @@ -220,23 +226,41 @@ public: } } - ~GDMonoScopeDomain() { + ~ScopeDomain() { if (prev_domain) mono_domain_set(prev_domain, false); } }; -#define _GDMONO_SCOPE_DOMAIN_(m_mono_domain) \ - GDMonoScopeDomain __gdmono__scope__domain__(m_mono_domain); \ +class ScopeExitDomainUnload { + MonoDomain *domain; + +public: + ScopeExitDomainUnload(MonoDomain *p_domain) : + domain(p_domain) { + } + + ~ScopeExitDomainUnload() { + if (domain) + GDMono::get_singleton()->finalize_and_unload_domain(domain); + } +}; + +} // namespace gdmono + +#define _GDMONO_SCOPE_DOMAIN_(m_mono_domain) \ + gdmono::ScopeDomain __gdmono__scope__domain__(m_mono_domain); \ (void)__gdmono__scope__domain__; +#define _GDMONO_SCOPE_EXIT_DOMAIN_UNLOAD_(m_mono_domain) \ + gdmono::ScopeExitDomainUnload __gdmono__scope__exit__domain__unload__(m_mono_domain); \ + (void)__gdmono__scope__exit__domain__unload__; + class _GodotSharp : public Object { GDCLASS(_GodotSharp, Object) friend class GDMono; - void _dispose_callback(); - bool _is_domain_finalizing_for_unload(int32_t p_domain_id); List<NodePath *> np_delete_queue; @@ -270,9 +294,6 @@ public: bool is_runtime_shutting_down(); bool is_runtime_initialized(); - void queue_dispose(NodePath *p_node_path); - void queue_dispose(RID *p_rid); - _GodotSharp(); ~_GodotSharp(); }; diff --git a/modules/mono/mono_gd/gd_mono_assembly.cpp b/modules/mono/mono_gd/gd_mono_assembly.cpp index 27ce39b6d7..72b0204672 100644 --- a/modules/mono/mono_gd/gd_mono_assembly.cpp +++ b/modules/mono/mono_gd/gd_mono_assembly.cpp @@ -46,6 +46,29 @@ bool GDMonoAssembly::in_preload = false; Vector<String> GDMonoAssembly::search_dirs; +void GDMonoAssembly::fill_search_dirs(Vector<String> &r_search_dirs, const String &p_custom_config) { + + const char *rootdir = mono_assembly_getrootdir(); + if (rootdir) { + String framework_dir = String(rootdir).plus_file("mono").plus_file("4.5"); + r_search_dirs.push_back(framework_dir); + r_search_dirs.push_back(framework_dir.plus_file("Facades")); + } + + if (p_custom_config.length()) { + r_search_dirs.push_back(GodotSharpDirs::get_res_temp_assemblies_base_dir().plus_file(p_custom_config)); + } else { + r_search_dirs.push_back(GodotSharpDirs::get_res_temp_assemblies_dir()); + } + + r_search_dirs.push_back(GodotSharpDirs::get_res_assemblies_dir()); + r_search_dirs.push_back(OS::get_singleton()->get_resource_dir()); + r_search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir()); +#ifdef TOOLS_ENABLED + r_search_dirs.push_back(GodotSharpDirs::get_data_editor_tools_dir()); +#endif +} + void GDMonoAssembly::assembly_load_hook(MonoAssembly *assembly, void *user_data) { if (no_search) @@ -93,35 +116,7 @@ MonoAssembly *GDMonoAssembly::_search_hook(MonoAssemblyName *aname, void *user_d no_search = true; // Avoid the recursion madness - String path; - GDMonoAssembly *res = NULL; - - for (int i = 0; i < search_dirs.size(); i++) { - const String &search_dir = search_dirs[i]; - - if (has_extension) { - path = search_dir.plus_file(name); - if (FileAccess::exists(path)) { - res = _load_assembly_from(name.get_basename(), path, refonly); - if (res != NULL) - break; - } - } else { - path = search_dir.plus_file(name + ".dll"); - if (FileAccess::exists(path)) { - res = _load_assembly_from(name, path, refonly); - if (res != NULL) - break; - } - - path = search_dir.plus_file(name + ".exe"); - if (FileAccess::exists(path)) { - res = _load_assembly_from(name, path, refonly); - if (res != NULL) - break; - } - } - } + GDMonoAssembly *res = _load_assembly_search(name, search_dirs, refonly); no_search = false; @@ -130,31 +125,12 @@ MonoAssembly *GDMonoAssembly::_search_hook(MonoAssemblyName *aname, void *user_d static _THREAD_LOCAL_(MonoImage *) image_corlib_loading = NULL; -MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **assemblies_path, void *user_data, bool refonly) { +MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **, void *user_data, bool refonly) { (void)user_data; // UNUSED if (search_dirs.empty()) { - search_dirs.push_back(GodotSharpDirs::get_res_temp_assemblies_dir()); - search_dirs.push_back(GodotSharpDirs::get_res_assemblies_dir()); - search_dirs.push_back(OS::get_singleton()->get_resource_dir()); - search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir()); -#ifdef GD_MONO_EDITOR_ASSEMBLIES_DIR - search_dirs.push_back(OS::get_singleton()->get_executable_path().get_base_dir().plus_file(_MKSTR(GD_MONO_EDITOR_ASSEMBLIES_DIR)).simplify_path()); -#endif - - const char *rootdir = mono_assembly_getrootdir(); - if (rootdir) { - search_dirs.push_back(String(rootdir).plus_file("mono").plus_file("4.5")); - search_dirs.push_back(String(rootdir).plus_file("mono").plus_file("4.5").plus_file("Facades")); - } - - if (assemblies_path) { - while (*assemblies_path) { - search_dirs.push_back(*assemblies_path); - ++assemblies_path; - } - } + fill_search_dirs(search_dirs); } { @@ -188,27 +164,7 @@ MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **asse if (stored_assembly) return (*stored_assembly)->get_assembly(); - String path; - - for (int i = 0; i < search_dirs.size(); i++) { - const String &search_dir = search_dirs[i]; - - if (has_extension) { - path = search_dir.plus_file(name); - if (FileAccess::exists(path)) { - res = _load_assembly_from(name.get_basename(), path, refonly); - if (res != NULL) - break; - } - } else { - path = search_dir.plus_file(name + ".dll"); - if (FileAccess::exists(path)) { - res = _load_assembly_from(name, path, refonly); - if (res != NULL) - break; - } - } - } + res = _load_assembly_search("mscorlib.dll", search_dirs, refonly); } no_search = false; @@ -217,6 +173,43 @@ MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **asse return res ? res->get_assembly() : NULL; } +GDMonoAssembly *GDMonoAssembly::_load_assembly_search(const String &p_name, const Vector<String> &p_search_dirs, bool p_refonly) { + + GDMonoAssembly *res = NULL; + String path; + + bool has_extension = p_name.ends_with(".dll") || p_name.ends_with(".exe"); + + for (int i = 0; i < p_search_dirs.size(); i++) { + const String &search_dir = p_search_dirs[i]; + + if (has_extension) { + path = search_dir.plus_file(p_name); + if (FileAccess::exists(path)) { + res = _load_assembly_from(p_name.get_basename(), path, p_refonly); + if (res != NULL) + return res; + } + } else { + path = search_dir.plus_file(p_name + ".dll"); + if (FileAccess::exists(path)) { + res = _load_assembly_from(p_name, path, p_refonly); + if (res != NULL) + return res; + } + + path = search_dir.plus_file(p_name + ".exe"); + if (FileAccess::exists(path)) { + res = _load_assembly_from(p_name, path, p_refonly); + if (res != NULL) + return res; + } + } + } + + return NULL; +} + GDMonoAssembly *GDMonoAssembly::_load_assembly_from(const String &p_name, const String &p_path, bool p_refonly) { GDMonoAssembly *assembly = memnew(GDMonoAssembly(p_name, p_path)); @@ -469,11 +462,12 @@ GDMonoAssembly *GDMonoAssembly::load_from(const String &p_name, const String &p_ GDMonoAssembly **loaded_asm = GDMono::get_singleton()->get_loaded_assembly(p_name); if (loaded_asm) return *loaded_asm; - +#ifdef DEBUG_ENABLED + CRASH_COND(!FileAccess::exists(p_path)); +#endif no_search = true; GDMonoAssembly *res = _load_assembly_from(p_name, p_path, p_refonly); no_search = false; - return res; } diff --git a/modules/mono/mono_gd/gd_mono_assembly.h b/modules/mono/mono_gd/gd_mono_assembly.h index 0ba11ac412..2af40ec901 100644 --- a/modules/mono/mono_gd/gd_mono_assembly.h +++ b/modules/mono/mono_gd/gd_mono_assembly.h @@ -102,6 +102,7 @@ class GDMonoAssembly { static MonoAssembly *_preload_hook(MonoAssemblyName *aname, char **assemblies_path, void *user_data, bool refonly); static GDMonoAssembly *_load_assembly_from(const String &p_name, const String &p_path, bool p_refonly); + static GDMonoAssembly *_load_assembly_search(const String &p_name, const Vector<String> &p_search_dirs, bool p_refonly); static void _wrap_mono_assembly(MonoAssembly *assembly); friend class GDMono; @@ -125,6 +126,8 @@ public: GDMonoClass *get_object_derived_class(const StringName &p_class); + static void fill_search_dirs(Vector<String> &r_search_dirs, const String &p_custom_config = String()); + static GDMonoAssembly *load_from(const String &p_name, const String &p_path, bool p_refonly); GDMonoAssembly(const String &p_name, const String &p_path = String()); diff --git a/modules/mono/mono_gd/gd_mono_field.cpp b/modules/mono/mono_gd/gd_mono_field.cpp index d3a673dc1b..f09e93e662 100644 --- a/modules/mono/mono_gd/gd_mono_field.cpp +++ b/modules/mono/mono_gd/gd_mono_field.cpp @@ -40,65 +40,71 @@ void GDMonoField::set_value_raw(MonoObject *p_object, void *p_ptr) { } void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_value) { -#define SET_FROM_STRUCT_AND_BREAK(m_type) \ - { \ - const m_type &val = p_value.operator ::m_type(); \ - MARSHALLED_OUT(m_type, val, raw); \ - mono_field_set_value(p_object, mono_field, raw); \ - break; \ +#define SET_FROM_STRUCT(m_type) \ + { \ + GDMonoMarshal::M_##m_type from = MARSHALLED_OUT(m_type, p_value.operator ::m_type()); \ + mono_field_set_value(p_object, mono_field, &from); \ } -#define SET_FROM_PRIMITIVE(m_type) \ - { \ - m_type val = p_value.operator m_type(); \ - mono_field_set_value(p_object, mono_field, &val); \ - break; \ - } - -#define SET_FROM_ARRAY_AND_BREAK(m_type) \ - { \ - MonoArray *managed = GDMonoMarshal::m_type##_to_mono_array(p_value.operator m_type()); \ - mono_field_set_value(p_object, mono_field, &managed); \ - break; \ +#define SET_FROM_ARRAY(m_type) \ + { \ + MonoArray *managed = GDMonoMarshal::m_type##_to_mono_array(p_value.operator ::m_type()); \ + mono_field_set_value(p_object, mono_field, &managed); \ } switch (type.type_encoding) { case MONO_TYPE_BOOLEAN: { - SET_FROM_PRIMITIVE(bool); + MonoBoolean val = p_value.operator bool(); + mono_field_set_value(p_object, mono_field, &val); + } break; + + case MONO_TYPE_CHAR: { + int16_t val = p_value.operator unsigned short(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_I1: { - SET_FROM_PRIMITIVE(signed char); + int8_t val = p_value.operator signed char(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_I2: { - SET_FROM_PRIMITIVE(signed short); + int16_t val = p_value.operator signed short(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_I4: { - SET_FROM_PRIMITIVE(signed int); + int32_t val = p_value.operator signed int(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_I8: { - SET_FROM_PRIMITIVE(int64_t); + int64_t val = p_value.operator int64_t(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_U1: { - SET_FROM_PRIMITIVE(unsigned char); + uint8_t val = p_value.operator unsigned char(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_U2: { - SET_FROM_PRIMITIVE(unsigned short); + uint16_t val = p_value.operator unsigned short(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_U4: { - SET_FROM_PRIMITIVE(unsigned int); + uint32_t val = p_value.operator unsigned int(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_U8: { - SET_FROM_PRIMITIVE(uint64_t); + uint64_t val = p_value.operator uint64_t(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_R4: { - SET_FROM_PRIMITIVE(float); + float val = p_value.operator float(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_R8: { - SET_FROM_PRIMITIVE(double); + double val = p_value.operator double(); + mono_field_set_value(p_object, mono_field, &val); } break; case MONO_TYPE_STRING: { @@ -109,38 +115,117 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ case MONO_TYPE_VALUETYPE: { GDMonoClass *tclass = type.type_class; - if (tclass == CACHED_CLASS(Vector2)) - SET_FROM_STRUCT_AND_BREAK(Vector2); + if (tclass == CACHED_CLASS(Vector2)) { + SET_FROM_STRUCT(Vector2); + break; + } + + if (tclass == CACHED_CLASS(Rect2)) { + SET_FROM_STRUCT(Rect2); + break; + } - if (tclass == CACHED_CLASS(Rect2)) - SET_FROM_STRUCT_AND_BREAK(Rect2); + if (tclass == CACHED_CLASS(Transform2D)) { + SET_FROM_STRUCT(Transform2D); + break; + } - if (tclass == CACHED_CLASS(Transform2D)) - SET_FROM_STRUCT_AND_BREAK(Transform2D); + if (tclass == CACHED_CLASS(Vector3)) { + SET_FROM_STRUCT(Vector3); + break; + } - if (tclass == CACHED_CLASS(Vector3)) - SET_FROM_STRUCT_AND_BREAK(Vector3); + if (tclass == CACHED_CLASS(Basis)) { + SET_FROM_STRUCT(Basis); + break; + } - if (tclass == CACHED_CLASS(Basis)) - SET_FROM_STRUCT_AND_BREAK(Basis); + if (tclass == CACHED_CLASS(Quat)) { + SET_FROM_STRUCT(Quat); + break; + } - if (tclass == CACHED_CLASS(Quat)) - SET_FROM_STRUCT_AND_BREAK(Quat); + if (tclass == CACHED_CLASS(Transform)) { + SET_FROM_STRUCT(Transform); + break; + } - if (tclass == CACHED_CLASS(Transform)) - SET_FROM_STRUCT_AND_BREAK(Transform); + if (tclass == CACHED_CLASS(AABB)) { + SET_FROM_STRUCT(AABB); + break; + } - if (tclass == CACHED_CLASS(AABB)) - SET_FROM_STRUCT_AND_BREAK(AABB); + if (tclass == CACHED_CLASS(Color)) { + SET_FROM_STRUCT(Color); + break; + } - if (tclass == CACHED_CLASS(Color)) - SET_FROM_STRUCT_AND_BREAK(Color); + if (tclass == CACHED_CLASS(Plane)) { + SET_FROM_STRUCT(Plane); + break; + } - if (tclass == CACHED_CLASS(Plane)) - SET_FROM_STRUCT_AND_BREAK(Plane); + if (mono_class_is_enum(tclass->get_mono_ptr())) { + MonoType *enum_basetype = mono_class_enum_basetype(tclass->get_mono_ptr()); + switch (mono_type_get_type(enum_basetype)) { + case MONO_TYPE_BOOLEAN: { + MonoBoolean val = p_value.operator bool(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_CHAR: { + uint16_t val = p_value.operator unsigned short(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_I1: { + int8_t val = p_value.operator signed char(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_I2: { + int16_t val = p_value.operator signed short(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_I4: { + int32_t val = p_value.operator signed int(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_I8: { + int64_t val = p_value.operator int64_t(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_U1: { + uint8_t val = p_value.operator unsigned char(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_U2: { + uint16_t val = p_value.operator unsigned short(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_U4: { + uint32_t val = p_value.operator unsigned int(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + case MONO_TYPE_U8: { + uint64_t val = p_value.operator uint64_t(); + mono_field_set_value(p_object, mono_field, &val); + break; + } + default: { + ERR_EXPLAIN(String() + "Attempted to convert Variant to a managed enum value of unmarshallable base type."); + ERR_FAIL(); + } + } - if (mono_class_is_enum(tclass->get_mono_ptr())) - SET_FROM_PRIMITIVE(signed int); + break; + } ERR_EXPLAIN(String() + "Attempted to set the value of a field of unmarshallable type: " + tclass->get_name()); ERR_FAIL(); @@ -150,29 +235,45 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ case MONO_TYPE_SZARRAY: { MonoArrayType *array_type = mono_type_get_array_type(type.type_class->get_mono_type()); - if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) - SET_FROM_ARRAY_AND_BREAK(Array); + if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) { + SET_FROM_ARRAY(Array); + break; + } - if (array_type->eklass == CACHED_CLASS_RAW(uint8_t)) - SET_FROM_ARRAY_AND_BREAK(PoolByteArray); + if (array_type->eklass == CACHED_CLASS_RAW(uint8_t)) { + SET_FROM_ARRAY(PoolByteArray); + break; + } - if (array_type->eklass == CACHED_CLASS_RAW(int32_t)) - SET_FROM_ARRAY_AND_BREAK(PoolIntArray); + if (array_type->eklass == CACHED_CLASS_RAW(int32_t)) { + SET_FROM_ARRAY(PoolIntArray); + break; + } - if (array_type->eklass == REAL_T_MONOCLASS) - SET_FROM_ARRAY_AND_BREAK(PoolRealArray); + if (array_type->eklass == REAL_T_MONOCLASS) { + SET_FROM_ARRAY(PoolRealArray); + break; + } - if (array_type->eklass == CACHED_CLASS_RAW(String)) - SET_FROM_ARRAY_AND_BREAK(PoolStringArray); + if (array_type->eklass == CACHED_CLASS_RAW(String)) { + SET_FROM_ARRAY(PoolStringArray); + break; + } - if (array_type->eklass == CACHED_CLASS_RAW(Vector2)) - SET_FROM_ARRAY_AND_BREAK(PoolVector2Array); + if (array_type->eklass == CACHED_CLASS_RAW(Vector2)) { + SET_FROM_ARRAY(PoolVector2Array); + break; + } - if (array_type->eklass == CACHED_CLASS_RAW(Vector3)) - SET_FROM_ARRAY_AND_BREAK(PoolVector3Array); + if (array_type->eklass == CACHED_CLASS_RAW(Vector3)) { + SET_FROM_ARRAY(PoolVector3Array); + break; + } - if (array_type->eklass == CACHED_CLASS_RAW(Color)) - SET_FROM_ARRAY_AND_BREAK(PoolColorArray); + if (array_type->eklass == CACHED_CLASS_RAW(Color)) { + SET_FROM_ARRAY(PoolColorArray); + break; + } ERR_EXPLAIN(String() + "Attempted to convert Variant to a managed array of unmarshallable element type."); ERR_FAIL(); @@ -220,32 +321,56 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ // Variant switch (p_value.get_type()) { case Variant::BOOL: { - SET_FROM_PRIMITIVE(bool); + MonoBoolean val = p_value.operator bool(); + mono_field_set_value(p_object, mono_field, &val); } break; case Variant::INT: { - SET_FROM_PRIMITIVE(int); + int32_t val = p_value.operator signed int(); + mono_field_set_value(p_object, mono_field, &val); } break; case Variant::REAL: { #ifdef REAL_T_IS_DOUBLE - SET_FROM_PRIMITIVE(double); + double val = p_value.operator double(); + mono_field_set_value(p_object, mono_field, &val); #else - SET_FROM_PRIMITIVE(float); + float val = p_value.operator float(); + mono_field_set_value(p_object, mono_field, &val); #endif } break; case Variant::STRING: { MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value); mono_field_set_value(p_object, mono_field, mono_string); } break; - case Variant::VECTOR2: SET_FROM_STRUCT_AND_BREAK(Vector2); - case Variant::RECT2: SET_FROM_STRUCT_AND_BREAK(Rect2); - case Variant::VECTOR3: SET_FROM_STRUCT_AND_BREAK(Vector3); - case Variant::TRANSFORM2D: SET_FROM_STRUCT_AND_BREAK(Transform2D); - case Variant::PLANE: SET_FROM_STRUCT_AND_BREAK(Plane); - case Variant::QUAT: SET_FROM_STRUCT_AND_BREAK(Quat); - case Variant::AABB: SET_FROM_STRUCT_AND_BREAK(AABB); - case Variant::BASIS: SET_FROM_STRUCT_AND_BREAK(Basis); - case Variant::TRANSFORM: SET_FROM_STRUCT_AND_BREAK(Transform); - case Variant::COLOR: SET_FROM_STRUCT_AND_BREAK(Color); + case Variant::VECTOR2: { + SET_FROM_STRUCT(Vector2); + } break; + case Variant::RECT2: { + SET_FROM_STRUCT(Rect2); + } break; + case Variant::VECTOR3: { + SET_FROM_STRUCT(Vector3); + } break; + case Variant::TRANSFORM2D: { + SET_FROM_STRUCT(Transform2D); + } break; + case Variant::PLANE: { + SET_FROM_STRUCT(Plane); + } break; + case Variant::QUAT: { + SET_FROM_STRUCT(Quat); + } break; + case Variant::AABB: { + SET_FROM_STRUCT(AABB); + } break; + case Variant::BASIS: { + SET_FROM_STRUCT(Basis); + } break; + case Variant::TRANSFORM: { + SET_FROM_STRUCT(Transform); + } break; + case Variant::COLOR: { + SET_FROM_STRUCT(Color); + } break; case Variant::NODE_PATH: { MonoObject *managed = GDMonoUtils::create_managed_from(p_value.operator NodePath()); mono_field_set_value(p_object, mono_field, managed); @@ -267,14 +392,27 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ MonoObject *managed = GDMonoUtils::create_managed_from(p_value.operator Array(), CACHED_CLASS(Array)); mono_field_set_value(p_object, mono_field, managed); } break; - case Variant::POOL_BYTE_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolByteArray); - case Variant::POOL_INT_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolIntArray); - case Variant::POOL_REAL_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolRealArray); - case Variant::POOL_STRING_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolStringArray); - case Variant::POOL_VECTOR2_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolVector2Array); - case Variant::POOL_VECTOR3_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolVector3Array); - case Variant::POOL_COLOR_ARRAY: SET_FROM_ARRAY_AND_BREAK(PoolColorArray); -#undef SET_FROM_ARRAY_AND_BREAK + case Variant::POOL_BYTE_ARRAY: { + SET_FROM_ARRAY(PoolByteArray); + } break; + case Variant::POOL_INT_ARRAY: { + SET_FROM_ARRAY(PoolIntArray); + } break; + case Variant::POOL_REAL_ARRAY: { + SET_FROM_ARRAY(PoolRealArray); + } break; + case Variant::POOL_STRING_ARRAY: { + SET_FROM_ARRAY(PoolStringArray); + } break; + case Variant::POOL_VECTOR2_ARRAY: { + SET_FROM_ARRAY(PoolVector2Array); + } break; + case Variant::POOL_VECTOR3_ARRAY: { + SET_FROM_ARRAY(PoolVector3Array); + } break; + case Variant::POOL_COLOR_ARRAY: { + SET_FROM_ARRAY(PoolColorArray); + } break; default: break; } } break; @@ -285,7 +423,7 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ MonoException *exc = NULL; GDMonoUtils::IsDictionaryGenericType type_is_dict = CACHED_METHOD_THUNK(MarshalUtils, IsDictionaryGenericType); - MonoBoolean is_dict = type_is_dict((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_dict = invoke_method_thunk(type_is_dict, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_dict) { @@ -297,7 +435,7 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ exc = NULL; GDMonoUtils::IsArrayGenericType type_is_array = CACHED_METHOD_THUNK(MarshalUtils, IsArrayGenericType); - MonoBoolean is_array = type_is_array((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_array = invoke_method_thunk(type_is_array, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_array) { @@ -312,8 +450,8 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ } break; } +#undef SET_FROM_ARRAY_AND_BREAK #undef SET_FROM_STRUCT_AND_BREAK -#undef SET_FROM_PRIMITIVE } MonoObject *GDMonoField::get_value(MonoObject *p_object) { diff --git a/modules/mono/mono_gd/gd_mono_header.h b/modules/mono/mono_gd/gd_mono_header.h index 4f2efc7b92..51d0c9b356 100644 --- a/modules/mono/mono_gd/gd_mono_header.h +++ b/modules/mono/mono_gd/gd_mono_header.h @@ -55,14 +55,4 @@ struct ManagedType { } }; -typedef union { - uint32_t _uint32; - float _float; -} mono_float; - -typedef union { - uint64_t _uint64; - float _double; -} mono_double; - #endif // GD_MONO_HEADER_H diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp index de91e71bab..3f0a5d6e50 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.cpp +++ b/modules/mono/mono_gd/gd_mono_marshal.cpp @@ -35,20 +35,6 @@ namespace GDMonoMarshal { -#define RETURN_BOXED_STRUCT(m_t, m_var_in) \ - { \ - const m_t &m_in = m_var_in->operator ::m_t(); \ - MARSHALLED_OUT(m_t, m_in, raw); \ - return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(m_t), raw); \ - } - -#define RETURN_UNBOXED_STRUCT(m_t, m_var_in) \ - { \ - float *raw = (float *)mono_object_unbox(m_var_in); \ - MARSHALLED_IN(m_t, raw, ret); \ - return ret; \ - } - Variant::Type managed_to_variant_type(const ManagedType &p_type) { switch (p_type.type_encoding) { case MONO_TYPE_BOOLEAN: @@ -177,7 +163,7 @@ Variant::Type managed_to_variant_type(const ManagedType &p_type) { MonoException *exc = NULL; GDMonoUtils::IsDictionaryGenericType type_is_dict = CACHED_METHOD_THUNK(MarshalUtils, IsDictionaryGenericType); - MonoBoolean is_dict = type_is_dict((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_dict = invoke_method_thunk(type_is_dict, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_dict) { @@ -186,7 +172,7 @@ Variant::Type managed_to_variant_type(const ManagedType &p_type) { exc = NULL; GDMonoUtils::IsArrayGenericType type_is_array = CACHED_METHOD_THUNK(MarshalUtils, IsArrayGenericType); - MonoBoolean is_array = type_is_array((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_array = invoke_method_thunk(type_is_array, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_array) { @@ -206,8 +192,11 @@ String mono_to_utf8_string(MonoString *p_mono_string) { MonoError error; char *utf8 = mono_string_to_utf8_checked(p_mono_string, &error); - ERR_EXPLAIN("Conversion of MonoString to UTF8 failed."); - ERR_FAIL_COND_V(!mono_error_ok(&error), String()); + if (!mono_error_ok(&error)) { + ERR_PRINTS(String("Failed to convert MonoString* to UTF-8: ") + mono_error_get_message(&error)); + mono_error_cleanup(&error); + return String(); + } String ret = String::utf8(utf8); @@ -252,16 +241,21 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty return BOX_BOOLEAN(val); } + case MONO_TYPE_CHAR: { + uint16_t val = p_var->operator unsigned short(); + return BOX_UINT16(val); + } + case MONO_TYPE_I1: { - char val = p_var->operator signed char(); + int8_t val = p_var->operator signed char(); return BOX_INT8(val); } case MONO_TYPE_I2: { - short val = p_var->operator signed short(); + int16_t val = p_var->operator signed short(); return BOX_INT16(val); } case MONO_TYPE_I4: { - int val = p_var->operator signed int(); + int32_t val = p_var->operator signed int(); return BOX_INT32(val); } case MONO_TYPE_I8: { @@ -270,15 +264,15 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty } case MONO_TYPE_U1: { - char val = p_var->operator unsigned char(); + uint8_t val = p_var->operator unsigned char(); return BOX_UINT8(val); } case MONO_TYPE_U2: { - short val = p_var->operator unsigned short(); + uint16_t val = p_var->operator unsigned short(); return BOX_UINT16(val); } case MONO_TYPE_U4: { - int val = p_var->operator unsigned int(); + uint32_t val = p_var->operator unsigned int(); return BOX_UINT32(val); } case MONO_TYPE_U8: { @@ -302,39 +296,105 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty case MONO_TYPE_VALUETYPE: { GDMonoClass *tclass = p_type.type_class; - if (tclass == CACHED_CLASS(Vector2)) - RETURN_BOXED_STRUCT(Vector2, p_var); + if (tclass == CACHED_CLASS(Vector2)) { + GDMonoMarshal::M_Vector2 from = MARSHALLED_OUT(Vector2, p_var->operator ::Vector2()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Vector2), &from); + } - if (tclass == CACHED_CLASS(Rect2)) - RETURN_BOXED_STRUCT(Rect2, p_var); + if (tclass == CACHED_CLASS(Rect2)) { + GDMonoMarshal::M_Rect2 from = MARSHALLED_OUT(Rect2, p_var->operator ::Rect2()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Rect2), &from); + } - if (tclass == CACHED_CLASS(Transform2D)) - RETURN_BOXED_STRUCT(Transform2D, p_var); + if (tclass == CACHED_CLASS(Transform2D)) { + GDMonoMarshal::M_Transform2D from = MARSHALLED_OUT(Transform2D, p_var->operator ::Transform2D()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Transform2D), &from); + } - if (tclass == CACHED_CLASS(Vector3)) - RETURN_BOXED_STRUCT(Vector3, p_var); + if (tclass == CACHED_CLASS(Vector3)) { + GDMonoMarshal::M_Vector3 from = MARSHALLED_OUT(Vector3, p_var->operator ::Vector3()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Vector3), &from); + } - if (tclass == CACHED_CLASS(Basis)) - RETURN_BOXED_STRUCT(Basis, p_var); + if (tclass == CACHED_CLASS(Basis)) { + GDMonoMarshal::M_Basis from = MARSHALLED_OUT(Basis, p_var->operator ::Basis()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Basis), &from); + } - if (tclass == CACHED_CLASS(Quat)) - RETURN_BOXED_STRUCT(Quat, p_var); + if (tclass == CACHED_CLASS(Quat)) { + GDMonoMarshal::M_Quat from = MARSHALLED_OUT(Quat, p_var->operator ::Quat()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Quat), &from); + } - if (tclass == CACHED_CLASS(Transform)) - RETURN_BOXED_STRUCT(Transform, p_var); + if (tclass == CACHED_CLASS(Transform)) { + GDMonoMarshal::M_Transform from = MARSHALLED_OUT(Transform, p_var->operator ::Transform()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Transform), &from); + } - if (tclass == CACHED_CLASS(AABB)) - RETURN_BOXED_STRUCT(AABB, p_var); + if (tclass == CACHED_CLASS(AABB)) { + GDMonoMarshal::M_AABB from = MARSHALLED_OUT(AABB, p_var->operator ::AABB()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(AABB), &from); + } - if (tclass == CACHED_CLASS(Color)) - RETURN_BOXED_STRUCT(Color, p_var); + if (tclass == CACHED_CLASS(Color)) { + GDMonoMarshal::M_Color from = MARSHALLED_OUT(Color, p_var->operator ::Color()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Color), &from); + } - if (tclass == CACHED_CLASS(Plane)) - RETURN_BOXED_STRUCT(Plane, p_var); + if (tclass == CACHED_CLASS(Plane)) { + GDMonoMarshal::M_Plane from = MARSHALLED_OUT(Plane, p_var->operator ::Plane()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Plane), &from); + } if (mono_class_is_enum(tclass->get_mono_ptr())) { - int val = p_var->operator signed int(); - return BOX_ENUM(tclass->get_mono_ptr(), val); + MonoType *enum_basetype = mono_class_enum_basetype(tclass->get_mono_ptr()); + MonoClass *enum_baseclass = mono_class_from_mono_type(enum_basetype); + switch (mono_type_get_type(enum_basetype)) { + case MONO_TYPE_BOOLEAN: { + MonoBoolean val = p_var->operator bool(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_CHAR: { + uint16_t val = p_var->operator unsigned short(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_I1: { + int8_t val = p_var->operator signed char(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_I2: { + int16_t val = p_var->operator signed short(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_I4: { + int32_t val = p_var->operator signed int(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_I8: { + int64_t val = p_var->operator int64_t(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_U1: { + uint8_t val = p_var->operator unsigned char(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_U2: { + uint16_t val = p_var->operator unsigned short(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_U4: { + uint32_t val = p_var->operator unsigned int(); + return BOX_ENUM(enum_baseclass, val); + } + case MONO_TYPE_U8: { + uint64_t val = p_var->operator uint64_t(); + return BOX_ENUM(enum_baseclass, val); + } + default: { + ERR_EXPLAIN(String() + "Attempted to convert Variant to a managed enum value of unmarshallable base type."); + ERR_FAIL_V(NULL); + } + } } } break; @@ -402,7 +462,7 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty return BOX_BOOLEAN(val); } case Variant::INT: { - int val = p_var->operator signed int(); + int32_t val = p_var->operator signed int(); return BOX_INT32(val); } case Variant::REAL: { @@ -416,33 +476,52 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty } case Variant::STRING: return (MonoObject *)mono_string_from_godot(p_var->operator String()); - case Variant::VECTOR2: - RETURN_BOXED_STRUCT(Vector2, p_var); - case Variant::RECT2: - RETURN_BOXED_STRUCT(Rect2, p_var); - case Variant::VECTOR3: - RETURN_BOXED_STRUCT(Vector3, p_var); - case Variant::TRANSFORM2D: - RETURN_BOXED_STRUCT(Transform2D, p_var); - case Variant::PLANE: - RETURN_BOXED_STRUCT(Plane, p_var); - case Variant::QUAT: - RETURN_BOXED_STRUCT(Quat, p_var); - case Variant::AABB: - RETURN_BOXED_STRUCT(AABB, p_var); - case Variant::BASIS: - RETURN_BOXED_STRUCT(Basis, p_var); - case Variant::TRANSFORM: - RETURN_BOXED_STRUCT(Transform, p_var); - case Variant::COLOR: - RETURN_BOXED_STRUCT(Color, p_var); + case Variant::VECTOR2: { + GDMonoMarshal::M_Vector2 from = MARSHALLED_OUT(Vector2, p_var->operator ::Vector2()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Vector2), &from); + } + case Variant::RECT2: { + GDMonoMarshal::M_Rect2 from = MARSHALLED_OUT(Rect2, p_var->operator ::Rect2()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Rect2), &from); + } + case Variant::VECTOR3: { + GDMonoMarshal::M_Vector3 from = MARSHALLED_OUT(Vector3, p_var->operator ::Vector3()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Vector3), &from); + } + case Variant::TRANSFORM2D: { + GDMonoMarshal::M_Transform2D from = MARSHALLED_OUT(Transform2D, p_var->operator ::Transform2D()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Transform2D), &from); + } + case Variant::PLANE: { + GDMonoMarshal::M_Plane from = MARSHALLED_OUT(Plane, p_var->operator ::Plane()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Plane), &from); + } + case Variant::QUAT: { + GDMonoMarshal::M_Quat from = MARSHALLED_OUT(Quat, p_var->operator ::Quat()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Quat), &from); + } + case Variant::AABB: { + GDMonoMarshal::M_AABB from = MARSHALLED_OUT(AABB, p_var->operator ::AABB()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(AABB), &from); + } + case Variant::BASIS: { + GDMonoMarshal::M_Basis from = MARSHALLED_OUT(Basis, p_var->operator ::Basis()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Basis), &from); + } + case Variant::TRANSFORM: { + GDMonoMarshal::M_Transform from = MARSHALLED_OUT(Transform, p_var->operator ::Transform()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Transform), &from); + } + case Variant::COLOR: { + GDMonoMarshal::M_Color from = MARSHALLED_OUT(Color, p_var->operator ::Color()); + return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Color), &from); + } case Variant::NODE_PATH: return GDMonoUtils::create_managed_from(p_var->operator NodePath()); case Variant::_RID: return GDMonoUtils::create_managed_from(p_var->operator RID()); - case Variant::OBJECT: { + case Variant::OBJECT: return GDMonoUtils::unmanaged_get_managed(p_var->operator Object *()); - } case Variant::DICTIONARY: return GDMonoUtils::create_managed_from(p_var->operator Dictionary(), CACHED_CLASS(Dictionary)); case Variant::ARRAY: @@ -470,7 +549,7 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty MonoException *exc = NULL; GDMonoUtils::IsDictionaryGenericType type_is_dict = CACHED_METHOD_THUNK(MarshalUtils, IsDictionaryGenericType); - MonoBoolean is_dict = type_is_dict((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_dict = invoke_method_thunk(type_is_dict, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_dict) { @@ -479,7 +558,7 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty exc = NULL; GDMonoUtils::IsArrayGenericType type_is_array = CACHED_METHOD_THUNK(MarshalUtils, IsArrayGenericType); - MonoBoolean is_array = type_is_array((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_array = invoke_method_thunk(type_is_array, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_array) { @@ -512,6 +591,9 @@ Variant mono_object_to_variant(MonoObject *p_obj) { case MONO_TYPE_BOOLEAN: return (bool)unbox<MonoBoolean>(p_obj); + case MONO_TYPE_CHAR: + return unbox<uint16_t>(p_obj); + case MONO_TYPE_I1: return unbox<int8_t>(p_obj); case MONO_TYPE_I2: @@ -545,34 +627,34 @@ Variant mono_object_to_variant(MonoObject *p_obj) { GDMonoClass *tclass = type.type_class; if (tclass == CACHED_CLASS(Vector2)) - RETURN_UNBOXED_STRUCT(Vector2, p_obj); + return MARSHALLED_IN(Vector2, (GDMonoMarshal::M_Vector2 *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Rect2)) - RETURN_UNBOXED_STRUCT(Rect2, p_obj); + return MARSHALLED_IN(Rect2, (GDMonoMarshal::M_Rect2 *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Transform2D)) - RETURN_UNBOXED_STRUCT(Transform2D, p_obj); + return MARSHALLED_IN(Transform2D, (GDMonoMarshal::M_Transform2D *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Vector3)) - RETURN_UNBOXED_STRUCT(Vector3, p_obj); + return MARSHALLED_IN(Vector3, (GDMonoMarshal::M_Vector3 *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Basis)) - RETURN_UNBOXED_STRUCT(Basis, p_obj); + return MARSHALLED_IN(Basis, (GDMonoMarshal::M_Basis *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Quat)) - RETURN_UNBOXED_STRUCT(Quat, p_obj); + return MARSHALLED_IN(Quat, (GDMonoMarshal::M_Quat *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Transform)) - RETURN_UNBOXED_STRUCT(Transform, p_obj); + return MARSHALLED_IN(Transform, (GDMonoMarshal::M_Transform *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(AABB)) - RETURN_UNBOXED_STRUCT(AABB, p_obj); + return MARSHALLED_IN(AABB, (GDMonoMarshal::M_AABB *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Color)) - RETURN_UNBOXED_STRUCT(Color, p_obj); + return MARSHALLED_IN(Color, (GDMonoMarshal::M_Color *)mono_object_unbox(p_obj)); if (tclass == CACHED_CLASS(Plane)) - RETURN_UNBOXED_STRUCT(Plane, p_obj); + return MARSHALLED_IN(Plane, (GDMonoMarshal::M_Plane *)mono_object_unbox(p_obj)); if (mono_class_is_enum(tclass->get_mono_ptr())) return unbox<int32_t>(p_obj); @@ -631,16 +713,14 @@ Variant mono_object_to_variant(MonoObject *p_obj) { if (CACHED_CLASS(Array) == type_class) { MonoException *exc = NULL; - GDMonoUtils::Array_GetPtr get_ptr = CACHED_METHOD_THUNK(Array, GetPtr); - Array *ptr = get_ptr(p_obj, (MonoObject **)&exc); + Array *ptr = invoke_method_thunk(CACHED_METHOD_THUNK(Array, GetPtr), p_obj, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); return ptr ? Variant(*ptr) : Variant(); } if (CACHED_CLASS(Dictionary) == type_class) { MonoException *exc = NULL; - GDMonoUtils::Dictionary_GetPtr get_ptr = CACHED_METHOD_THUNK(Dictionary, GetPtr); - Dictionary *ptr = get_ptr(p_obj, (MonoObject **)&exc); + Dictionary *ptr = invoke_method_thunk(CACHED_METHOD_THUNK(Dictionary, GetPtr), p_obj, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); return ptr ? Variant(*ptr) : Variant(); } @@ -652,7 +732,7 @@ Variant mono_object_to_variant(MonoObject *p_obj) { MonoException *exc = NULL; GDMonoUtils::IsDictionaryGenericType type_is_dict = CACHED_METHOD_THUNK(MarshalUtils, IsDictionaryGenericType); - MonoBoolean is_dict = type_is_dict((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_dict = invoke_method_thunk(type_is_dict, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_dict) { @@ -665,7 +745,7 @@ Variant mono_object_to_variant(MonoObject *p_obj) { exc = NULL; GDMonoUtils::IsArrayGenericType type_is_array = CACHED_METHOD_THUNK(MarshalUtils, IsArrayGenericType); - MonoBoolean is_array = type_is_array((MonoObject *)reftype, (MonoObject **)&exc); + MonoBoolean is_array = invoke_method_thunk(type_is_array, (MonoObject *)reftype, (MonoObject **)&exc); UNLIKELY_UNHANDLED_EXCEPTION(exc); if (is_array) { @@ -708,13 +788,13 @@ Array mono_array_to_Array(MonoArray *p_array) { return ret; } -// TODO Optimize reading/writing from/to PoolArrays - MonoArray *PoolIntArray_to_mono_array(const PoolIntArray &p_array) { + PoolIntArray::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(int32_t), p_array.size()); for (int i = 0; i < p_array.size(); i++) { - mono_array_set(ret, int32_t, i, p_array[i]); + mono_array_set(ret, int32_t, i, r[i]); } return ret; @@ -726,19 +806,22 @@ PoolIntArray mono_array_to_PoolIntArray(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolIntArray::Write w = ret.write(); + for (int i = 0; i < length; i++) { - int32_t elem = mono_array_get(p_array, int32_t, i); - ret.set(i, elem); + w[i] = mono_array_get(p_array, int32_t, i); } return ret; } MonoArray *PoolByteArray_to_mono_array(const PoolByteArray &p_array) { + PoolByteArray::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(uint8_t), p_array.size()); for (int i = 0; i < p_array.size(); i++) { - mono_array_set(ret, uint8_t, i, p_array[i]); + mono_array_set(ret, uint8_t, i, r[i]); } return ret; @@ -750,20 +833,22 @@ PoolByteArray mono_array_to_PoolByteArray(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolByteArray::Write w = ret.write(); for (int i = 0; i < length; i++) { - uint8_t elem = mono_array_get(p_array, uint8_t, i); - ret.set(i, elem); + w[i] = mono_array_get(p_array, uint8_t, i); } return ret; } MonoArray *PoolRealArray_to_mono_array(const PoolRealArray &p_array) { + PoolRealArray::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), REAL_T_MONOCLASS, p_array.size()); for (int i = 0; i < p_array.size(); i++) { - mono_array_set(ret, real_t, i, p_array[i]); + mono_array_set(ret, real_t, i, r[i]); } return ret; @@ -775,20 +860,22 @@ PoolRealArray mono_array_to_PoolRealArray(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolRealArray::Write w = ret.write(); for (int i = 0; i < length; i++) { - real_t elem = mono_array_get(p_array, real_t, i); - ret.set(i, elem); + w[i] = mono_array_get(p_array, real_t, i); } return ret; } MonoArray *PoolStringArray_to_mono_array(const PoolStringArray &p_array) { + PoolStringArray::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(String), p_array.size()); for (int i = 0; i < p_array.size(); i++) { - MonoString *boxed = mono_string_from_godot(p_array[i]); + MonoString *boxed = mono_string_from_godot(r[i]); mono_array_set(ret, MonoString *, i, boxed); } @@ -801,29 +888,24 @@ PoolStringArray mono_array_to_PoolStringArray(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolStringArray::Write w = ret.write(); for (int i = 0; i < length; i++) { MonoString *elem = mono_array_get(p_array, MonoString *, i); - ret.set(i, mono_string_to_godot(elem)); + w[i] = mono_string_to_godot(elem); } return ret; } MonoArray *PoolColorArray_to_mono_array(const PoolColorArray &p_array) { + PoolColorArray::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Color), p_array.size()); for (int i = 0; i < p_array.size(); i++) { -#ifdef YOLOCOPY - mono_array_set(ret, Color, i, p_array[i]); -#else - real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 4, i); - const Color &elem = p_array[i]; - raw[0] = elem.r; - raw[1] = elem.g; - raw[2] = elem.b; - raw[3] = elem.a; -#endif + M_Color *raw = (M_Color *)mono_array_addr_with_size(ret, sizeof(M_Color), i); + *raw = MARSHALLED_OUT(Color, r[i]); } return ret; @@ -835,28 +917,23 @@ PoolColorArray mono_array_to_PoolColorArray(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolColorArray::Write w = ret.write(); for (int i = 0; i < length; i++) { - real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 4, i); - MARSHALLED_IN(Color, raw_elem, elem); - ret.set(i, elem); + w[i] = MARSHALLED_IN(Color, (M_Color *)mono_array_addr_with_size(p_array, sizeof(M_Color), i)); } return ret; } MonoArray *PoolVector2Array_to_mono_array(const PoolVector2Array &p_array) { + PoolVector2Array::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Vector2), p_array.size()); for (int i = 0; i < p_array.size(); i++) { -#ifdef YOLOCOPY - mono_array_set(ret, Vector2, i, p_array[i]); -#else - real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 2, i); - const Vector2 &elem = p_array[i]; - raw[0] = elem.x; - raw[1] = elem.y; -#endif + M_Vector2 *raw = (M_Vector2 *)mono_array_addr_with_size(ret, sizeof(M_Vector2), i); + *raw = MARSHALLED_OUT(Vector2, r[i]); } return ret; @@ -868,29 +945,23 @@ PoolVector2Array mono_array_to_PoolVector2Array(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolVector2Array::Write w = ret.write(); for (int i = 0; i < length; i++) { - real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 2, i); - MARSHALLED_IN(Vector2, raw_elem, elem); - ret.set(i, elem); + w[i] = MARSHALLED_IN(Vector2, (M_Vector2 *)mono_array_addr_with_size(p_array, sizeof(M_Vector2), i)); } return ret; } MonoArray *PoolVector3Array_to_mono_array(const PoolVector3Array &p_array) { + PoolVector3Array::Read r = p_array.read(); + MonoArray *ret = mono_array_new(mono_domain_get(), CACHED_CLASS_RAW(Vector3), p_array.size()); for (int i = 0; i < p_array.size(); i++) { -#ifdef YOLOCOPY - mono_array_set(ret, Vector3, i, p_array[i]); -#else - real_t *raw = (real_t *)mono_array_addr_with_size(ret, sizeof(real_t) * 3, i); - const Vector3 &elem = p_array[i]; - raw[0] = elem.x; - raw[1] = elem.y; - raw[2] = elem.z; -#endif + M_Vector3 *raw = (M_Vector3 *)mono_array_addr_with_size(ret, sizeof(M_Vector3), i); + *raw = MARSHALLED_OUT(Vector3, r[i]); } return ret; @@ -902,11 +973,10 @@ PoolVector3Array mono_array_to_PoolVector3Array(MonoArray *p_array) { return ret; int length = mono_array_length(p_array); ret.resize(length); + PoolVector3Array::Write w = ret.write(); for (int i = 0; i < length; i++) { - real_t *raw_elem = (real_t *)mono_array_addr_with_size(p_array, sizeof(real_t) * 3, i); - MARSHALLED_IN(Vector3, raw_elem, elem); - ret.set(i, elem); + w[i] = MARSHALLED_IN(Vector3, (M_Vector3 *)mono_array_addr_with_size(p_array, sizeof(M_Vector3), i)); } return ret; diff --git a/modules/mono/mono_gd/gd_mono_marshal.h b/modules/mono/mono_gd/gd_mono_marshal.h index cc0ab5fa05..4002f2a225 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.h +++ b/modules/mono/mono_gd/gd_mono_marshal.h @@ -147,78 +147,271 @@ PoolVector2Array mono_array_to_PoolVector2Array(MonoArray *p_array); MonoArray *PoolVector3Array_to_mono_array(const PoolVector3Array &p_array); PoolVector3Array mono_array_to_PoolVector3Array(MonoArray *p_array); -#ifdef YOLO_COPY -#define MARSHALLED_OUT(m_t, m_in, m_out) m_t *m_out = (m_t *)&m_in; -#define MARSHALLED_IN(m_t, m_in, m_out) m_t m_out = *reinterpret_cast<m_t *>(m_in); +// Structures + +namespace InteropLayout { + +enum { + MATCHES_float = (sizeof(float) == sizeof(uint32_t)), + + MATCHES_double = (sizeof(double) == sizeof(uint64_t)), + +#ifdef REAL_T_IS_DOUBLE + MATCHES_real_t = (sizeof(real_t) == sizeof(uint64_t)), #else + MATCHES_real_t = (sizeof(real_t) == sizeof(uint32_t)), +#endif -// Expects m_in to be of type float* + MATCHES_Vector2 = (MATCHES_real_t && (sizeof(Vector2) == (sizeof(real_t) * 2)) && + offsetof(Vector2, x) == (sizeof(real_t) * 0) && + offsetof(Vector2, y) == (sizeof(real_t) * 1)), -#define MARSHALLED_OUT(m_t, m_in, m_out) MARSHALLED_OUT_##m_t(m_in, m_out) -#define MARSHALLED_IN(m_t, m_in, m_out) MARSHALLED_IN_##m_t(m_in, m_out) + MATCHES_Rect2 = (MATCHES_Vector2 && (sizeof(Rect2) == (sizeof(Vector2) * 2)) && + offsetof(Rect2, position) == (sizeof(Vector2) * 0) && + offsetof(Rect2, size) == (sizeof(Vector2) * 1)), -// Vector2 + MATCHES_Transform2D = (MATCHES_Vector2 && (sizeof(Transform2D) == (sizeof(Vector2) * 3))), // No field offset required, it stores an array -#define MARSHALLED_OUT_Vector2(m_in, m_out) real_t m_out[2] = { m_in.x, m_in.y }; -#define MARSHALLED_IN_Vector2(m_in, m_out) Vector2 m_out(m_in[0], m_in[1]); + MATCHES_Vector3 = (MATCHES_real_t && (sizeof(Vector3) == (sizeof(real_t) * 3)) && + offsetof(Vector3, x) == (sizeof(real_t) * 0) && + offsetof(Vector3, y) == (sizeof(real_t) * 1) && + offsetof(Vector3, z) == (sizeof(real_t) * 2)), -// Rect2 + MATCHES_Basis = (MATCHES_Vector3 && (sizeof(Basis) == (sizeof(Vector3) * 3))), // No field offset required, it stores an array -#define MARSHALLED_OUT_Rect2(m_in, m_out) real_t m_out[4] = { m_in.position.x, m_in.position.y, m_in.size.width, m_in.size.height }; -#define MARSHALLED_IN_Rect2(m_in, m_out) Rect2 m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + MATCHES_Quat = (MATCHES_real_t && (sizeof(Quat) == (sizeof(real_t) * 4)) && + offsetof(Quat, x) == (sizeof(real_t) * 0) && + offsetof(Quat, y) == (sizeof(real_t) * 1) && + offsetof(Quat, z) == (sizeof(real_t) * 2) && + offsetof(Quat, w) == (sizeof(real_t) * 3)), -// Transform2D + MATCHES_Transform = (MATCHES_Basis && MATCHES_Vector3 && (sizeof(Transform) == (sizeof(Basis) + sizeof(Vector3))) && + offsetof(Transform, basis) == 0 && + offsetof(Transform, origin) == sizeof(Basis)), -#define MARSHALLED_OUT_Transform2D(m_in, m_out) real_t m_out[6] = { m_in[0].x, m_in[0].y, m_in[1].x, m_in[1].y, m_in[2].x, m_in[2].y }; -#define MARSHALLED_IN_Transform2D(m_in, m_out) Transform2D m_out(m_in[0], m_in[1], m_in[2], m_in[3], m_in[4], m_in[5]); + MATCHES_AABB = (MATCHES_Vector3 && (sizeof(AABB) == (sizeof(Vector3) * 2)) && + offsetof(AABB, position) == (sizeof(Vector3) * 0) && + offsetof(AABB, size) == (sizeof(Vector3) * 1)), -// Vector3 + MATCHES_Color = (MATCHES_float && (sizeof(Color) == (sizeof(float) * 4)) && + offsetof(Color, r) == (sizeof(float) * 0) && + offsetof(Color, g) == (sizeof(float) * 1) && + offsetof(Color, b) == (sizeof(float) * 2) && + offsetof(Color, a) == (sizeof(float) * 3)), + + MATCHES_Plane = (MATCHES_Vector3 && MATCHES_real_t && (sizeof(Plane) == (sizeof(Vector3) + sizeof(real_t))) && + offsetof(Plane, normal) == 0 && + offsetof(Plane, d) == sizeof(Vector3)) +}; + +// In the future we may force this if we want to ref return these structs +#ifdef GD_MONO_FORCE_INTEROP_STRUCT_COPY +// Sometimes clang-format can be an ass +GD_STATIC_ASSERT(MATCHES_Vector2 &&MATCHES_Rect2 &&MATCHES_Transform2D &&MATCHES_Vector3 && + MATCHES_Basis &&MATCHES_Quat &&MATCHES_Transform &&MATCHES_AABB &&MATCHES_Color &&MATCHES_Plane); +#endif -#define MARSHALLED_OUT_Vector3(m_in, m_out) real_t m_out[3] = { m_in.x, m_in.y, m_in.z }; -#define MARSHALLED_IN_Vector3(m_in, m_out) Vector3 m_out(m_in[0], m_in[1], m_in[2]); +} // namespace InteropLayout -// Basis +#pragma pack(push, 1) -#define MARSHALLED_OUT_Basis(m_in, m_out) real_t m_out[9] = { \ - m_in[0].x, m_in[0].y, m_in[0].z, \ - m_in[1].x, m_in[1].y, m_in[1].z, \ - m_in[2].x, m_in[2].y, m_in[2].z \ +struct M_Vector2 { + real_t x, y; + + static _FORCE_INLINE_ Vector2 convert_to(const M_Vector2 &p_from) { + return Vector2(p_from.x, p_from.y); + } + + static _FORCE_INLINE_ M_Vector2 convert_from(const Vector2 &p_from) { + M_Vector2 ret = { p_from.x, p_from.y }; + return ret; + } }; -#define MARSHALLED_IN_Basis(m_in, m_out) Basis m_out(m_in[0], m_in[1], m_in[2], m_in[3], m_in[4], m_in[5], m_in[6], m_in[7], m_in[8]); -// Quat +struct M_Rect2 { + M_Vector2 position; + M_Vector2 size; -#define MARSHALLED_OUT_Quat(m_in, m_out) real_t m_out[4] = { m_in.x, m_in.y, m_in.z, m_in.w }; -#define MARSHALLED_IN_Quat(m_in, m_out) Quat m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + static _FORCE_INLINE_ Rect2 convert_to(const M_Rect2 &p_from) { + return Rect2(M_Vector2::convert_to(p_from.position), + M_Vector2::convert_to(p_from.size)); + } -// Transform + static _FORCE_INLINE_ M_Rect2 convert_from(const Rect2 &p_from) { + M_Rect2 ret = { M_Vector2::convert_from(p_from.position), M_Vector2::convert_from(p_from.size) }; + return ret; + } +}; -#define MARSHALLED_OUT_Transform(m_in, m_out) real_t m_out[12] = { \ - m_in.basis[0].x, m_in.basis[0].y, m_in.basis[0].z, \ - m_in.basis[1].x, m_in.basis[1].y, m_in.basis[1].z, \ - m_in.basis[2].x, m_in.basis[2].y, m_in.basis[2].z, \ - m_in.origin.x, m_in.origin.y, m_in.origin.z \ +struct M_Transform2D { + M_Vector2 elements[3]; + + static _FORCE_INLINE_ Transform2D convert_to(const M_Transform2D &p_from) { + return Transform2D(p_from.elements[0].x, p_from.elements[0].y, + p_from.elements[1].x, p_from.elements[1].y, + p_from.elements[2].x, p_from.elements[2].y); + } + + static _FORCE_INLINE_ M_Transform2D convert_from(const Transform2D &p_from) { + M_Transform2D ret = { + M_Vector2::convert_from(p_from.elements[0]), + M_Vector2::convert_from(p_from.elements[1]), + M_Vector2::convert_from(p_from.elements[2]) + }; + return ret; + } }; -#define MARSHALLED_IN_Transform(m_in, m_out) Transform m_out( \ - Basis(m_in[0], m_in[1], m_in[2], m_in[3], m_in[4], m_in[5], m_in[6], m_in[7], m_in[8]), \ - Vector3(m_in[9], m_in[10], m_in[11])); -// AABB +struct M_Vector3 { + real_t x, y, z; + + static _FORCE_INLINE_ Vector3 convert_to(const M_Vector3 &p_from) { + return Vector3(p_from.x, p_from.y, p_from.z); + } -#define MARSHALLED_OUT_AABB(m_in, m_out) real_t m_out[6] = { m_in.position.x, m_in.position.y, m_in.position.z, m_in.size.x, m_in.size.y, m_in.size.z }; -#define MARSHALLED_IN_AABB(m_in, m_out) AABB m_out(Vector3(m_in[0], m_in[1], m_in[2]), Vector3(m_in[3], m_in[4], m_in[5])); + static _FORCE_INLINE_ M_Vector3 convert_from(const Vector3 &p_from) { + M_Vector3 ret = { p_from.x, p_from.y, p_from.z }; + return ret; + } +}; -// Color +struct M_Basis { + M_Vector3 elements[3]; + + static _FORCE_INLINE_ Basis convert_to(const M_Basis &p_from) { + return Basis(M_Vector3::convert_to(p_from.elements[0]), + M_Vector3::convert_to(p_from.elements[1]), + M_Vector3::convert_to(p_from.elements[2])); + } + + static _FORCE_INLINE_ M_Basis convert_from(const Basis &p_from) { + M_Basis ret = { + M_Vector3::convert_from(p_from.elements[0]), + M_Vector3::convert_from(p_from.elements[1]), + M_Vector3::convert_from(p_from.elements[2]) + }; + return ret; + } +}; -#define MARSHALLED_OUT_Color(m_in, m_out) real_t m_out[4] = { m_in.r, m_in.g, m_in.b, m_in.a }; -#define MARSHALLED_IN_Color(m_in, m_out) Color m_out(m_in[0], m_in[1], m_in[2], m_in[3]); +struct M_Quat { + real_t x, y, z, w; -// Plane + static _FORCE_INLINE_ Quat convert_to(const M_Quat &p_from) { + return Quat(p_from.x, p_from.y, p_from.z, p_from.w); + } -#define MARSHALLED_OUT_Plane(m_in, m_out) real_t m_out[4] = { m_in.normal.x, m_in.normal.y, m_in.normal.z, m_in.d }; -#define MARSHALLED_IN_Plane(m_in, m_out) Plane m_out(m_in[0], m_in[1], m_in[2], m_in[3]); + static _FORCE_INLINE_ M_Quat convert_from(const Quat &p_from) { + M_Quat ret = { p_from.x, p_from.y, p_from.z, p_from.w }; + return ret; + } +}; -#endif +struct M_Transform { + M_Basis basis; + M_Vector3 origin; + + static _FORCE_INLINE_ Transform convert_to(const M_Transform &p_from) { + return Transform(M_Basis::convert_to(p_from.basis), M_Vector3::convert_to(p_from.origin)); + } + + static _FORCE_INLINE_ M_Transform convert_from(const Transform &p_from) { + M_Transform ret = { M_Basis::convert_from(p_from.basis), M_Vector3::convert_from(p_from.origin) }; + return ret; + } +}; + +struct M_AABB { + M_Vector3 position; + M_Vector3 size; + + static _FORCE_INLINE_ AABB convert_to(const M_AABB &p_from) { + return AABB(M_Vector3::convert_to(p_from.position), M_Vector3::convert_to(p_from.size)); + } + + static _FORCE_INLINE_ M_AABB convert_from(const AABB &p_from) { + M_AABB ret = { M_Vector3::convert_from(p_from.position), M_Vector3::convert_from(p_from.size) }; + return ret; + } +}; + +struct M_Color { + float r, g, b, a; + + static _FORCE_INLINE_ Color convert_to(const M_Color &p_from) { + return Color(p_from.r, p_from.g, p_from.b, p_from.a); + } + + static _FORCE_INLINE_ M_Color convert_from(const Color &p_from) { + M_Color ret = { p_from.r, p_from.g, p_from.b, p_from.a }; + return ret; + } +}; + +struct M_Plane { + M_Vector3 normal; + real_t d; + + static _FORCE_INLINE_ Plane convert_to(const M_Plane &p_from) { + return Plane(M_Vector3::convert_to(p_from.normal), p_from.d); + } + + static _FORCE_INLINE_ M_Plane convert_from(const Plane &p_from) { + M_Plane ret = { M_Vector3::convert_from(p_from.normal), p_from.d }; + return ret; + } +}; + +#pragma pack(pop) + +#define DECL_TYPE_MARSHAL_TEMPLATES(m_type) \ + template <int> \ + _FORCE_INLINE_ m_type marshalled_in_##m_type##_impl(const M_##m_type *p_from); \ + \ + template <> \ + _FORCE_INLINE_ m_type marshalled_in_##m_type##_impl<0>(const M_##m_type *p_from) { \ + return M_##m_type::convert_to(*p_from); \ + } \ + \ + template <> \ + _FORCE_INLINE_ m_type marshalled_in_##m_type##_impl<1>(const M_##m_type *p_from) { \ + return *reinterpret_cast<const m_type *>(p_from); \ + } \ + \ + _FORCE_INLINE_ m_type marshalled_in_##m_type(const M_##m_type *p_from) { \ + return marshalled_in_##m_type##_impl<InteropLayout::MATCHES_##m_type>(p_from); \ + } \ + \ + template <int> \ + _FORCE_INLINE_ M_##m_type marshalled_out_##m_type##_impl(const m_type &p_from); \ + \ + template <> \ + _FORCE_INLINE_ M_##m_type marshalled_out_##m_type##_impl<0>(const m_type &p_from) { \ + return M_##m_type::convert_from(p_from); \ + } \ + \ + template <> \ + _FORCE_INLINE_ M_##m_type marshalled_out_##m_type##_impl<1>(const m_type &p_from) { \ + return *reinterpret_cast<const M_##m_type *>(&p_from); \ + } \ + \ + _FORCE_INLINE_ M_##m_type marshalled_out_##m_type(const m_type &p_from) { \ + return marshalled_out_##m_type##_impl<InteropLayout::MATCHES_##m_type>(p_from); \ + } + +DECL_TYPE_MARSHAL_TEMPLATES(Vector2) +DECL_TYPE_MARSHAL_TEMPLATES(Rect2) +DECL_TYPE_MARSHAL_TEMPLATES(Transform2D) +DECL_TYPE_MARSHAL_TEMPLATES(Vector3) +DECL_TYPE_MARSHAL_TEMPLATES(Basis) +DECL_TYPE_MARSHAL_TEMPLATES(Quat) +DECL_TYPE_MARSHAL_TEMPLATES(Transform) +DECL_TYPE_MARSHAL_TEMPLATES(AABB) +DECL_TYPE_MARSHAL_TEMPLATES(Color) +DECL_TYPE_MARSHAL_TEMPLATES(Plane) + +#define MARSHALLED_IN(m_type, m_from_ptr) (GDMonoMarshal::marshalled_in_##m_type(m_from_ptr)) +#define MARSHALLED_OUT(m_type, m_from) (GDMonoMarshal::marshalled_out_##m_type(m_from)) } // namespace GDMonoMarshal diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp index b97a24b09c..211987d242 100644 --- a/modules/mono/mono_gd/gd_mono_utils.cpp +++ b/modules/mono/mono_gd/gd_mono_utils.cpp @@ -631,36 +631,36 @@ void set_pending_exception(MonoException *p_exc) { _THREAD_LOCAL_(int) current_invoke_count = 0; -MonoObject *runtime_invoke(MonoMethod *p_method, void *p_obj, void **p_params, MonoException **p_exc) { +MonoObject *runtime_invoke(MonoMethod *p_method, void *p_obj, void **p_params, MonoException **r_exc) { GD_MONO_BEGIN_RUNTIME_INVOKE; - MonoObject *ret = mono_runtime_invoke(p_method, p_obj, p_params, (MonoObject **)p_exc); + MonoObject *ret = mono_runtime_invoke(p_method, p_obj, p_params, (MonoObject **)r_exc); GD_MONO_END_RUNTIME_INVOKE; return ret; } -MonoObject *runtime_invoke_array(MonoMethod *p_method, void *p_obj, MonoArray *p_params, MonoException **p_exc) { +MonoObject *runtime_invoke_array(MonoMethod *p_method, void *p_obj, MonoArray *p_params, MonoException **r_exc) { GD_MONO_BEGIN_RUNTIME_INVOKE; - MonoObject *ret = mono_runtime_invoke_array(p_method, p_obj, p_params, (MonoObject **)p_exc); + MonoObject *ret = mono_runtime_invoke_array(p_method, p_obj, p_params, (MonoObject **)r_exc); GD_MONO_END_RUNTIME_INVOKE; return ret; } -MonoString *object_to_string(MonoObject *p_obj, MonoException **p_exc) { +MonoString *object_to_string(MonoObject *p_obj, MonoException **r_exc) { GD_MONO_BEGIN_RUNTIME_INVOKE; - MonoString *ret = mono_object_to_string(p_obj, (MonoObject **)p_exc); + MonoString *ret = mono_object_to_string(p_obj, (MonoObject **)r_exc); GD_MONO_END_RUNTIME_INVOKE; return ret; } -void property_set_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **p_exc) { +void property_set_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **r_exc) { GD_MONO_BEGIN_RUNTIME_INVOKE; - mono_property_set_value(p_prop, p_obj, p_params, (MonoObject **)p_exc); + mono_property_set_value(p_prop, p_obj, p_params, (MonoObject **)r_exc); GD_MONO_END_RUNTIME_INVOKE; } -MonoObject *property_get_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **p_exc) { +MonoObject *property_get_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **r_exc) { GD_MONO_BEGIN_RUNTIME_INVOKE; - MonoObject *ret = mono_property_get_value(p_prop, p_obj, p_params, (MonoObject **)p_exc); + MonoObject *ret = mono_property_get_value(p_prop, p_obj, p_params, (MonoObject **)r_exc); GD_MONO_END_RUNTIME_INVOKE; return ret; } @@ -694,4 +694,8 @@ uint64_t unbox_enum_value(MonoObject *p_boxed, MonoType *p_enum_basetype, bool & } } +void dispose(MonoObject *p_mono_object, MonoException **r_exc) { + invoke_method_thunk(CACHED_METHOD_THUNK(GodotObject, Dispose), p_mono_object, (MonoObject **)r_exc); +} + } // namespace GDMonoUtils diff --git a/modules/mono/mono_gd/gd_mono_utils.h b/modules/mono/mono_gd/gd_mono_utils.h index ec3a57eb46..170df32991 100644 --- a/modules/mono/mono_gd/gd_mono_utils.h +++ b/modules/mono/mono_gd/gd_mono_utils.h @@ -233,16 +233,18 @@ _FORCE_INLINE_ int &get_runtime_invoke_count_ref() { return current_invoke_count; } -MonoObject *runtime_invoke(MonoMethod *p_method, void *p_obj, void **p_params, MonoException **p_exc); -MonoObject *runtime_invoke_array(MonoMethod *p_method, void *p_obj, MonoArray *p_params, MonoException **p_exc); +MonoObject *runtime_invoke(MonoMethod *p_method, void *p_obj, void **p_params, MonoException **r_exc); +MonoObject *runtime_invoke_array(MonoMethod *p_method, void *p_obj, MonoArray *p_params, MonoException **r_exc); -MonoString *object_to_string(MonoObject *p_obj, MonoException **p_exc); +MonoString *object_to_string(MonoObject *p_obj, MonoException **r_exc); -void property_set_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **p_exc); -MonoObject *property_get_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **p_exc); +void property_set_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **r_exc); +MonoObject *property_get_value(MonoProperty *p_prop, void *p_obj, void **p_params, MonoException **r_exc); uint64_t unbox_enum_value(MonoObject *p_boxed, MonoType *p_enum_basetype, bool &r_error); +void dispose(MonoObject *p_mono_object, MonoException **r_exc); + } // namespace GDMonoUtils #define NATIVE_GDMONOCLASS_NAME(m_class) (GDMonoMarshal::mono_string_to_godot((MonoString *)m_class->get_field(BINDINGS_NATIVE_NAME_FIELD)->get_value(NULL))) @@ -267,4 +269,93 @@ uint64_t unbox_enum_value(MonoObject *p_boxed, MonoType *p_enum_basetype, bool & #define GD_MONO_END_RUNTIME_INVOKE \ _runtime_invoke_count_ref -= 1; +inline void invoke_method_thunk(void (*p_method_thunk)()) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + p_method_thunk(); + GD_MONO_END_RUNTIME_INVOKE; +} + +template <class R> +R invoke_method_thunk(R (*p_method_thunk)()) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + R r = p_method_thunk(); + GD_MONO_END_RUNTIME_INVOKE; + return r; +} + +template <class P1> +void invoke_method_thunk(void (*p_method_thunk)(P1), P1 p_arg1) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + p_method_thunk(p_arg1); + GD_MONO_END_RUNTIME_INVOKE; +} + +template <class R, class P1> +R invoke_method_thunk(R (*p_method_thunk)(P1), P1 p_arg1) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + R r = p_method_thunk(p_arg1); + GD_MONO_END_RUNTIME_INVOKE; + return r; +} + +template <class P1, class P2> +void invoke_method_thunk(void (*p_method_thunk)(P1, P2), P1 p_arg1, P2 p_arg2) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + p_method_thunk(p_arg1, p_arg2); + GD_MONO_END_RUNTIME_INVOKE; +} + +template <class R, class P1, class P2> +R invoke_method_thunk(R (*p_method_thunk)(P1, P2), P1 p_arg1, P2 p_arg2) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + R r = p_method_thunk(p_arg1, p_arg2); + GD_MONO_END_RUNTIME_INVOKE; + return r; +} + +template <class P1, class P2, class P3> +void invoke_method_thunk(void (*p_method_thunk)(P1, P2, P3), P1 p_arg1, P2 p_arg2, P3 p_arg3) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + p_method_thunk(p_arg1, p_arg2, p_arg3); + GD_MONO_END_RUNTIME_INVOKE; +} + +template <class R, class P1, class P2, class P3> +R invoke_method_thunk(R (*p_method_thunk)(P1, P2, P3), P1 p_arg1, P2 p_arg2, P3 p_arg3) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + R r = p_method_thunk(p_arg1, p_arg2, p_arg3); + GD_MONO_END_RUNTIME_INVOKE; + return r; +} + +template <class P1, class P2, class P3, class P4> +void invoke_method_thunk(void (*p_method_thunk)(P1, P2, P3, P4), P1 p_arg1, P2 p_arg2, P3 p_arg3, P4 p_arg4) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + p_method_thunk(p_arg1, p_arg2, p_arg3, p_arg4); + GD_MONO_END_RUNTIME_INVOKE; +} + +template <class R, class P1, class P2, class P3, class P4> +R invoke_method_thunk(R (*p_method_thunk)(P1, P2, P3, P4), P1 p_arg1, P2 p_arg2, P3 p_arg3, P4 p_arg4) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + R r = p_method_thunk(p_arg1, p_arg2, p_arg3, p_arg4); + GD_MONO_END_RUNTIME_INVOKE; + return r; +} + +template <class P1, class P2, class P3, class P4, class P5> +void invoke_method_thunk(void (*p_method_thunk)(P1, P2, P3, P4, P5), P1 p_arg1, P2 p_arg2, P3 p_arg3, P4 p_arg4, P5 p_arg5) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + p_method_thunk(p_arg1, p_arg2, p_arg3, p_arg4, p_arg5); + GD_MONO_END_RUNTIME_INVOKE; +} + +template <class R, class P1, class P2, class P3, class P4, class P5> +R invoke_method_thunk(R (*p_method_thunk)(P1, P2, P3, P4, P5), P1 p_arg1, P2 p_arg2, P3 p_arg3, P4 p_arg4, P5 p_arg5) { + GD_MONO_BEGIN_RUNTIME_INVOKE; + R r = p_method_thunk(p_arg1, p_arg2, p_arg3, p_arg4, p_arg5); + GD_MONO_END_RUNTIME_INVOKE; + return r; +} + #endif // GD_MONOUTILS_H diff --git a/modules/mono/signal_awaiter_utils.cpp b/modules/mono/signal_awaiter_utils.cpp index b4c78df538..c6748309f3 100644 --- a/modules/mono/signal_awaiter_utils.cpp +++ b/modules/mono/signal_awaiter_utils.cpp @@ -98,11 +98,9 @@ Variant SignalAwaiterHandle::_signal_callback(const Variant **p_args, int p_argc mono_array_set(signal_args, MonoObject *, i, boxed); } - GDMonoUtils::SignalAwaiter_SignalCallback thunk = CACHED_METHOD_THUNK(SignalAwaiter, SignalCallback); - MonoException *exc = NULL; GD_MONO_BEGIN_RUNTIME_INVOKE; - thunk(get_target(), signal_args, (MonoObject **)&exc); + invoke_method_thunk(CACHED_METHOD_THUNK(SignalAwaiter, SignalCallback), get_target(), signal_args, (MonoObject **)&exc); GD_MONO_END_RUNTIME_INVOKE; if (exc) { @@ -129,19 +127,17 @@ SignalAwaiterHandle::SignalAwaiterHandle(MonoObject *p_managed) : SignalAwaiterHandle::~SignalAwaiterHandle() { if (!completed) { - GDMonoUtils::SignalAwaiter_FailureCallback thunk = CACHED_METHOD_THUNK(SignalAwaiter, FailureCallback); - MonoObject *awaiter = get_target(); if (awaiter) { MonoException *exc = NULL; GD_MONO_BEGIN_RUNTIME_INVOKE; - thunk(awaiter, (MonoObject **)&exc); + invoke_method_thunk(CACHED_METHOD_THUNK(SignalAwaiter, FailureCallback), awaiter, (MonoObject **)&exc); GD_MONO_END_RUNTIME_INVOKE; if (exc) { GDMonoUtils::set_pending_exception(exc); - ERR_FAIL_V(); + ERR_FAIL(); } } } diff --git a/modules/mono/utils/macros.h b/modules/mono/utils/macros.h index 337a86870e..c801fb2f33 100644 --- a/modules/mono/utils/macros.h +++ b/modules/mono/utils/macros.h @@ -31,8 +31,19 @@ #ifndef UTIL_MACROS_H #define UTIL_MACROS_H +#define _GD_VARNAME_CONCAT_B(m_ignore, m_name) m_name +#define _GD_VARNAME_CONCAT_A(m_a, m_b, m_c) _GD_VARNAME_CONCAT_B(hello there, m_a##m_b##m_c) +#define _GD_VARNAME_CONCAT(m_a, m_b, m_c) _GD_VARNAME_CONCAT_A(m_a, m_b, m_c) +#define GD_UNIQUE_NAME(m_name) _GD_VARNAME_CONCAT(m_name, _, __COUNTER__) + // noreturn +#if __cpp_static_assert +#define GD_STATIC_ASSERT(m_cond) static_assert((m_cond), "Condition '" #m_cond "' failed") +#else +#define GD_STATIC_ASSERT(m_cond) typedef int GD_UNIQUE_NAME(godot_static_assert)[((m_cond) ? 1 : -1)] +#endif + #undef _NO_RETURN_ #ifdef __GNUC__ diff --git a/modules/mono/utils/mono_reg_utils.cpp b/modules/mono/utils/mono_reg_utils.cpp index 8116df5f51..6bb6efa92a 100644 --- a/modules/mono/utils/mono_reg_utils.cpp +++ b/modules/mono/utils/mono_reg_utils.cpp @@ -228,4 +228,4 @@ cleanup: } } // namespace MonoRegUtils -#endif WINDOWS_ENABLED +#endif // WINDOWS_ENABLED diff --git a/platform/android/dir_access_android.h b/modules/mono/utils/mutex_utils.h index 3ac0bd6332..07d659b6eb 100644 --- a/platform/android/dir_access_android.h +++ b/modules/mono/utils/mutex_utils.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* dir_access_android.h */ +/* mutex_utils.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,53 +28,40 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef DIR_ACCESS_ANDROID_H -#define DIR_ACCESS_ANDROID_H +#ifndef MUTEX_UTILS_H +#define MUTEX_UTILS_H -#ifdef ANDROID_NATIVE_ACTIVITY +#include "core/error_macros.h" +#include "core/os/mutex.h" -#include "core/os/dir_access.h" -#include <android/asset_manager.h> -#include <android/log.h> -#include <android_native_app_glue.h> -#include <stdio.h> +#include "macros.h" -class DirAccessAndroid : public DirAccess { - - AAssetDir *aad; - String current_dir; - String current; - - static DirAccess *create_fs(); +class ScopedMutexLock { + Mutex *mutex; public: - virtual Error list_dir_begin(); ///< This starts dir listing - virtual String get_next(); - virtual bool current_is_dir() const; - virtual bool current_is_hidden() const; - virtual void list_dir_end(); ///< - - virtual int get_drive_count(); - virtual String get_drive(int p_drive); - - virtual Error change_dir(String p_dir); ///< can be relative or absolute, return false on success - virtual String get_current_dir(); ///< return current dir location - - virtual bool file_exists(String p_file); - - virtual Error make_dir(String p_dir); - - virtual Error rename(String p_from, String p_to); - virtual Error remove(String p_name); + ScopedMutexLock(Mutex *mutex) { + this->mutex = mutex; +#ifndef NO_THREADS +#ifdef DEBUG_ENABLED + CRASH_COND(!mutex); +#endif + this->mutex->lock(); +#endif + } - //virtual FileType get_file_type() const; - size_t get_space_left(); + ~ScopedMutexLock() { +#ifndef NO_THREADS +#ifdef DEBUG_ENABLED + CRASH_COND(!mutex); +#endif + mutex->unlock(); +#endif + } +}; - static void make_default(); +#define SCOPED_MUTEX_LOCK(m_mutex) ScopedMutexLock GD_UNIQUE_NAME(__scoped_mutex_lock__)(m_mutex); - DirAccessAndroid(); - ~DirAccessAndroid(); -}; +// TODO: Add version that receives a lambda instead, once C++11 is allowed -#endif -#endif // DIR_ACCESS_ANDROID_H +#endif // MUTEX_UTILS_H diff --git a/modules/mono/utils/path_utils.cpp b/modules/mono/utils/path_utils.cpp index ea942a9a8e..e663ee3c4a 100644 --- a/modules/mono/utils/path_utils.cpp +++ b/modules/mono/utils/path_utils.cpp @@ -88,7 +88,7 @@ void fix_path(const String &p_path, String &r_out) { bool rel_path_to_abs(const String &p_existing_path, String &r_abs_path) { #ifdef WINDOWS_ENABLED CharType ret[_MAX_PATH]; - if (_wfullpath(ret, p_existing_path.c_str(), _MAX_PATH)) { + if (::_wfullpath(ret, p_existing_path.c_str(), _MAX_PATH)) { String abspath = String(ret).replace("\\", "/"); int pos = abspath.find(":/"); if (pos != -1) { @@ -99,10 +99,12 @@ bool rel_path_to_abs(const String &p_existing_path, String &r_abs_path) { return true; } #else - char ret[PATH_MAX]; - if (realpath(p_existing_path.utf8().get_data(), ret)) { + char *resolved_path = ::realpath(p_existing_path.utf8().get_data(), NULL); + if (resolved_path) { String retstr; - if (!retstr.parse_utf8(ret)) { + bool success = !retstr.parse_utf8(resolved_path); + ::free(resolved_path); + if (success) { r_abs_path = retstr; return true; } diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp index 8691932f9a..6900866725 100644 --- a/modules/mono/utils/string_utils.cpp +++ b/modules/mono/utils/string_utils.cpp @@ -30,6 +30,8 @@ #include "string_utils.h" +#include "core/os/file_access.h" + namespace { int sfind(const String &p_text, int p_from) { @@ -128,6 +130,7 @@ String sformat(const String &p_text, const Variant &p1, const Variant &p2, const return new_string; } +#ifdef TOOLS_ENABLED bool is_csharp_keyword(const String &p_name) { // Reserved keywords @@ -156,3 +159,28 @@ bool is_csharp_keyword(const String &p_name) { String escape_csharp_keyword(const String &p_name) { return is_csharp_keyword(p_name) ? "@" + p_name : p_name; } +#endif + +Error read_all_file_utf8(const String &p_path, String &r_content) { + PoolVector<uint8_t> sourcef; + Error err; + FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); + ERR_FAIL_COND_V(err != OK, err); + + int len = f->get_len(); + sourcef.resize(len + 1); + PoolVector<uint8_t>::Write w = sourcef.write(); + int r = f->get_buffer(w.ptr(), len); + f->close(); + memdelete(f); + ERR_FAIL_COND_V(r != len, ERR_CANT_OPEN); + w[len] = 0; + + String source; + if (source.parse_utf8((const char *)w.ptr())) { + ERR_FAIL_V(ERR_INVALID_DATA); + } + + r_content = source; + return OK; +} diff --git a/modules/mono/utils/string_utils.h b/modules/mono/utils/string_utils.h index f2df2340ae..ee803bd720 100644 --- a/modules/mono/utils/string_utils.h +++ b/modules/mono/utils/string_utils.h @@ -42,4 +42,6 @@ bool is_csharp_keyword(const String &p_name); String escape_csharp_keyword(const String &p_name); #endif +Error read_all_file_utf8(const String &p_path, String &r_content); + #endif // STRING_FORMAT_H diff --git a/modules/mono/utils/thread_local.h b/modules/mono/utils/thread_local.h index 84dae1d86b..d7d98c47e2 100644 --- a/modules/mono/utils/thread_local.h +++ b/modules/mono/utils/thread_local.h @@ -108,17 +108,23 @@ class ThreadLocal { return data; } + void _initialize(const T &p_init_val) { + init_val = p_init_val; + storage.alloc(&destr_callback); + } + public: - ThreadLocal() : - ThreadLocal(T()) {} + ThreadLocal() { + _initialize(T()); + } - ThreadLocal(const T &p_init_val) : - init_val(p_init_val) { - storage.alloc(&destr_callback); + ThreadLocal(const T &p_init_val) { + _initialize(p_init_val); } - ThreadLocal(const ThreadLocal &other) : - ThreadLocal(*other._tls_get_value()) {} + ThreadLocal(const ThreadLocal &other) { + _initialize(*other._tls_get_value()); + } ~ThreadLocal() { storage.free(); diff --git a/modules/opensimplex/config.py b/modules/opensimplex/config.py index c91c9e5c80..c1010ad433 100644 --- a/modules/opensimplex/config.py +++ b/modules/opensimplex/config.py @@ -7,7 +7,7 @@ def configure(env): def get_doc_classes(): return [ "NoiseTexture", - "SimplexNoise" + "OpenSimplexNoise" ] def get_doc_path(): diff --git a/modules/opensimplex/doc_classes/NoiseTexture.xml b/modules/opensimplex/doc_classes/NoiseTexture.xml index 6af58e7a6b..ba54160a90 100644 --- a/modules/opensimplex/doc_classes/NoiseTexture.xml +++ b/modules/opensimplex/doc_classes/NoiseTexture.xml @@ -12,37 +12,22 @@ <demos> </demos> <methods> - <method name="set_height"> - <return type="void"> - </return> - <argument index="0" name="height" type="int"> - </argument> - <description> - Set texture height. - </description> - </method> - <method name="set_width"> - <return type="void"> - </return> - <argument index="0" name="width" type="int"> - </argument> - <description> - Set texture width. - </description> - </method> </methods> <members> <member name="as_normalmap" type="bool" setter="set_as_normalmap" getter="is_normalmap"> If true, the resulting texture contains a normal map created from the original noise interpreted as a bump map. </member> + <member name="height" type="int" setter="set_height" getter="get_height"> + Height of the generated texture. + </member> <member name="noise" type="OpenSimplexNoise" setter="set_noise" getter="get_noise"> The [OpenSimplexNoise] instance used to generate the noise. </member> <member name="seamless" type="bool" setter="set_seamless" getter="get_seamless"> Whether the texture can be tiled without visible seams or not. Seamless textures take longer to generate. </member> - <member name="size" type="Vector2" setter="set_size" getter="get_size"> - Size of the generated texture. + <member name="width" type="int" setter="set_width" getter="get_width"> + Width of the generated texture. </member> </members> <constants> diff --git a/modules/opensimplex/noise_texture.cpp b/modules/opensimplex/noise_texture.cpp index 6f2723e43b..be522a9ab1 100644 --- a/modules/opensimplex/noise_texture.cpp +++ b/modules/opensimplex/noise_texture.cpp @@ -58,7 +58,6 @@ void NoiseTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("set_width", "width"), &NoiseTexture::set_width); ClassDB::bind_method(D_METHOD("set_height", "height"), &NoiseTexture::set_height); - ClassDB::bind_method(D_METHOD("set_size", "size"), &NoiseTexture::set_size); ClassDB::bind_method(D_METHOD("set_noise", "noise"), &NoiseTexture::set_noise); ClassDB::bind_method(D_METHOD("get_noise"), &NoiseTexture::get_noise); @@ -73,7 +72,8 @@ void NoiseTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("_generate_texture"), &NoiseTexture::_generate_texture); ClassDB::bind_method(D_METHOD("_thread_done", "image"), &NoiseTexture::_thread_done); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size"); + 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::BOOL, "seamless"), "set_seamless", "get_seamless"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "as_normalmap"), "set_as_normalmap", "is_normalmap"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "noise", PROPERTY_HINT_RESOURCE_TYPE, "OpenSimplexNoise"), "set_noise", "get_noise"); @@ -208,17 +208,6 @@ bool NoiseTexture::is_normalmap() { return as_normalmap; } -void NoiseTexture::set_size(Vector2 p_size) { - if (p_size == size) return; - size = p_size; - _queue_update(); -} - -Vector2 NoiseTexture::get_size() { - - return size; -} - int NoiseTexture::get_width() const { return size.x; diff --git a/modules/opensimplex/noise_texture.h b/modules/opensimplex/noise_texture.h index 78a02cda9f..2a4c32d633 100644 --- a/modules/opensimplex/noise_texture.h +++ b/modules/opensimplex/noise_texture.h @@ -83,9 +83,6 @@ public: void set_as_normalmap(bool p_seamless); bool is_normalmap(); - void set_size(Vector2 p_size); - Vector2 get_size(); - int get_width() const; int get_height() const; diff --git a/modules/recast/navigation_mesh_editor_plugin.cpp b/modules/recast/navigation_mesh_editor_plugin.cpp index 98351fbaee..d121a82d9e 100644 --- a/modules/recast/navigation_mesh_editor_plugin.cpp +++ b/modules/recast/navigation_mesh_editor_plugin.cpp @@ -103,24 +103,25 @@ void NavigationMeshEditor::_bind_methods() { NavigationMeshEditor::NavigationMeshEditor() { bake_hbox = memnew(HBoxContainer); + button_bake = memnew(ToolButton); - button_bake->set_text(TTR("Bake!")); + bake_hbox->add_child(button_bake); button_bake->set_toggle_mode(true); - button_reset = memnew(Button); - button_bake->set_tooltip(TTR("Bake the navigation mesh.") + "\n"); + button_bake->set_text(TTR("Bake NavMesh")); + button_bake->connect("pressed", this, "_bake_pressed"); - bake_info = memnew(Label); - bake_hbox->add_child(button_bake); + button_reset = memnew(ToolButton); bake_hbox->add_child(button_reset); + // No button text, we only use a revert icon which is set when entering the tree. + button_reset->set_tooltip(TTR("Clear the navigation mesh.")); + button_reset->connect("pressed", this, "_clear_pressed"); + + bake_info = memnew(Label); bake_hbox->add_child(bake_info); err_dialog = memnew(AcceptDialog); add_child(err_dialog); node = NULL; - - button_bake->connect("pressed", this, "_bake_pressed"); - button_reset->connect("pressed", this, "_clear_pressed"); - button_reset->set_tooltip(TTR("Clear the navigation mesh.")); } NavigationMeshEditor::~NavigationMeshEditor() { diff --git a/modules/recast/navigation_mesh_editor_plugin.h b/modules/recast/navigation_mesh_editor_plugin.h index 4f3e222002..914d9ab8b9 100644 --- a/modules/recast/navigation_mesh_editor_plugin.h +++ b/modules/recast/navigation_mesh_editor_plugin.h @@ -43,8 +43,8 @@ class NavigationMeshEditor : public Control { AcceptDialog *err_dialog; HBoxContainer *bake_hbox; - Button *button_bake; - Button *button_reset; + ToolButton *button_bake; + ToolButton *button_reset; Label *bake_info; NavigationMeshInstance *node; diff --git a/modules/regex/regex.cpp b/modules/regex/regex.cpp index bdd3e31eb8..03ef024587 100644 --- a/modules/regex/regex.cpp +++ b/modules/regex/regex.cpp @@ -178,13 +178,17 @@ void RegEx::clear() { if (sizeof(CharType) == 2) { - if (code) + if (code) { pcre2_code_free_16((pcre2_code_16 *)code); + code = NULL; + } } else { - if (code) + if (code) { pcre2_code_free_32((pcre2_code_32 *)code); + code = NULL; + } } } diff --git a/modules/squish/config.py b/modules/squish/config.py index 098f1eafa9..1c8cd12a2d 100644 --- a/modules/squish/config.py +++ b/modules/squish/config.py @@ -1,5 +1,5 @@ def can_build(env, platform): - return env['tools'] + return True def configure(env): pass diff --git a/modules/squish/image_compress_squish.cpp b/modules/squish/image_compress_squish.cpp index 26cb76011c..4161a0f6ae 100644 --- a/modules/squish/image_compress_squish.cpp +++ b/modules/squish/image_compress_squish.cpp @@ -30,8 +30,6 @@ #include "image_compress_squish.h" -#include "core/print_string.h" - #include <squish.h> void image_decompress_squish(Image *p_image) { @@ -64,17 +62,19 @@ void image_decompress_squish(Image *p_image) { return; } - int dst_ofs = 0; - for (int i = 0; i <= mm_count; i++) { int src_ofs = 0, mipmap_size = 0, mipmap_w = 0, mipmap_h = 0; p_image->get_mipmap_offset_size_and_dimensions(i, src_ofs, mipmap_size, mipmap_w, mipmap_h); - squish::DecompressImage(&wb[dst_ofs], mipmap_w, mipmap_h, &rb[src_ofs], squish_flags); + int dst_ofs = Image::get_image_mipmap_offset(p_image->get_width(), p_image->get_height(), target_format, i); + squish::DecompressImage(&wb[dst_ofs], w, h, &rb[src_ofs], squish_flags); + w >>= 1; + h >>= 1; } p_image->create(p_image->get_width(), p_image->get_height(), p_image->has_mipmaps(), target_format, data); } +#ifdef TOOLS_ENABLED void image_compress_squish(Image *p_image, float p_lossy_quality, Image::CompressSource p_source) { if (p_image->get_format() >= Image::FORMAT_DXT1) @@ -203,3 +203,4 @@ void image_compress_squish(Image *p_image, float p_lossy_quality, Image::Compres p_image->create(p_image->get_width(), p_image->get_height(), p_image->has_mipmaps(), target_format, data); } } +#endif diff --git a/modules/squish/image_compress_squish.h b/modules/squish/image_compress_squish.h index dfebdc955f..dd53f2787a 100644 --- a/modules/squish/image_compress_squish.h +++ b/modules/squish/image_compress_squish.h @@ -33,7 +33,9 @@ #include "core/image.h" +#ifdef TOOLS_ENABLED void image_compress_squish(Image *p_image, float p_lossy_quality, Image::CompressSource p_source); +#endif void image_decompress_squish(Image *p_image); #endif // IMAGE_COMPRESS_SQUISH_H diff --git a/modules/squish/register_types.cpp b/modules/squish/register_types.cpp index d4ed676cce..9a5bb47f19 100644 --- a/modules/squish/register_types.cpp +++ b/modules/squish/register_types.cpp @@ -29,17 +29,14 @@ /*************************************************************************/ #include "register_types.h" - -#ifdef TOOLS_ENABLED - #include "image_compress_squish.h" void register_squish_types() { +#ifdef TOOLS_ENABLED Image::set_compress_bc_func(image_compress_squish); +#endif Image::_image_decompress_bc = image_decompress_squish; } void unregister_squish_types() {} - -#endif diff --git a/modules/squish/register_types.h b/modules/squish/register_types.h index 00f5c345c4..9dbd69c46b 100644 --- a/modules/squish/register_types.h +++ b/modules/squish/register_types.h @@ -28,7 +28,5 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifdef TOOLS_ENABLED void register_squish_types(); void unregister_squish_types(); -#endif diff --git a/modules/thekla_unwrap/config.py b/modules/thekla_unwrap/config.py index bd092bdc16..fad6095064 100644 --- a/modules/thekla_unwrap/config.py +++ b/modules/thekla_unwrap/config.py @@ -1,5 +1,6 @@ def can_build(env, platform): - return (env['tools'] and platform not in ["android", "ios"]) + #return (env['tools'] and platform not in ["android", "ios"]) + return False def configure(env): pass diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp index d72d74cf79..2a6bb0783b 100644 --- a/modules/theora/video_stream_theora.cpp +++ b/modules/theora/video_stream_theora.cpp @@ -730,7 +730,6 @@ RES ResourceFormatLoaderTheora::load(const String &p_path, const String &p_origi if (r_error) { *r_error = ERR_CANT_OPEN; } - memdelete(f); return RES(); } diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml index 28764aca40..70849c5a80 100644 --- a/modules/visual_script/doc_classes/VisualScript.xml +++ b/modules/visual_script/doc_classes/VisualScript.xml @@ -9,7 +9,7 @@ You are most likely to use this class via the Visual Script editor or when writing plugins for it. </description> <tutorials> - <link>http://docs.godotengine.org/en/3.0/getting_started/scripting/visual_script/index.html</link> + <link>https://docs.godotengine.org/en/latest/getting_started/scripting/visual_script/index.html</link> </tutorials> <demos> </demos> diff --git a/modules/visual_script/doc_classes/VisualScriptCustomNode.xml b/modules/visual_script/doc_classes/VisualScriptCustomNode.xml index b8e77a1b0f..ff3ed66e81 100644 --- a/modules/visual_script/doc_classes/VisualScriptCustomNode.xml +++ b/modules/visual_script/doc_classes/VisualScriptCustomNode.xml @@ -125,12 +125,10 @@ </argument> <description> Execute the custom node's logic, returning the index of the output sequence port to use or a [String] when there is an error. - The [code]inputs[/code] array contains the values of the input ports. [code]outputs[/code] is an array whose indices should be set to the respective outputs. The [code]start_mode[/code] is usually [code]START_MODE_BEGIN_SEQUENCE[/code], unless you have used the STEP_* constants. [code]working_mem[/code] is an array which can be used to persist information between runs of the custom node. - When returning, you can mask the returned value with one of the STEP_* constants. </description> </method> diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index ff97c21fd9..5b3b3a6769 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -48,20 +48,22 @@ bool VisualScriptNode::is_breakpoint() const { void VisualScriptNode::_notification(int p_what) { if (p_what == NOTIFICATION_POSTINITIALIZE) { - - int dvc = get_input_value_port_count(); - for (int i = 0; i < dvc; i++) { - Variant::Type expected = get_input_value_port_info(i).type; - Variant::CallError ce; - default_input_values.push_back(Variant::construct(expected, NULL, 0, ce, false)); - } + _update_input_ports(); } } -void VisualScriptNode::ports_changed_notify() { - +void VisualScriptNode::_update_input_ports() { default_input_values.resize(MAX(default_input_values.size(), get_input_value_port_count())); //let it grow as big as possible, we don't want to lose values on resize + int port_count = get_input_value_port_count(); + for (int i = 0; i < port_count; i++) { + Variant::Type expected = get_input_value_port_info(i).type; + Variant::CallError ce; + set_default_input_value(i, Variant::construct(expected, NULL, 0, ce, false)); + } +} +void VisualScriptNode::ports_changed_notify() { + _update_input_ports(); emit_signal("ports_changed"); } @@ -979,6 +981,10 @@ bool VisualScript::is_tool() const { return false; } +bool VisualScript::is_valid() const { + return true; //always valid +} + ScriptLanguage *VisualScript::get_language() const { return VisualScriptLanguage::singleton; @@ -2697,11 +2703,11 @@ VisualScriptLanguage::VisualScriptLanguage() { _debug_parse_err_file = ""; _debug_call_stack_pos = 0; int dmcs = GLOBAL_DEF("debug/settings/visual_script/max_call_stack", 1024); + ProjectSettings::get_singleton()->set_custom_property_info("debug/settings/visual_script/max_call_stack", PropertyInfo(Variant::INT, "debug/settings/visual_script/max_call_stack", PROPERTY_HINT_RANGE, "1024,4096,1,or_greater")); //minimum is 1024 + if (ScriptDebugger::get_singleton()) { //debugging enabled! _debug_max_call_stack = dmcs; - if (_debug_max_call_stack < 1024) - _debug_max_call_stack = 1024; _call_stack = memnew_arr(CallLevel, _debug_max_call_stack + 1); } else { diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h index ea99ce4970..cdc9159a73 100644 --- a/modules/visual_script/visual_script.h +++ b/modules/visual_script/visual_script.h @@ -52,6 +52,7 @@ class VisualScriptNode : public Resource { Array _get_default_input_values() const; void validate_input_default_values(); + void _update_input_ports(); protected: void _notification(int p_what); @@ -340,6 +341,7 @@ public: virtual Error reload(bool p_keep_state = false); virtual bool is_tool() const; + virtual bool is_valid() const; virtual ScriptLanguage *get_language() const; diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index 79f71535ad..afaa6a9b95 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -765,6 +765,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) { } void VisualScriptEditor::_update_members() { + ERR_FAIL_COND(!script.is_valid()); updating_members = true; @@ -1922,7 +1923,7 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da } } -void VisualScriptEditor::_selected_method(const String &p_method, const String &p_type) { +void VisualScriptEditor::_selected_method(const String &p_method, const String &p_type, const bool p_connecting) { Ref<VisualScriptFunctionCall> vsfc = script->get_node(edited_func, selecting_method_id); if (!vsfc.is_valid()) @@ -1940,7 +1941,7 @@ void VisualScriptEditor::_draw_color_over_button(Object *obj, Color p_color) { button->draw_rect(Rect2(normal->get_offset(), button->get_size() - normal->get_minimum_size()), p_color); } -void VisualScriptEditor::_button_resource_previewed(const String &p_path, const Ref<Texture> &p_preview, Variant p_ud) { +void VisualScriptEditor::_button_resource_previewed(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, Variant p_ud) { Array ud = p_ud; ERR_FAIL_COND(ud.size() != 2); @@ -2639,7 +2640,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri } undo_redo->create_action(TTR("Add Node")); undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode_new, ofs); - if (vnode_old.is_valid() && p_connecting == true) { + if (vnode_old.is_valid() && p_connecting) { connect_seq(vnode_old, vnode_new, new_id); connect_data(vnode_old, vnode_new, new_id); } @@ -2806,7 +2807,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri } } Ref<VisualScriptNode> vnode_old = script->get_node(edited_func, port_action_node); - if (vnode_old.is_valid() && p_connecting == true) { + if (vnode_old.is_valid() && p_connecting) { connect_seq(vnode_old, vnode, port_action_new_node); connect_data(vnode_old, vnode, port_action_new_node); } @@ -2816,7 +2817,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri void VisualScriptEditor::connect_seq(Ref<VisualScriptNode> vnode_old, Ref<VisualScriptNode> vnode_new, int new_id) { VisualScriptOperator *vnode_operator = Object::cast_to<VisualScriptOperator>(vnode_new.ptr()); - if (vnode_operator != NULL && vnode_operator->has_input_sequence_port() == false) { + if (vnode_operator != NULL && !vnode_operator->has_input_sequence_port()) { return; } VisualScriptConstructor *vnode_constructor = Object::cast_to<VisualScriptConstructor>(vnode_new.ptr()); @@ -2826,7 +2827,7 @@ void VisualScriptEditor::connect_seq(Ref<VisualScriptNode> vnode_old, Ref<Visual if (vnode_old->get_output_sequence_port_count() <= 0) { return; } - if (vnode_new->has_input_sequence_port() == false) { + if (!vnode_new->has_input_sequence_port()) { return; } @@ -3018,11 +3019,15 @@ void VisualScriptEditor::_node_filter_changed(const String &p_text) { void VisualScriptEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_READY) { + if (p_what == NOTIFICATION_READY || (p_what == NOTIFICATION_THEME_CHANGED && is_visible_in_tree())) { + node_filter->set_right_icon(Control::get_icon("Search", "EditorIcons")); node_filter->set_clear_button_enabled(true); - variable_editor->connect("changed", this, "_update_members"); - signal_editor->connect("changed", this, "_update_members"); + + if (p_what == NOTIFICATION_READY) { + variable_editor->connect("changed", this, "_update_members"); + signal_editor->connect("changed", this, "_update_members"); + } Ref<Theme> tm = EditorNode::get_singleton()->get_theme_base()->get_theme(); @@ -3056,8 +3061,12 @@ void VisualScriptEditor::_notification(int p_what) { node_styles[E->get().first] = frame_style; } } - } - if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + + if (is_visible_in_tree() && script.is_valid()) { + _update_members(); + _update_graph(); + } + } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { left_vsplit->set_visible(is_visible_in_tree()); } } @@ -3644,7 +3653,7 @@ VisualScriptEditor::VisualScriptEditor() { new_virtual_method_select = memnew(VisualScriptPropertySelector); add_child(new_virtual_method_select); new_virtual_method_select->connect("selected", this, "_selected_new_virtual_method"); - new_virtual_method_select->get_cancel()->connect("pressed", this, "_selected_new_virtual_method"); + new_virtual_method_select->get_cancel(); member_popup = memnew(PopupMenu); add_child(member_popup); diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/visual_script_editor.h index fb90e346a4..5f707c9e4c 100644 --- a/modules/visual_script/visual_script_editor.h +++ b/modules/visual_script/visual_script_editor.h @@ -176,7 +176,7 @@ class VisualScriptEditor : public ScriptEditorBase { void _cancel_connect_node(); void _create_new_node(const String &p_text, const String &p_category, const Vector2 &p_point); - void _selected_new_virtual_method(const String &p_text = String(""), const String &p_category = String(""), const bool p_connecting = true); + void _selected_new_virtual_method(const String &p_text, const String &p_category, const bool p_connecting); int error_line; @@ -234,10 +234,10 @@ class VisualScriptEditor : public ScriptEditorBase { void _comment_node_resized(const Vector2 &p_new_size, int p_node); int selecting_method_id; - void _selected_method(const String &p_method, const String &p_type); + void _selected_method(const String &p_method, const String &p_type, const bool p_connecting); void _draw_color_over_button(Object *obj, Color p_color); - void _button_resource_previewed(const String &p_path, const Ref<Texture> &p_preview, Variant p_ud); + void _button_resource_previewed(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, Variant p_ud); VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node, int p_port_action_output, Set<int> &visited_nodes); diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp index 5c880f48d1..99748af8a1 100644 --- a/modules/visual_script/visual_script_nodes.cpp +++ b/modules/visual_script/visual_script_nodes.cpp @@ -853,7 +853,7 @@ public: virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Variant::CallError &r_error, String &r_error_str) { - if (instance->get_variable(variable, p_outputs[0]) == false) { + if (!instance->get_variable(variable, p_outputs[0])) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = RTR("VariableGet not found in script: ") + "'" + String(variable) + "'"; return false; @@ -975,7 +975,7 @@ public: virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Variant::CallError &r_error, String &r_error_str) { - if (instance->set_variable(variable, *p_inputs[0]) == false) { + if (!instance->set_variable(variable, *p_inputs[0])) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = RTR("VariableSet not found in script: ") + "'" + String(variable) + "'"; @@ -3708,18 +3708,18 @@ void register_visual_script_nodes() { for (List<MethodInfo>::Element *E = constructors.front(); E; E = E->next()) { if (E->get().arguments.size() > 0) { - - String name = "functions/constructors/" + Variant::get_type_name(Variant::Type(i)) + " ( "; + String name = "functions/constructors/" + Variant::get_type_name(Variant::Type(i)) + "("; for (int j = 0; j < E->get().arguments.size(); j++) { - if (j > 0) + if (j > 0) { name += ", "; - if (E->get().arguments.size() == 1) + } + if (E->get().arguments.size() == 1) { name += Variant::get_type_name(E->get().arguments[j].type); - else + } else { name += E->get().arguments[j].name; + } } - name += ") "; - + name += ")"; VisualScriptLanguage::singleton->add_register_func(name, create_constructor_node); Pair<Variant::Type, MethodInfo> pair; pair.first = Variant::Type(i); diff --git a/modules/visual_script/visual_script_property_selector.cpp b/modules/visual_script/visual_script_property_selector.cpp index cd29df9855..e5d12cb495 100644 --- a/modules/visual_script/visual_script_property_selector.cpp +++ b/modules/visual_script/visual_script_property_selector.cpp @@ -149,7 +149,7 @@ void VisualScriptPropertySelector::_update_search() { Control::get_icon("PoolColorArray", "EditorIcons") }; - if (!seq_connect && visual_script_generic == false) { + if (!seq_connect && !visual_script_generic) { get_visual_node_names("flow_control/type_cast", Set<String>(), found, root, search_box); get_visual_node_names("functions/built_in/print", Set<String>(), found, root, search_box); get_visual_node_names("functions/by_type/" + Variant::get_type_name(type), Set<String>(), found, root, search_box); @@ -228,7 +228,7 @@ void VisualScriptPropertySelector::_update_search() { } } - if (seq_connect == true && visual_script_generic == false) { + if (seq_connect && !visual_script_generic) { String text = search_box->get_text(); create_visualscript_item(String("VisualScriptCondition"), root, text, String("Condition")); create_visualscript_item(String("VisualScriptSwitch"), root, text, String("Switch")); @@ -304,31 +304,36 @@ void VisualScriptPropertySelector::_update_search() { continue; MethodInfo mi = E->get(); - String desc = mi.name.capitalize() + " ("; + String desc_arguments; + if (mi.arguments.size() > 0) { + desc_arguments = "("; + for (int i = 0; i < mi.arguments.size(); i++) { + + if (i > 0) { + desc_arguments += ", "; + } + if (mi.arguments[i].type == Variant::NIL) { + desc_arguments += "var"; + } else if (mi.arguments[i].name.find(":") != -1) { + desc_arguments += mi.arguments[i].name.get_slice(":", 1); + mi.arguments[i].name = mi.arguments[i].name.get_slice(":", 0); + } else { + desc_arguments += Variant::get_type_name(mi.arguments[i].type); + } + } + desc_arguments += ")"; + } + String desc_raw = mi.name + desc_arguments; + String desc = desc_raw.capitalize().replace("( ", "("); if (search_box->get_text() != String() && name.findn(search_box->get_text()) == -1 && - desc.findn(search_box->get_text()) == -1) + desc.findn(search_box->get_text()) == -1 && + desc_raw.findn(search_box->get_text()) == -1) { continue; - - TreeItem *item = search_options->create_item(category ? category : root); - - for (int i = 0; i < mi.arguments.size(); i++) { - - if (i > 0) - desc += ", "; - - if (mi.arguments[i].type == Variant::NIL) - desc += "var"; - else if (mi.arguments[i].name.find(":") != -1) { - desc += mi.arguments[i].name.get_slice(":", 1); - mi.arguments[i].name = mi.arguments[i].name.get_slice(":", 0); - } else - desc += Variant::get_type_name(mi.arguments[i].type); } - desc += ")"; - + TreeItem *item = search_options->create_item(category ? category : root); item->set_text(0, desc); item->set_icon(0, get_icon("MemberMethod", "EditorIcons")); item->set_metadata(0, name); @@ -392,7 +397,7 @@ void VisualScriptPropertySelector::get_visual_node_names(const String &root_filt break; } } - if (is_filter == true) { + if (is_filter) { continue; } @@ -414,11 +419,16 @@ void VisualScriptPropertySelector::get_visual_node_names(const String &root_filt String basic_type = Variant::get_type_name(vnode_function_call->get_basic_type()); type_name = basic_type.capitalize() + " "; } - VisualScriptBuiltinFunc *vnode_builtin_function_call = Object::cast_to<VisualScriptBuiltinFunc>(*VisualScriptLanguage::singleton->create_node_from_name(E->get())); - if (vnode_builtin_function_call != NULL) { - type_name = "Builtin "; + + Vector<String> desc = path[path.size() - 1].replace("(", "( ").replace(")", " )").replace(",", ", ").split(" "); + for (size_t i = 0; i < desc.size(); i++) { + desc.write[i] = desc[i].capitalize(); + if (desc[i].ends_with(",")) { + desc.write[i] = desc[i].replace(",", ", "); + } } - item->set_text(0, type_name + path[path.size() - 1].capitalize()); + + item->set_text(0, type_name + String("").join(desc)); item->set_icon(0, get_icon("VisualScript", "EditorIcons")); item->set_selectable(0, true); item->set_metadata(0, E->get()); diff --git a/modules/webm/video_stream_webm.cpp b/modules/webm/video_stream_webm.cpp index d9a6ece085..675fc97b55 100644 --- a/modules/webm/video_stream_webm.cpp +++ b/modules/webm/video_stream_webm.cpp @@ -453,7 +453,6 @@ RES ResourceFormatLoaderWebm::load(const String &p_path, const String &p_origina if (r_error) { *r_error = ERR_CANT_OPEN; } - memdelete(f); return RES(); } diff --git a/modules/websocket/emws_client.cpp b/modules/websocket/emws_client.cpp index 8255ed7116..82a577790e 100644 --- a/modules/websocket/emws_client.cpp +++ b/modules/websocket/emws_client.cpp @@ -31,6 +31,7 @@ #include "emws_client.h" #include "core/io/ip.h" +#include "core/project_settings.h" #include "emscripten.h" extern "C" { @@ -43,8 +44,9 @@ EMSCRIPTEN_KEEPALIVE void _esws_on_connect(void *obj, char *proto) { EMSCRIPTEN_KEEPALIVE void _esws_on_message(void *obj, uint8_t *p_data, int p_data_size, int p_is_string) { EMWSClient *client = static_cast<EMWSClient *>(obj); - static_cast<EMWSPeer *>(*client->get_peer(1))->read_msg(p_data, p_data_size, p_is_string == 1); - client->_on_peer_packet(); + Error err = static_cast<EMWSPeer *>(*client->get_peer(1))->read_msg(p_data, p_data_size, p_is_string == 1); + if (err == OK) + client->_on_peer_packet(); } EMSCRIPTEN_KEEPALIVE void _esws_on_error(void *obj) { @@ -159,7 +161,7 @@ Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, }, _js_id, str.utf8().get_data(), proto_string.utf8().get_data()); /* clang-format on */ - static_cast<Ref<EMWSPeer> >(_peer)->set_sock(peer_sock); + static_cast<Ref<EMWSPeer> >(_peer)->set_sock(peer_sock, _in_buf_size, _in_pkt_size); return OK; }; @@ -198,7 +200,13 @@ uint16_t EMWSClient::get_connected_port() const { return 1025; }; +int EMWSClient::get_max_packet_size() const { + return (1 << _in_buf_size) - PROTO_SIZE; +} + EMWSClient::EMWSClient() { + _in_buf_size = GLOBAL_GET(WSC_IN_BUF); + _in_pkt_size = GLOBAL_GET(WSC_IN_PKT); _is_connecting = false; _peer = Ref<EMWSPeer>(memnew(EMWSPeer)); /* clang-format off */ diff --git a/modules/websocket/emws_client.h b/modules/websocket/emws_client.h index b20633baff..a21090a1a3 100644 --- a/modules/websocket/emws_client.h +++ b/modules/websocket/emws_client.h @@ -41,6 +41,8 @@ class EMWSClient : public WebSocketClient { GDCIIMPL(EMWSClient, WebSocketClient); private: + int _in_buf_size; + int _in_pkt_size; int _js_id; public: @@ -52,6 +54,7 @@ public: IP_Address get_connected_host() const; uint16_t get_connected_port() const; virtual ConnectionStatus get_connection_status() const; + int get_max_packet_size() const; virtual void poll(); EMWSClient(); ~EMWSClient(); diff --git a/modules/websocket/emws_peer.cpp b/modules/websocket/emws_peer.cpp index 68f41165eb..bb97934824 100644 --- a/modules/websocket/emws_peer.cpp +++ b/modules/websocket/emws_peer.cpp @@ -32,11 +32,11 @@ #include "emws_peer.h" #include "core/io/ip.h" -void EMWSPeer::set_sock(int p_sock) { +void EMWSPeer::set_sock(int p_sock, unsigned int p_in_buf_size, unsigned int p_in_pkt_size) { peer_sock = p_sock; - in_buffer.clear(); - queue_count = 0; + _in_buffer.resize(p_in_pkt_size, p_in_buf_size); + _packet_buffer.resize((1 << p_in_buf_size)); } void EMWSPeer::set_write_mode(WriteMode p_mode) { @@ -47,18 +47,10 @@ EMWSPeer::WriteMode EMWSPeer::get_write_mode() const { return write_mode; } -void EMWSPeer::read_msg(uint8_t *p_data, uint32_t p_size, bool p_is_string) { - - if (in_buffer.space_left() < p_size + 5) { - ERR_EXPLAIN("Buffer full! Dropping data"); - ERR_FAIL(); - } +Error EMWSPeer::read_msg(uint8_t *p_data, uint32_t p_size, bool p_is_string) { uint8_t is_string = p_is_string ? 1 : 0; - in_buffer.write((uint8_t *)&p_size, 4); - in_buffer.write((uint8_t *)&is_string, 1); - in_buffer.write(p_data, p_size); - queue_count++; + return _in_buffer.write_packet(p_data, p_size, &is_string); } Error EMWSPeer::put_packet(const uint8_t *p_buffer, int p_buffer_size) { @@ -89,40 +81,28 @@ Error EMWSPeer::put_packet(const uint8_t *p_buffer, int p_buffer_size) { Error EMWSPeer::get_packet(const uint8_t **r_buffer, int &r_buffer_size) { - if (queue_count == 0) + if (_in_buffer.packets_left() == 0) return ERR_UNAVAILABLE; - uint32_t to_read = 0; - uint32_t left = 0; - uint8_t is_string = 0; - r_buffer_size = 0; - - in_buffer.read((uint8_t *)&to_read, 4); - --queue_count; - left = in_buffer.data_left(); + PoolVector<uint8_t>::Write rw = _packet_buffer.write(); + int read = 0; + Error err = _in_buffer.read_packet(rw.ptr(), _packet_buffer.size(), &_is_string, read); + ERR_FAIL_COND_V(err != OK, err); - if (left < to_read + 1) { - in_buffer.advance_read(left); - return FAILED; - } - - in_buffer.read(&is_string, 1); - _was_string = is_string == 1; - in_buffer.read(packet_buffer, to_read); - *r_buffer = packet_buffer; - r_buffer_size = to_read; + *r_buffer = rw.ptr(); + r_buffer_size = read; return OK; }; int EMWSPeer::get_available_packet_count() const { - return queue_count; + return _in_buffer.packets_left(); }; bool EMWSPeer::was_string_packet() const { - return _was_string; + return _is_string; }; bool EMWSPeer::is_connected_to_host() const { @@ -143,9 +123,9 @@ void EMWSPeer::close(int p_code, String p_reason) { }, peer_sock, p_code, p_reason.utf8().get_data()); /* clang-format on */ } + _is_string = 0; + _in_buffer.clear(); peer_sock = -1; - queue_count = 0; - in_buffer.clear(); }; IP_Address EMWSPeer::get_connected_host() const { @@ -162,15 +142,12 @@ uint16_t EMWSPeer::get_connected_port() const { EMWSPeer::EMWSPeer() { peer_sock = -1; - queue_count = 0; - _was_string = false; - in_buffer.resize(16); write_mode = WRITE_MODE_BINARY; + close(); }; EMWSPeer::~EMWSPeer() { - in_buffer.resize(0); close(); }; diff --git a/modules/websocket/emws_peer.h b/modules/websocket/emws_peer.h index a4b2c8f50b..4beb86d45b 100644 --- a/modules/websocket/emws_peer.h +++ b/modules/websocket/emws_peer.h @@ -36,6 +36,7 @@ #include "core/io/packet_peer.h" #include "core/ring_buffer.h" #include "emscripten.h" +#include "packet_buffer.h" #include "websocket_peer.h" class EMWSPeer : public WebSocketPeer { @@ -43,25 +44,20 @@ class EMWSPeer : public WebSocketPeer { GDCIIMPL(EMWSPeer, WebSocketPeer); private: - enum { - PACKET_BUFFER_SIZE = 65536 - 5 // 4 bytes for the size, 1 for for type - }; - int peer_sock; WriteMode write_mode; - uint8_t packet_buffer[PACKET_BUFFER_SIZE]; - RingBuffer<uint8_t> in_buffer; - int queue_count; - bool _was_string; + PoolVector<uint8_t> _packet_buffer; + PacketBuffer<uint8_t> _in_buffer; + uint8_t _is_string; public: - void read_msg(uint8_t *p_data, uint32_t p_size, bool p_is_string); - void set_sock(int sock); + Error read_msg(uint8_t *p_data, uint32_t p_size, bool p_is_string); + void set_sock(int p_sock, unsigned int p_in_buf_size, unsigned int p_in_pkt_size); virtual int get_available_packet_count() const; virtual Error get_packet(const uint8_t **r_buffer, int &r_buffer_size); virtual Error put_packet(const uint8_t *p_buffer, int p_buffer_size); - virtual int get_max_packet_size() const { return PACKET_BUFFER_SIZE; }; + virtual int get_max_packet_size() const { return _packet_buffer.size(); }; virtual void close(int p_code = 1000, String p_reason = ""); virtual bool is_connected_to_host() const; @@ -72,10 +68,6 @@ public: virtual void set_write_mode(WriteMode p_mode); virtual bool was_string_packet() const; - void set_wsi(struct lws *wsi); - Error read_wsi(void *in, size_t len); - Error write_wsi(); - EMWSPeer(); ~EMWSPeer(); }; diff --git a/modules/websocket/emws_server.cpp b/modules/websocket/emws_server.cpp index ad4a758c0f..09f9c1ceec 100644 --- a/modules/websocket/emws_server.cpp +++ b/modules/websocket/emws_server.cpp @@ -71,6 +71,13 @@ int EMWSServer::get_peer_port(int p_peer_id) const { void EMWSServer::disconnect_peer(int p_peer_id, int p_code, String p_reason) { } +void EMWSServer::poll() { +} + +int EMWSServer::get_max_packet_size() const { + return 0; +} + EMWSServer::EMWSServer() { } diff --git a/modules/websocket/emws_server.h b/modules/websocket/emws_server.h index 74b689a29b..2dc455c389 100644 --- a/modules/websocket/emws_server.h +++ b/modules/websocket/emws_server.h @@ -49,6 +49,7 @@ public: IP_Address get_peer_address(int p_peer_id) const; int get_peer_port(int p_peer_id) const; void disconnect_peer(int p_peer_id, int p_code = 1000, String p_reason = ""); + int get_max_packet_size() const; virtual void poll(); virtual PoolVector<String> get_protocols() const; diff --git a/modules/websocket/lws_client.cpp b/modules/websocket/lws_client.cpp index cd814760e6..fa0bb4cfb2 100644 --- a/modules/websocket/lws_client.cpp +++ b/modules/websocket/lws_client.cpp @@ -32,6 +32,7 @@ #include "lws_client.h" #include "core/io/ip.h" #include "core/io/stream_peer_ssl.h" +#include "core/project_settings.h" #include "tls/mbedtls/wrapper/include/openssl/ssl.h" Error LWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocols) { @@ -76,23 +77,11 @@ Error LWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, ERR_FAIL_V(FAILED); } - char abuf[1024]; - char hbuf[1024]; - char pbuf[2048]; - String addr_str = (String)addr; - strncpy(abuf, addr_str.ascii().get_data(), 1024); - strncpy(hbuf, p_host.utf8().get_data(), 1024); - strncpy(pbuf, p_path.utf8().get_data(), 2048); - i.context = context; if (p_protocols.size() > 0) i.protocol = _lws_ref->lws_names; else i.protocol = NULL; - i.address = abuf; - i.host = hbuf; - i.path = pbuf; - i.port = p_port; if (p_ssl) { i.ssl_connection = LCCSCF_USE_SSL; @@ -102,10 +91,24 @@ Error LWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, i.ssl_connection = 0; } + // These CharStrings needs to survive till we call lws_client_connect_via_info + CharString addr_ch = ((String)addr).ascii(); + CharString host_ch = p_host.utf8(); + CharString path_ch = p_path.utf8(); + i.address = addr_ch.get_data(); + i.host = host_ch.get_data(); + i.path = path_ch.get_data(); + i.port = p_port; + lws_client_connect_via_info(&i); + return OK; }; +int LWSClient::get_max_packet_size() const { + return (1 << _out_buf_size) - PROTO_SIZE; +} + void LWSClient::poll() { _lws_poll(); @@ -126,7 +129,7 @@ int LWSClient::_handle_cb(struct lws *wsi, enum lws_callback_reasons reason, voi } break; case LWS_CALLBACK_CLIENT_ESTABLISHED: - peer->set_wsi(wsi); + peer->set_wsi(wsi, _in_buf_size, _in_pkt_size, _out_buf_size, _out_pkt_size); peer_data->peer_id = 0; peer_data->force_close = false; peer_data->clean_close = false; @@ -209,6 +212,11 @@ uint16_t LWSClient::get_connected_port() const { }; LWSClient::LWSClient() { + _in_buf_size = nearest_shift((int)GLOBAL_GET(WSC_IN_BUF) - 1) + 10; + _in_pkt_size = nearest_shift((int)GLOBAL_GET(WSC_IN_PKT) - 1); + _out_buf_size = nearest_shift((int)GLOBAL_GET(WSC_OUT_BUF) - 1) + 10; + _out_pkt_size = nearest_shift((int)GLOBAL_GET(WSC_OUT_PKT) - 1); + context = NULL; _lws_ref = NULL; _peer = Ref<LWSPeer>(memnew(LWSPeer)); diff --git a/modules/websocket/lws_client.h b/modules/websocket/lws_client.h index 1bbc19f352..fdecb99925 100644 --- a/modules/websocket/lws_client.h +++ b/modules/websocket/lws_client.h @@ -43,8 +43,15 @@ class LWSClient : public WebSocketClient { LWS_HELPER(LWSClient); +private: + int _in_buf_size; + int _in_pkt_size; + int _out_buf_size; + int _out_pkt_size; + public: Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocol = PoolVector<String>()); + int get_max_packet_size() const; Ref<WebSocketPeer> get_peer(int p_peer_id) const; void disconnect_from_host(int p_code = 1000, String p_reason = ""); IP_Address get_connected_host() const; diff --git a/modules/websocket/lws_helper.h b/modules/websocket/lws_helper.h index fd8f85371b..def4f5cfd0 100644 --- a/modules/websocket/lws_helper.h +++ b/modules/websocket/lws_helper.h @@ -60,6 +60,7 @@ void _lws_make_protocols(void *p_obj, lws_callback_function *p_callback, PoolVec protected: \ struct _LWSRef *_lws_ref; \ struct lws_context *context; \ + bool _keep_servicing; \ \ static int _lws_gd_callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { \ \ @@ -71,6 +72,7 @@ protected: \ if (!ref->is_valid) \ return 0; \ CNAME *helper = (CNAME *)ref->obj; \ + helper->_keep_servicing = true; \ return helper->_handle_cb(wsi, reason, user, in, len); \ } \ \ @@ -91,11 +93,14 @@ public: \ \ void _lws_poll() { \ ERR_FAIL_COND(context == NULL); \ - \ - if (::_lws_poll(context, _lws_ref)) { \ - context = NULL; \ - _lws_ref = NULL; \ - } \ + do { \ + _keep_servicing = false; \ + if (::_lws_poll(context, _lws_ref)) { \ + context = NULL; \ + _lws_ref = NULL; \ + break; \ + } \ + } while (_keep_servicing); \ } \ \ protected: diff --git a/modules/websocket/lws_peer.cpp b/modules/websocket/lws_peer.cpp index b5c130b308..04e6e7c951 100644 --- a/modules/websocket/lws_peer.cpp +++ b/modules/websocket/lws_peer.cpp @@ -41,11 +41,12 @@ #include "drivers/unix/net_socket_posix.h" -void LWSPeer::set_wsi(struct lws *p_wsi) { +void LWSPeer::set_wsi(struct lws *p_wsi, unsigned int p_in_buf_size, unsigned int p_in_pkt_size, unsigned int p_out_buf_size, unsigned int p_out_pkt_size) { ERR_FAIL_COND(wsi != NULL); - rbw.resize(16); - rbr.resize(16); + _in_buffer.resize(p_in_pkt_size, p_in_buf_size); + _out_buffer.resize(p_out_pkt_size, p_out_buf_size); + _packet_buffer.resize((1 << MAX(p_in_buf_size, p_out_buf_size)) + LWS_PRE); wsi = p_wsi; }; @@ -61,24 +62,29 @@ Error LWSPeer::read_wsi(void *in, size_t len) { ERR_FAIL_COND_V(!is_connected_to_host(), FAILED); - uint32_t size = in_size; - uint8_t is_string = lws_frame_is_binary(wsi) ? 0 : 1; + if (lws_is_first_fragment(wsi)) + _in_size = 0; + else if (_in_size == -1) // Trash this frame + return ERR_FILE_CORRUPT; - if (rbr.space_left() < len + 5) { - ERR_EXPLAIN("Buffer full! Dropping data"); - ERR_FAIL_V(FAILED); + Error err = _in_buffer.write_packet((const uint8_t *)in, len, NULL); + + if (err != OK) { + _in_buffer.discard_payload(_in_size); + _in_size = -1; + ERR_FAIL_V(err); } - copymem(&(input_buffer[size]), in, len); - size += len; + _in_size += len; - in_size = size; if (lws_is_final_fragment(wsi)) { - rbr.write((uint8_t *)&size, 4); - rbr.write((uint8_t *)&is_string, 1); - rbr.write(input_buffer, size); - in_count++; - in_size = 0; + uint8_t is_string = lws_frame_is_binary(wsi) ? 0 : 1; + err = _in_buffer.write_packet(NULL, _in_size, &is_string); + if (err != OK) { + _in_buffer.discard_payload(_in_size); + _in_size = -1; + ERR_FAIL_V(err); + } } return OK; @@ -89,26 +95,20 @@ Error LWSPeer::write_wsi() { ERR_FAIL_COND_V(!is_connected_to_host(), FAILED); PoolVector<uint8_t> tmp; - int left = rbw.data_left(); - uint32_t to_write = 0; + int count = _out_buffer.packets_left(); - if (left == 0 || out_count == 0) + if (count == 0) return OK; - rbw.read((uint8_t *)&to_write, 4); - out_count--; - - if (left < to_write) { - rbw.advance_read(left); - return FAILED; - } + int read = 0; + uint8_t is_string; + PoolVector<uint8_t>::Write rw = _packet_buffer.write(); + _out_buffer.read_packet(&(rw[LWS_PRE]), _packet_buffer.size() - LWS_PRE, &is_string, read); - tmp.resize(LWS_PRE + to_write); - rbw.read(&(tmp.write()[LWS_PRE]), to_write); - lws_write(wsi, &(tmp.write()[LWS_PRE]), to_write, (enum lws_write_protocol)write_mode); - tmp.resize(0); + enum lws_write_protocol mode = is_string ? LWS_WRITE_TEXT : LWS_WRITE_BINARY; + lws_write(wsi, &(rw[LWS_PRE]), read, mode); - if (out_count > 0) + if (count > 1) lws_callback_on_writable(wsi); // we want to write more! return OK; @@ -118,40 +118,27 @@ Error LWSPeer::put_packet(const uint8_t *p_buffer, int p_buffer_size) { ERR_FAIL_COND_V(!is_connected_to_host(), FAILED); - rbw.write((uint8_t *)&p_buffer_size, 4); - rbw.write(p_buffer, MIN(p_buffer_size, rbw.space_left())); - out_count++; - + uint8_t is_string = write_mode == WRITE_MODE_TEXT; + _out_buffer.write_packet(p_buffer, p_buffer_size, &is_string); lws_callback_on_writable(wsi); // notify that we want to write return OK; }; Error LWSPeer::get_packet(const uint8_t **r_buffer, int &r_buffer_size) { + r_buffer_size = 0; + ERR_FAIL_COND_V(!is_connected_to_host(), FAILED); - if (in_count == 0) + if (_in_buffer.packets_left() == 0) return ERR_UNAVAILABLE; - uint32_t to_read = 0; - uint32_t left = 0; - uint8_t is_string = 0; - r_buffer_size = 0; - - rbr.read((uint8_t *)&to_read, 4); - in_count--; - left = rbr.data_left(); - - if (left < to_read + 1) { - rbr.advance_read(left); - return FAILED; - } + int read = 0; + PoolVector<uint8_t>::Write rw = _packet_buffer.write(); + _in_buffer.read_packet(rw.ptr(), _packet_buffer.size(), &_is_string, read); - rbr.read(&is_string, 1); - rbr.read(packet_buffer, to_read); - *r_buffer = packet_buffer; - r_buffer_size = to_read; - _was_string = is_string; + *r_buffer = rw.ptr(); + r_buffer_size = read; return OK; }; @@ -161,12 +148,12 @@ int LWSPeer::get_available_packet_count() const { if (!is_connected_to_host()) return 0; - return in_count; + return _in_buffer.packets_left(); }; bool LWSPeer::was_string_packet() const { - return _was_string; + return _is_string; }; bool LWSPeer::is_connected_to_host() const { @@ -219,12 +206,11 @@ void LWSPeer::close(int p_code, String p_reason) { close_reason = ""; } wsi = NULL; - rbw.resize(0); - rbr.resize(0); - in_count = 0; - in_size = 0; - out_count = 0; - _was_string = false; + _in_buffer.clear(); + _out_buffer.clear(); + _in_size = 0; + _is_string = 0; + _packet_buffer.resize(0); }; IP_Address LWSPeer::get_connected_host() const { diff --git a/modules/websocket/lws_peer.h b/modules/websocket/lws_peer.h index 571445db01..3ded3810d1 100644 --- a/modules/websocket/lws_peer.h +++ b/modules/websocket/lws_peer.h @@ -37,6 +37,7 @@ #include "core/ring_buffer.h" #include "libwebsockets.h" #include "lws_config.h" +#include "packet_buffer.h" #include "websocket_peer.h" class LWSPeer : public WebSocketPeer { @@ -44,14 +45,16 @@ class LWSPeer : public WebSocketPeer { GDCIIMPL(LWSPeer, WebSocketPeer); private: - enum { - PACKET_BUFFER_SIZE = 65536 - 5 // 4 bytes for the size, 1 for the type - }; + int _in_size; + uint8_t _is_string; + // Our packet info is just a boolean (is_string), using uint8_t for it. + PacketBuffer<uint8_t> _in_buffer; + PacketBuffer<uint8_t> _out_buffer; + + PoolVector<uint8_t> _packet_buffer; - uint8_t packet_buffer[PACKET_BUFFER_SIZE]; struct lws *wsi; WriteMode write_mode; - bool _was_string; int close_code; String close_reason; @@ -63,17 +66,10 @@ public: bool clean_close; }; - RingBuffer<uint8_t> rbw; - RingBuffer<uint8_t> rbr; - uint8_t input_buffer[PACKET_BUFFER_SIZE]; - uint32_t in_size; - int in_count; - int out_count; - virtual int get_available_packet_count() const; virtual Error get_packet(const uint8_t **r_buffer, int &r_buffer_size); virtual Error put_packet(const uint8_t *p_buffer, int p_buffer_size); - virtual int get_max_packet_size() const { return PACKET_BUFFER_SIZE; }; + virtual int get_max_packet_size() const { return _packet_buffer.size(); }; virtual void close(int p_code = 1000, String p_reason = ""); virtual bool is_connected_to_host() const; @@ -84,7 +80,7 @@ public: virtual void set_write_mode(WriteMode p_mode); virtual bool was_string_packet() const; - void set_wsi(struct lws *wsi); + void set_wsi(struct lws *wsi, unsigned int _in_buf_size, unsigned int _in_pkt_size, unsigned int _out_buf_size, unsigned int _out_pkt_size); Error read_wsi(void *in, size_t len); Error write_wsi(); void send_close_status(struct lws *wsi); diff --git a/modules/websocket/lws_server.cpp b/modules/websocket/lws_server.cpp index 58fa043346..0e551eb318 100644 --- a/modules/websocket/lws_server.cpp +++ b/modules/websocket/lws_server.cpp @@ -31,6 +31,7 @@ #include "lws_server.h" #include "core/os/os.h" +#include "core/project_settings.h" Error LWSServer::listen(int p_port, PoolVector<String> p_protocols, bool gd_mp_api) { @@ -67,6 +68,10 @@ bool LWSServer::is_listening() const { return context != NULL; } +int LWSServer::get_max_packet_size() const { + return (1 << _out_buf_size) - PROTO_SIZE; +} + int LWSServer::_handle_cb(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { LWSPeer::PeerData *peer_data = (LWSPeer::PeerData *)user; @@ -85,7 +90,7 @@ int LWSServer::_handle_cb(struct lws *wsi, enum lws_callback_reasons reason, voi int32_t id = _gen_unique_id(); Ref<LWSPeer> peer = Ref<LWSPeer>(memnew(LWSPeer)); - peer->set_wsi(wsi); + peer->set_wsi(wsi, _in_buf_size, _in_pkt_size, _out_buf_size, _out_pkt_size); _peer_map[id] = peer; peer_data->peer_id = id; @@ -192,6 +197,10 @@ void LWSServer::disconnect_peer(int p_peer_id, int p_code, String p_reason) { } LWSServer::LWSServer() { + _in_buf_size = nearest_shift((int)GLOBAL_GET(WSS_IN_BUF) - 1) + 10; + _in_pkt_size = nearest_shift((int)GLOBAL_GET(WSS_IN_PKT) - 1); + _out_buf_size = nearest_shift((int)GLOBAL_GET(WSS_OUT_BUF) - 1) + 10; + _out_pkt_size = nearest_shift((int)GLOBAL_GET(WSS_OUT_PKT) - 1); context = NULL; _lws_ref = NULL; } diff --git a/modules/websocket/lws_server.h b/modules/websocket/lws_server.h index 346773ebc4..c43044f194 100644 --- a/modules/websocket/lws_server.h +++ b/modules/websocket/lws_server.h @@ -45,11 +45,16 @@ class LWSServer : public WebSocketServer { private: Map<int, Ref<LWSPeer> > peer_map; + int _in_buf_size; + int _in_pkt_size; + int _out_buf_size; + int _out_pkt_size; public: Error listen(int p_port, PoolVector<String> p_protocols = PoolVector<String>(), bool gd_mp_api = false); void stop(); bool is_listening() const; + int get_max_packet_size() const; bool has_peer(int p_id) const; Ref<WebSocketPeer> get_peer(int p_id) const; IP_Address get_peer_address(int p_peer_id) const; diff --git a/modules/websocket/packet_buffer.h b/modules/websocket/packet_buffer.h new file mode 100644 index 0000000000..a3af7f728a --- /dev/null +++ b/modules/websocket/packet_buffer.h @@ -0,0 +1,122 @@ +/*************************************************************************/ +/* packet_buffer.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 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 PACKET_BUFFER_H +#define PACKET_BUFFER_H + +#include "core/os/copymem.h" +#include "core/ring_buffer.h" + +template <class T> +class PacketBuffer { + +private: + typedef struct { + uint32_t size; + T info; + } _Packet; + + RingBuffer<_Packet> _packets; + RingBuffer<uint8_t> _payload; + +public: + Error write_packet(const uint8_t *p_payload, uint32_t p_size, const T *p_info) { +#ifdef TOOLS_ENABLED + // Verbose buffer warnings + if (p_payload && _payload.space_left() < p_size) { + ERR_PRINT("Buffer payload full! Dropping data."); + ERR_FAIL_V(ERR_OUT_OF_MEMORY); + } + if (p_info && _packets.space_left() < 1) { + ERR_PRINT("Too many packets in queue! Dropping data."); + ERR_FAIL_V(ERR_OUT_OF_MEMORY); + } +#else + ERR_FAIL_COND_V(p_payload && _payload.space_left() < p_size, ERR_OUT_OF_MEMORY); + ERR_FAIL_COND_V(p_info && _packets.space_left() < 1, ERR_OUT_OF_MEMORY); +#endif + + // If p_info is NULL, only the payload is written + if (p_info) { + _Packet p; + p.size = p_size; + copymem(&p.info, p_info, sizeof(T)); + _packets.write(p); + } + + // If p_payload is NULL, only the packet information is written. + if (p_payload) { + _payload.write((const uint8_t *)p_payload, p_size); + } + + return OK; + } + + Error read_packet(uint8_t *r_payload, int p_bytes, T *r_info, int &r_read) { + ERR_FAIL_COND_V(_packets.data_left() < 1, ERR_UNAVAILABLE); + _Packet p; + _packets.read(&p, 1); + ERR_FAIL_COND_V(_payload.data_left() < p.size, ERR_BUG); + ERR_FAIL_COND_V(p_bytes < p.size, ERR_OUT_OF_MEMORY); + + r_read = p.size; + copymem(r_info, &p.info, sizeof(T)); + _payload.read(r_payload, p.size); + return OK; + } + + void discard_payload(int p_size) { + _packets.decrease_write(p_size); + } + + void resize(int p_pkt_shift, int p_buf_shift) { + _packets.resize(p_pkt_shift); + _payload.resize(p_buf_shift); + } + + int packets_left() const { + return _packets.data_left(); + } + + void clear() { + _payload.resize(0); + _packets.resize(0); + } + + PacketBuffer() { + clear(); + } + + ~PacketBuffer() { + clear(); + } +}; + +#endif // PACKET_BUFFER_H diff --git a/modules/websocket/register_types.cpp b/modules/websocket/register_types.cpp index 538cd40454..8946faffa9 100644 --- a/modules/websocket/register_types.cpp +++ b/modules/websocket/register_types.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "register_types.h" #include "core/error_macros.h" +#include "core/project_settings.h" #ifdef JAVASCRIPT_ENABLED #include "emscripten.h" #include "emws_client.h" @@ -41,6 +42,22 @@ #endif void register_websocket_types() { +#define _SET_HINT(NAME, _VAL_, _MAX_) \ + GLOBAL_DEF(NAME, _VAL_); \ + ProjectSettings::get_singleton()->set_custom_property_info(NAME, PropertyInfo(Variant::INT, NAME, PROPERTY_HINT_RANGE, "2," #_MAX_ ",1,or_greater")); + + // Client buffers project settings + _SET_HINT(WSC_IN_BUF, 64, 4096); + _SET_HINT(WSC_IN_PKT, 1024, 16384); + _SET_HINT(WSC_OUT_BUF, 64, 4096); + _SET_HINT(WSC_OUT_PKT, 1024, 16384); + + // Server buffers project settings + _SET_HINT(WSS_IN_BUF, 64, 4096); + _SET_HINT(WSS_IN_PKT, 1024, 16384); + _SET_HINT(WSS_OUT_BUF, 64, 4096); + _SET_HINT(WSS_OUT_PKT, 1024, 16384); + #ifdef JAVASCRIPT_ENABLED EM_ASM({ var IDHandler = {}; diff --git a/modules/websocket/websocket_client.cpp b/modules/websocket/websocket_client.cpp index f9b94dc519..6c5018bb79 100644 --- a/modules/websocket/websocket_client.cpp +++ b/modules/websocket/websocket_client.cpp @@ -136,7 +136,7 @@ void WebSocketClient::_bind_methods() { ClassDB::bind_method(D_METHOD("set_verify_ssl_enabled", "enabled"), &WebSocketClient::set_verify_ssl_enabled); ClassDB::bind_method(D_METHOD("is_verify_ssl_enabled"), &WebSocketClient::is_verify_ssl_enabled); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "verify_ssl", PROPERTY_HINT_NONE, "", 0), "set_verify_ssl_enabled", "is_verify_ssl_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "verify_ssl", PROPERTY_HINT_NONE, "", 0), "set_verify_ssl_enabled", "is_verify_ssl_enabled"); ADD_SIGNAL(MethodInfo("data_received")); ADD_SIGNAL(MethodInfo("connection_established", PropertyInfo(Variant::STRING, "protocol"))); diff --git a/modules/websocket/websocket_macros.h b/modules/websocket/websocket_macros.h index d27fb4d778..45dd30d0ce 100644 --- a/modules/websocket/websocket_macros.h +++ b/modules/websocket/websocket_macros.h @@ -30,6 +30,16 @@ #ifndef WEBSOCKETMACTOS_H #define WEBSOCKETMACTOS_H +#define WSC_IN_BUF "network/limits/websocket_client/max_in_buffer_kb" +#define WSC_IN_PKT "network/limits/websocket_client/max_in_packets" +#define WSC_OUT_BUF "network/limits/websocket_client/max_out_buffer_kb" +#define WSC_OUT_PKT "network/limits/websocket_client/max_out_packets" + +#define WSS_IN_BUF "network/limits/websocket_server/max_in_buffer_kb" +#define WSS_IN_PKT "network/limits/websocket_server/max_in_packets" +#define WSS_OUT_BUF "network/limits/websocket_server/max_out_buffer_kb" +#define WSS_OUT_PKT "network/limits/websocket_server/max_out_packets" + /* clang-format off */ #define GDCICLASS(CNAME) \ public:\ diff --git a/modules/websocket/websocket_multiplayer.cpp b/modules/websocket/websocket_multiplayer.cpp index b948c439df..9a95c17e47 100644 --- a/modules/websocket/websocket_multiplayer.cpp +++ b/modules/websocket/websocket_multiplayer.cpp @@ -100,13 +100,6 @@ int WebSocketMultiplayerPeer::get_available_packet_count() const { return _incoming_packets.size(); } -int WebSocketMultiplayerPeer::get_max_packet_size() const { - - ERR_FAIL_COND_V(!_is_multiplayer, ERR_UNCONFIGURED); - - return MAX_PACKET_SIZE; -} - Error WebSocketMultiplayerPeer::get_packet(const uint8_t **r_buffer, int &r_buffer_size) { r_buffer_size = 0; @@ -313,7 +306,7 @@ void WebSocketMultiplayerPeer::_process_multiplayer(Ref<WebSocketPeer> p_peer, u } else if (to < 0) { // All but one, for us if not excluded - if (_peer_id != -p_peer_id) + if (_peer_id != -(int32_t)p_peer_id) _store_pkt(from, to, in_buffer, data_size); } else { diff --git a/modules/websocket/websocket_multiplayer.h b/modules/websocket/websocket_multiplayer.h index 8edfc5296e..3cba0011fc 100644 --- a/modules/websocket/websocket_multiplayer.h +++ b/modules/websocket/websocket_multiplayer.h @@ -51,9 +51,7 @@ protected: SYS_DEL = 2, SYS_ID = 3, - PROTO_SIZE = 9, - SYS_PACKET_SIZE = 13, - MAX_PACKET_SIZE = 65536 - 14 // 5 websocket, 9 multiplayer + PROTO_SIZE = 9 }; struct Packet { @@ -93,7 +91,7 @@ public: /* PacketPeer */ virtual int get_available_packet_count() const; - virtual int get_max_packet_size() const; + virtual int get_max_packet_size() const = 0; virtual Error get_packet(const uint8_t **r_buffer, int &r_buffer_size); virtual Error put_packet(const uint8_t *p_buffer, int p_buffer_size); diff --git a/modules/websocket/websocket_peer.h b/modules/websocket/websocket_peer.h index 5918fda3c2..4966cdfc72 100644 --- a/modules/websocket/websocket_peer.h +++ b/modules/websocket/websocket_peer.h @@ -32,7 +32,6 @@ #include "core/error_list.h" #include "core/io/packet_peer.h" -#include "core/ring_buffer.h" #include "websocket_macros.h" class WebSocketPeer : public PacketPeer { diff --git a/modules/xatlas_unwrap/config.py b/modules/xatlas_unwrap/config.py index 962d33280f..2dda5db7e0 100644 --- a/modules/xatlas_unwrap/config.py +++ b/modules/xatlas_unwrap/config.py @@ -1,6 +1,6 @@ def can_build(env, platform): - return False #xatlas is buggy - #return (env['tools'] and platform not in ["android", "ios"]) + #return False #xatlas is buggy + return (env['tools'] and platform not in ["android", "ios"]) def configure(env): pass diff --git a/modules/xatlas_unwrap/register_types.cpp b/modules/xatlas_unwrap/register_types.cpp index 9df16aac70..57eea4eda6 100644 --- a/modules/xatlas_unwrap/register_types.cpp +++ b/modules/xatlas_unwrap/register_types.cpp @@ -75,8 +75,9 @@ bool xatlas_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_ver xatlas::CharterOptions chart_options; xatlas::PackerOptions pack_options; + pack_options.method = xatlas::PackMethod::TexelArea; pack_options.texelArea = 1.0 / p_texel_size; - pack_options.quality = 4; + pack_options.quality = 3; xatlas::Atlas *atlas = xatlas::Create(); printf("adding mesh..\n"); @@ -93,7 +94,10 @@ bool xatlas_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_ver float w = *r_size_hint_x; float h = *r_size_hint_y; - printf("final texsize: %f,%f\n", w, h); + if (w == 0 || h == 0) { + return false; //could not bake + } + const xatlas::OutputMesh *const *output_meshes = xatlas::GetOutputMeshes(atlas); const xatlas::OutputMesh *output = output_meshes[0]; @@ -102,11 +106,17 @@ bool xatlas_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_ver *r_uv = (float *)malloc(sizeof(float) * output->vertexCount * 2); *r_index = (int *)malloc(sizeof(int) * output->indexCount); + float max_x = 0; + float max_y = 0; for (int i = 0; i < output->vertexCount; i++) { (*r_vertex)[i] = output->vertexArray[i].xref; - (*r_uv)[i * 2 + 0] = output->vertexArray[i].uv[0]; - (*r_uv)[i * 2 + 1] = output->vertexArray[i].uv[1]; + (*r_uv)[i * 2 + 0] = output->vertexArray[i].uv[0] / w; + (*r_uv)[i * 2 + 1] = output->vertexArray[i].uv[1] / h; + max_x = MAX(max_x, output->vertexArray[i].uv[0]); + max_y = MAX(max_y, output->vertexArray[i].uv[1]); } + + printf("final texsize: %f,%f - max %f,%f\n", w, h, max_x, max_y); *r_vertex_count = output->vertexCount; for (int i = 0; i < output->indexCount; i++) { diff --git a/platform/android/SCsub b/platform/android/SCsub index 807506000f..6d5af99bc5 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -10,22 +10,22 @@ from detect import get_ndk_version android_files = [ 'os_android.cpp', - 'godot_android.cpp', 'file_access_android.cpp', - 'dir_access_android.cpp', 'audio_driver_opensl.cpp', 'file_access_jandroid.cpp', 'dir_access_jandroid.cpp', 'thread_jandroid.cpp', 'audio_driver_jandroid.cpp', - 'ifaddrs_android.cpp', - 'android_native_app_glue.c', 'java_glue.cpp', - 'cpu-features.c', 'java_class_wrapper.cpp', # 'power_android.cpp' ] +thirdparty_files = [ + 'ifaddrs_android.cpp', + 'cpu-features.c', +] + env_android = env.Clone() if env['target'] == "profile": env_android.Append(CPPFLAGS=['-DPROFILER_ENABLED']) @@ -34,6 +34,11 @@ android_objects = [] for x in android_files: android_objects.append(env_android.SharedObject(x)) +env_thirdparty = env_android.Clone() +env_thirdparty.disable_warnings() +for x in thirdparty_files: + android_objects.append(env_thirdparty.SharedObject(x)) + prog = None abspath = env.Dir(".").abspath diff --git a/platform/android/android_native_app_glue.c b/platform/android/android_native_app_glue.c deleted file mode 100644 index 965f6284cd..0000000000 --- a/platform/android/android_native_app_glue.c +++ /dev/null @@ -1,437 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * 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. - * - */ - -#ifdef ANDROID_NATIVE_ACTIVITY - -#include <jni.h> - - -#include <errno.h> -#include <string.h> -#include <unistd.h> -#include <sys/resource.h> - -#include "android_native_app_glue.h" -#include <android/log.h> - -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "threaded_app", __VA_ARGS__)) - -static void free_saved_state(struct android_app* android_app) { - pthread_mutex_lock(&android_app->mutex); - if (android_app->savedState != NULL) { - free(android_app->savedState); - android_app->savedState = NULL; - android_app->savedStateSize = 0; - } - pthread_mutex_unlock(&android_app->mutex); -} - -int8_t android_app_read_cmd(struct android_app* android_app) { - int8_t cmd; - if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd)) { - switch (cmd) { - case APP_CMD_SAVE_STATE: - free_saved_state(android_app); - break; - } - return cmd; - } else { - LOGI("No data on command pipe!"); - } - return -1; -} - -static void print_cur_config(struct android_app* android_app) { - char lang[2], country[2]; - AConfiguration_getLanguage(android_app->config, lang); - AConfiguration_getCountry(android_app->config, country); - - LOGI("Config: mcc=%d mnc=%d lang=%c%c cnt=%c%c orien=%d touch=%d dens=%d " - "keys=%d nav=%d keysHid=%d navHid=%d sdk=%d size=%d long=%d " - "modetype=%d modenight=%d", - AConfiguration_getMcc(android_app->config), - AConfiguration_getMnc(android_app->config), - lang[0], lang[1], country[0], country[1], - AConfiguration_getOrientation(android_app->config), - AConfiguration_getTouchscreen(android_app->config), - AConfiguration_getDensity(android_app->config), - AConfiguration_getKeyboard(android_app->config), - AConfiguration_getNavigation(android_app->config), - AConfiguration_getKeysHidden(android_app->config), - AConfiguration_getNavHidden(android_app->config), - AConfiguration_getSdkVersion(android_app->config), - AConfiguration_getScreenSize(android_app->config), - AConfiguration_getScreenLong(android_app->config), - AConfiguration_getUiModeType(android_app->config), - AConfiguration_getUiModeNight(android_app->config)); -} - -void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd) { - switch (cmd) { - case APP_CMD_INPUT_CHANGED: - LOGI("APP_CMD_INPUT_CHANGED\n"); - pthread_mutex_lock(&android_app->mutex); - if (android_app->inputQueue != NULL) { - AInputQueue_detachLooper(android_app->inputQueue); - } - android_app->inputQueue = android_app->pendingInputQueue; - if (android_app->inputQueue != NULL) { - LOGI("Attaching input queue to looper"); - AInputQueue_attachLooper(android_app->inputQueue, - android_app->looper, LOOPER_ID_INPUT, NULL, - &android_app->inputPollSource); - } - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - break; - - case APP_CMD_INIT_WINDOW: - LOGI("APP_CMD_INIT_WINDOW\n"); - pthread_mutex_lock(&android_app->mutex); - android_app->window = android_app->pendingWindow; - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - break; - - case APP_CMD_TERM_WINDOW: - LOGI("APP_CMD_TERM_WINDOW\n"); - pthread_cond_broadcast(&android_app->cond); - break; - - case APP_CMD_RESUME: - case APP_CMD_START: - case APP_CMD_PAUSE: - case APP_CMD_STOP: - LOGI("activityState=%d\n", cmd); - pthread_mutex_lock(&android_app->mutex); - android_app->activityState = cmd; - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - break; - - case APP_CMD_CONFIG_CHANGED: - LOGI("APP_CMD_CONFIG_CHANGED\n"); - AConfiguration_fromAssetManager(android_app->config, - android_app->activity->assetManager); - print_cur_config(android_app); - break; - - case APP_CMD_DESTROY: - LOGI("APP_CMD_DESTROY\n"); - android_app->destroyRequested = 1; - break; - } -} - -void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd) { - switch (cmd) { - case APP_CMD_TERM_WINDOW: - LOGI("APP_CMD_TERM_WINDOW\n"); - pthread_mutex_lock(&android_app->mutex); - android_app->window = NULL; - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - break; - - case APP_CMD_SAVE_STATE: - LOGI("APP_CMD_SAVE_STATE\n"); - pthread_mutex_lock(&android_app->mutex); - android_app->stateSaved = 1; - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - break; - - case APP_CMD_RESUME: - free_saved_state(android_app); - break; - } -} - -void app_dummy() { - -} - -static void android_app_destroy(struct android_app* android_app) { - LOGI("android_app_destroy!"); - free_saved_state(android_app); - pthread_mutex_lock(&android_app->mutex); - if (android_app->inputQueue != NULL) { - AInputQueue_detachLooper(android_app->inputQueue); - } - AConfiguration_delete(android_app->config); - android_app->destroyed = 1; - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - // Can't touch android_app object after this. -} - -static void process_input(struct android_app* app, struct android_poll_source* source) { - AInputEvent* event = NULL; - if (AInputQueue_getEvent(app->inputQueue, &event) >= 0) { - LOGI("New input event: type=%d\n", AInputEvent_getType(event)); - if (AInputQueue_preDispatchEvent(app->inputQueue, event)) { - return; - } - int32_t handled = 0; - if (app->onInputEvent != NULL) handled = app->onInputEvent(app, event); - AInputQueue_finishEvent(app->inputQueue, event, handled); - } else { - LOGI("Failure reading next input event: %s\n", strerror(errno)); - } -} - -static void process_cmd(struct android_app* app, struct android_poll_source* source) { - int8_t cmd = android_app_read_cmd(app); - android_app_pre_exec_cmd(app, cmd); - if (app->onAppCmd != NULL) app->onAppCmd(app, cmd); - android_app_post_exec_cmd(app, cmd); -} - -static void* android_app_entry(void* param) { - struct android_app* android_app = (struct android_app*)param; - - android_app->config = AConfiguration_new(); - AConfiguration_fromAssetManager(android_app->config, android_app->activity->assetManager); - - print_cur_config(android_app); - - android_app->cmdPollSource.id = LOOPER_ID_MAIN; - android_app->cmdPollSource.app = android_app; - android_app->cmdPollSource.process = process_cmd; - android_app->inputPollSource.id = LOOPER_ID_INPUT; - android_app->inputPollSource.app = android_app; - android_app->inputPollSource.process = process_input; - - ALooper* looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS); - ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, ALOOPER_EVENT_INPUT, NULL, - &android_app->cmdPollSource); - android_app->looper = looper; - - pthread_mutex_lock(&android_app->mutex); - android_app->running = 1; - pthread_cond_broadcast(&android_app->cond); - pthread_mutex_unlock(&android_app->mutex); - - android_main(android_app); - - android_app_destroy(android_app); - return NULL; -} - -// -------------------------------------------------------------------- -// Native activity interaction (called from main thread) -// -------------------------------------------------------------------- - -static struct android_app* android_app_create(ANativeActivity* activity, - void* savedState, size_t savedStateSize) { - struct android_app* android_app = (struct android_app*)malloc(sizeof(struct android_app)); - memset(android_app, 0, sizeof(struct android_app)); - android_app->activity = activity; - - pthread_mutex_init(&android_app->mutex, NULL); - pthread_cond_init(&android_app->cond, NULL); - - if (savedState != NULL) { - android_app->savedState = malloc(savedStateSize); - android_app->savedStateSize = savedStateSize; - memcpy(android_app->savedState, savedState, savedStateSize); - } - - int msgpipe[2]; - if (pipe(msgpipe)) { - LOGI("could not create pipe: %s", strerror(errno)); - } - android_app->msgread = msgpipe[0]; - android_app->msgwrite = msgpipe[1]; - - pthread_attr_t attr; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - pthread_create(&android_app->thread, &attr, android_app_entry, android_app); - - // Wait for thread to start. - pthread_mutex_lock(&android_app->mutex); - while (!android_app->running) { - pthread_cond_wait(&android_app->cond, &android_app->mutex); - } - pthread_mutex_unlock(&android_app->mutex); - - return android_app; -} - -static void android_app_write_cmd(struct android_app* android_app, int8_t cmd) { - if (write(android_app->msgwrite, &cmd, sizeof(cmd)) != sizeof(cmd)) { - LOGI("Failure writing android_app cmd: %s\n", strerror(errno)); - } -} - -static void android_app_set_input(struct android_app* android_app, AInputQueue* inputQueue) { - pthread_mutex_lock(&android_app->mutex); - android_app->pendingInputQueue = inputQueue; - android_app_write_cmd(android_app, APP_CMD_INPUT_CHANGED); - while (android_app->inputQueue != android_app->pendingInputQueue) { - pthread_cond_wait(&android_app->cond, &android_app->mutex); - } - pthread_mutex_unlock(&android_app->mutex); -} - -static void android_app_set_window(struct android_app* android_app, ANativeWindow* window) { - pthread_mutex_lock(&android_app->mutex); - if (android_app->pendingWindow != NULL) { - android_app_write_cmd(android_app, APP_CMD_TERM_WINDOW); - } - android_app->pendingWindow = window; - if (window != NULL) { - android_app_write_cmd(android_app, APP_CMD_INIT_WINDOW); - } - while (android_app->window != android_app->pendingWindow) { - pthread_cond_wait(&android_app->cond, &android_app->mutex); - } - pthread_mutex_unlock(&android_app->mutex); -} - -static void android_app_set_activity_state(struct android_app* android_app, int8_t cmd) { - pthread_mutex_lock(&android_app->mutex); - android_app_write_cmd(android_app, cmd); - while (android_app->activityState != cmd) { - pthread_cond_wait(&android_app->cond, &android_app->mutex); - } - pthread_mutex_unlock(&android_app->mutex); -} - -static void android_app_free(struct android_app* android_app) { - pthread_mutex_lock(&android_app->mutex); - android_app_write_cmd(android_app, APP_CMD_DESTROY); - while (!android_app->destroyed) { - pthread_cond_wait(&android_app->cond, &android_app->mutex); - } - pthread_mutex_unlock(&android_app->mutex); - - close(android_app->msgread); - close(android_app->msgwrite); - pthread_cond_destroy(&android_app->cond); - pthread_mutex_destroy(&android_app->mutex); - free(android_app); -} - -static void onDestroy(ANativeActivity* activity) { - LOGI("Destroy: %p\n", activity); - android_app_free((struct android_app*)activity->instance); -} - -static void onStart(ANativeActivity* activity) { - LOGI("Start: %p\n", activity); - android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_START); -} - -static void onResume(ANativeActivity* activity) { - LOGI("Resume: %p\n", activity); - android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_RESUME); -} - -static void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen) { - struct android_app* android_app = (struct android_app*)activity->instance; - void* savedState = NULL; - - LOGI("SaveInstanceState: %p\n", activity); - pthread_mutex_lock(&android_app->mutex); - android_app->stateSaved = 0; - android_app_write_cmd(android_app, APP_CMD_SAVE_STATE); - while (!android_app->stateSaved) { - pthread_cond_wait(&android_app->cond, &android_app->mutex); - } - - if (android_app->savedState != NULL) { - savedState = android_app->savedState; - *outLen = android_app->savedStateSize; - android_app->savedState = NULL; - android_app->savedStateSize = 0; - } - - pthread_mutex_unlock(&android_app->mutex); - - return savedState; -} - -static void onPause(ANativeActivity* activity) { - LOGI("Pause: %p\n", activity); - android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_PAUSE); -} - -static void onStop(ANativeActivity* activity) { - LOGI("Stop: %p\n", activity); - android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_STOP); -} - -static void onConfigurationChanged(ANativeActivity* activity) { - struct android_app* android_app = (struct android_app*)activity->instance; - LOGI("ConfigurationChanged: %p\n", activity); - android_app_write_cmd(android_app, APP_CMD_CONFIG_CHANGED); -} - -static void onLowMemory(ANativeActivity* activity) { - struct android_app* android_app = (struct android_app*)activity->instance; - LOGI("LowMemory: %p\n", activity); - android_app_write_cmd(android_app, APP_CMD_LOW_MEMORY); -} - -static void onWindowFocusChanged(ANativeActivity* activity, int focused) { - LOGI("WindowFocusChanged: %p -- %d\n", activity, focused); - android_app_write_cmd((struct android_app*)activity->instance, - focused ? APP_CMD_GAINED_FOCUS : APP_CMD_LOST_FOCUS); -} - -static void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window) { - LOGI("NativeWindowCreated: %p -- %p\n", activity, window); - android_app_set_window((struct android_app*)activity->instance, window); -} - -static void onNativeWindowDestroyed(ANativeActivity* activity, ANativeWindow* window) { - LOGI("NativeWindowDestroyed: %p -- %p\n", activity, window); - android_app_set_window((struct android_app*)activity->instance, NULL); -} - -static void onInputQueueCreated(ANativeActivity* activity, AInputQueue* queue) { - LOGI("InputQueueCreated: %p -- %p\n", activity, queue); - android_app_set_input((struct android_app*)activity->instance, queue); -} - -static void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue) { - LOGI("InputQueueDestroyed: %p -- %p\n", activity, queue); - android_app_set_input((struct android_app*)activity->instance, NULL); -} - -void ANativeActivity_onCreate(ANativeActivity* activity, - void* savedState, size_t savedStateSize) { - LOGI("Creating: %p\n", activity); - activity->callbacks->onDestroy = onDestroy; - activity->callbacks->onStart = onStart; - activity->callbacks->onResume = onResume; - activity->callbacks->onSaveInstanceState = onSaveInstanceState; - activity->callbacks->onPause = onPause; - activity->callbacks->onStop = onStop; - activity->callbacks->onConfigurationChanged = onConfigurationChanged; - activity->callbacks->onLowMemory = onLowMemory; - activity->callbacks->onWindowFocusChanged = onWindowFocusChanged; - activity->callbacks->onNativeWindowCreated = onNativeWindowCreated; - activity->callbacks->onNativeWindowDestroyed = onNativeWindowDestroyed; - activity->callbacks->onInputQueueCreated = onInputQueueCreated; - activity->callbacks->onInputQueueDestroyed = onInputQueueDestroyed; - - activity->instance = android_app_create(activity, savedState, savedStateSize); -} -#endif diff --git a/platform/android/android_native_app_glue.h b/platform/android/android_native_app_glue.h deleted file mode 100644 index 36278d4c66..0000000000 --- a/platform/android/android_native_app_glue.h +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * 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. - * - */ - -#ifndef _ANDROID_NATIVE_APP_GLUE_H -#define _ANDROID_NATIVE_APP_GLUE_H -#ifdef ANDROID_NATIVE_ACTIVITY - -#include <poll.h> -#include <pthread.h> -#include <sched.h> - -#include <android/configuration.h> -#include <android/looper.h> -#include <android/native_activity.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * The native activity interface provided by <android/native_activity.h> - * is based on a set of application-provided callbacks that will be called - * by the Activity's main thread when certain events occur. - * - * This means that each one of this callbacks _should_ _not_ block, or they - * risk having the system force-close the application. This programming - * model is direct, lightweight, but constraining. - * - * The 'threaded_native_app' static library is used to provide a different - * execution model where the application can implement its own main event - * loop in a different thread instead. Here's how it works: - * - * 1/ The application must provide a function named "android_main()" that - * will be called when the activity is created, in a new thread that is - * distinct from the activity's main thread. - * - * 2/ android_main() receives a pointer to a valid "android_app" structure - * that contains references to other important objects, e.g. the - * ANativeActivity obejct instance the application is running in. - * - * 3/ the "android_app" object holds an ALooper instance that already - * listens to two important things: - * - * - activity lifecycle events (e.g. "pause", "resume"). See APP_CMD_XXX - * declarations below. - * - * - input events coming from the AInputQueue attached to the activity. - * - * Each of these correspond to an ALooper identifier returned by - * ALooper_pollOnce with values of LOOPER_ID_MAIN and LOOPER_ID_INPUT, - * respectively. - * - * Your application can use the same ALooper to listen to additional - * file-descriptors. They can either be callback based, or with return - * identifiers starting with LOOPER_ID_USER. - * - * 4/ Whenever you receive a LOOPER_ID_MAIN or LOOPER_ID_INPUT event, - * the returned data will point to an android_poll_source structure. You - * can call the process() function on it, and fill in android_app->onAppCmd - * and android_app->onInputEvent to be called for your own processing - * of the event. - * - * Alternatively, you can call the low-level functions to read and process - * the data directly... look at the process_cmd() and process_input() - * implementations in the glue to see how to do this. - * - * See the sample named "native-activity" that comes with the NDK with a - * full usage example. Also look at the JavaDoc of NativeActivity. - */ - -struct android_app; - -/** - * Data associated with an ALooper fd that will be returned as the "outData" - * when that source has data ready. - */ -struct android_poll_source { - // The identifier of this source. May be LOOPER_ID_MAIN or - // LOOPER_ID_INPUT. - int32_t id; - - // The android_app this ident is associated with. - struct android_app* app; - - // Function to call to perform the standard processing of data from - // this source. - void (*process)(struct android_app* app, struct android_poll_source* source); -}; - -/** - * This is the interface for the standard glue code of a threaded - * application. In this model, the application's code is running - * in its own thread separate from the main thread of the process. - * It is not required that this thread be associated with the Java - * VM, although it will need to be in order to make JNI calls any - * Java objects. - */ -struct android_app { - // The application can place a pointer to its own state object - // here if it likes. - void* userData; - - // Fill this in with the function to process main app commands (APP_CMD_*) - void (*onAppCmd)(struct android_app* app, int32_t cmd); - - // Fill this in with the function to process input events. At this point - // the event has already been pre-dispatched, and it will be finished upon - // return. Return 1 if you have handled the event, 0 for any default - // dispatching. - int32_t (*onInputEvent)(struct android_app* app, AInputEvent* event); - - // The ANativeActivity object instance that this app is running in. - ANativeActivity* activity; - - // The current configuration the app is running in. - AConfiguration* config; - - // This is the last instance's saved state, as provided at creation time. - // It is NULL if there was no state. You can use this as you need; the - // memory will remain around until you call android_app_exec_cmd() for - // APP_CMD_RESUME, at which point it will be freed and savedState set to NULL. - // These variables should only be changed when processing a APP_CMD_SAVE_STATE, - // at which point they will be initialized to NULL and you can malloc your - // state and place the information here. In that case the memory will be - // freed for you later. - void* savedState; - size_t savedStateSize; - - // The ALooper associated with the app's thread. - ALooper* looper; - - // When non-NULL, this is the input queue from which the app will - // receive user input events. - AInputQueue* inputQueue; - - // When non-NULL, this is the window surface that the app can draw in. - ANativeWindow* window; - - // Current content rectangle of the window; this is the area where the - // window's content should be placed to be seen by the user. - ARect contentRect; - - // Current state of the app's activity. May be either APP_CMD_START, - // APP_CMD_RESUME, APP_CMD_PAUSE, or APP_CMD_STOP; see below. - int activityState; - - // This is non-zero when the application's NativeActivity is being - // destroyed and waiting for the app thread to complete. - int destroyRequested; - - // ------------------------------------------------- - // Below are "private" implementation of the glue code. - - pthread_mutex_t mutex; - pthread_cond_t cond; - - int msgread; - int msgwrite; - - pthread_t thread; - - struct android_poll_source cmdPollSource; - struct android_poll_source inputPollSource; - - int running; - int stateSaved; - int destroyed; - int redrawNeeded; - AInputQueue* pendingInputQueue; - ANativeWindow* pendingWindow; - ARect pendingContentRect; -}; - -enum { - /** - * Looper data ID of commands coming from the app's main thread, which - * is returned as an identifier from ALooper_pollOnce(). The data for this - * identifier is a pointer to an android_poll_source structure. - * These can be retrieved and processed with android_app_read_cmd() - * and android_app_exec_cmd(). - */ - LOOPER_ID_MAIN = 1, - - /** - * Looper data ID of events coming from the AInputQueue of the - * application's window, which is returned as an identifier from - * ALooper_pollOnce(). The data for this identifier is a pointer to an - * android_poll_source structure. These can be read via the inputQueue - * object of android_app. - */ - LOOPER_ID_INPUT = 2, - - /** - * Start of user-defined ALooper identifiers. - */ - LOOPER_ID_USER = 3, -}; - -enum { - /** - * Command from main thread: the AInputQueue has changed. Upon processing - * this command, android_app->inputQueue will be updated to the new queue - * (or NULL). - */ - APP_CMD_INPUT_CHANGED, - - /** - * Command from main thread: a new ANativeWindow is ready for use. Upon - * receiving this command, android_app->window will contain the new window - * surface. - */ - APP_CMD_INIT_WINDOW, - - /** - * Command from main thread: the existing ANativeWindow needs to be - * terminated. Upon receiving this command, android_app->window still - * contains the existing window; after calling android_app_exec_cmd - * it will be set to NULL. - */ - APP_CMD_TERM_WINDOW, - - /** - * Command from main thread: the current ANativeWindow has been resized. - * Please redraw with its new size. - */ - APP_CMD_WINDOW_RESIZED, - - /** - * Command from main thread: the system needs that the current ANativeWindow - * be redrawn. You should redraw the window before handing this to - * android_app_exec_cmd() in order to avoid transient drawing glitches. - */ - APP_CMD_WINDOW_REDRAW_NEEDED, - - /** - * Command from main thread: the content area of the window has changed, - * such as from the soft input window being shown or hidden. You can - * find the new content rect in android_app::contentRect. - */ - APP_CMD_CONTENT_RECT_CHANGED, - - /** - * Command from main thread: the app's activity window has gained - * input focus. - */ - APP_CMD_GAINED_FOCUS, - - /** - * Command from main thread: the app's activity window has lost - * input focus. - */ - APP_CMD_LOST_FOCUS, - - /** - * Command from main thread: the current device configuration has changed. - */ - APP_CMD_CONFIG_CHANGED, - - /** - * Command from main thread: the system is running low on memory. - * Try to reduce your memory use. - */ - APP_CMD_LOW_MEMORY, - - /** - * Command from main thread: the app's activity has been started. - */ - APP_CMD_START, - - /** - * Command from main thread: the app's activity has been resumed. - */ - APP_CMD_RESUME, - - /** - * Command from main thread: the app should generate a new saved state - * for itself, to restore from later if needed. If you have saved state, - * allocate it with malloc and place it in android_app.savedState with - * the size in android_app.savedStateSize. The will be freed for you - * later. - */ - APP_CMD_SAVE_STATE, - - /** - * Command from main thread: the app's activity has been paused. - */ - APP_CMD_PAUSE, - - /** - * Command from main thread: the app's activity has been stopped. - */ - APP_CMD_STOP, - - /** - * Command from main thread: the app's activity is being destroyed, - * and waiting for the app thread to clean up and exit before proceeding. - */ - APP_CMD_DESTROY, -}; - -/** - * Call when ALooper_pollAll() returns LOOPER_ID_MAIN, reading the next - * app command message. - */ -int8_t android_app_read_cmd(struct android_app* android_app); - -/** - * Call with the command returned by android_app_read_cmd() to do the - * initial pre-processing of the given command. You can perform your own - * actions for the command after calling this function. - */ -void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd); - -/** - * Call with the command returned by android_app_read_cmd() to do the - * final post-processing of the given command. You must have done your own - * actions for the command before calling this function. - */ -void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd); - -/** - * Dummy function you can call to ensure glue code isn't stripped. - */ -void app_dummy(); - -/** - * This is the function that application code must implement, representing - * the main entry to the app. - */ -extern void android_main(struct android_app* app); - -#ifdef __cplusplus -} -#endif - -#endif /* _ANDROID_NATIVE_APP_GLUE_H */ -#endif diff --git a/platform/android/audio_driver_jandroid.cpp b/platform/android/audio_driver_jandroid.cpp index 4fab40d534..b75a4a3869 100644 --- a/platform/android/audio_driver_jandroid.cpp +++ b/platform/android/audio_driver_jandroid.cpp @@ -34,8 +34,6 @@ #include "core/project_settings.h" #include "thread_jandroid.h" -#ifndef ANDROID_NATIVE_ACTIVITY - AudioDriverAndroid *AudioDriverAndroid::s_ad = NULL; jobject AudioDriverAndroid::io; @@ -204,5 +202,3 @@ AudioDriverAndroid::AudioDriverAndroid() { s_ad = this; active = false; } - -#endif diff --git a/platform/android/audio_driver_jandroid.h b/platform/android/audio_driver_jandroid.h index 763f0e9b5a..3c51ed746d 100644 --- a/platform/android/audio_driver_jandroid.h +++ b/platform/android/audio_driver_jandroid.h @@ -33,8 +33,6 @@ #include "servers/audio_server.h" -#ifndef ANDROID_NATIVE_ACTIVITY - #include "java_glue.h" class AudioDriverAndroid : public AudioDriver { @@ -78,5 +76,4 @@ public: AudioDriverAndroid(); }; -#endif #endif // AUDIO_DRIVER_ANDROID_H diff --git a/platform/android/audio_driver_opensl.cpp b/platform/android/audio_driver_opensl.cpp index 28e3ea962f..21c61f6ca0 100644 --- a/platform/android/audio_driver_opensl.cpp +++ b/platform/android/audio_driver_opensl.cpp @@ -38,12 +38,7 @@ /* Structure for passing information to callback function */ void AudioDriverOpenSL::_buffer_callback( - SLAndroidSimpleBufferQueueItf queueItf - /* SLuint32 eventFlags, - const void * pBuffer, - SLuint32 bufferSize, - SLuint32 dataUsed*/ -) { + SLAndroidSimpleBufferQueueItf queueItf) { bool mix = true; @@ -85,7 +80,6 @@ void AudioDriverOpenSL::_buffer_callbacks( AudioDriverOpenSL *ad = (AudioDriverOpenSL *)pContext; - //ad->_buffer_callback(queueItf,eventFlags,pBuffer,bufferSize,dataUsed); ad->_buffer_callback(queueItf); } @@ -98,12 +92,9 @@ const char *AudioDriverOpenSL::get_name() const { Error AudioDriverOpenSL::init() { - SLresult - res; + SLresult res; SLEngineOption EngineOption[] = { - (SLuint32)SL_ENGINEOPTION_THREADSAFE, - (SLuint32)SL_BOOLEAN_TRUE - + { (SLuint32)SL_ENGINEOPTION_THREADSAFE, (SLuint32)SL_BOOLEAN_TRUE } }; res = slCreateEngine(&sl, 1, EngineOption, 0, NULL, NULL); if (res != SL_RESULT_SUCCESS) { @@ -126,8 +117,6 @@ void AudioDriverOpenSL::start() { mutex = Mutex::create(); active = false; - SLint32 numOutputs = 0; - SLuint32 deviceID = 0; SLresult res; buffer_size = 1024; diff --git a/platform/android/audio_driver_opensl.h b/platform/android/audio_driver_opensl.h index 8e879b27c5..39e1315a02 100644 --- a/platform/android/audio_driver_opensl.h +++ b/platform/android/audio_driver_opensl.h @@ -70,19 +70,10 @@ class AudioDriverOpenSL : public AudioDriver { static AudioDriverOpenSL *s_ad; void _buffer_callback( - SLAndroidSimpleBufferQueueItf queueItf - /* SLuint32 eventFlags, - const void * pBuffer, - SLuint32 bufferSize, - SLuint32 dataUsed*/ - ); + SLAndroidSimpleBufferQueueItf queueItf); static void _buffer_callbacks( SLAndroidSimpleBufferQueueItf queueItf, - /*SLuint32 eventFlags, - const void * pBuffer, - SLuint32 bufferSize, - SLuint32 dataUsed,*/ void *pContext); public: diff --git a/platform/android/build.gradle.template b/platform/android/build.gradle.template index cc45fee95f..18ffc74fc3 100644 --- a/platform/android/build.gradle.template +++ b/platform/android/build.gradle.template @@ -1,10 +1,11 @@ buildscript { repositories { + google() jcenter() $$GRADLE_REPOSITORY_URLS$$ } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.2.0' $$GRADLE_CLASSPATH$$ } } @@ -13,9 +14,9 @@ apply plugin: 'com.android.application' allprojects { repositories { - jcenter() mavenCentral() google() + jcenter() $$GRADLE_REPOSITORY_URLS$$ } } @@ -32,7 +33,7 @@ android { } compileSdkVersion 27 - buildToolsVersion "27.0.3" + buildToolsVersion "28.0.3" useLibrary 'org.apache.http.legacy' packagingOptions { @@ -75,9 +76,11 @@ android { $$GRADLE_JNI_DIRS$$ ] } + applicationVariants.all { variant -> - // ApplicationVariant is undocumented, but this method is widely used; may break with another version of the Android Gradle plugin - variant.outputs.get(0).setOutputFile(new File("${projectDir}/../../../bin", "android_${variant.name}.apk")) + variant.outputs.all { output -> + output.outputFileName = "../../../../../../../bin/android_${variant.name}.apk" + } } } diff --git a/platform/android/detect.py b/platform/android/detect.py index 953a2fa6d2..7a728e4ef1 100644 --- a/platform/android/detect.py +++ b/platform/android/detect.py @@ -186,7 +186,7 @@ def configure(env): env.PrependENVPath('PATH', tools_path) ccache_path = os.environ.get("CCACHE") - if ccache_path == None: + if ccache_path is None: env['CC'] = compiler_path + '/clang' env['CXX'] = compiler_path + '/clang++' else: @@ -223,7 +223,7 @@ def configure(env): else: print("Using NDK deprecated headers") env.Append(CPPFLAGS=["-isystem", lib_sysroot + "/usr/include"]) - + env.Append(CPPFLAGS='-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -fvisibility=hidden -fno-strict-aliasing'.split()) env.Append(CPPFLAGS='-DNO_STATVFS -DGLES_ENABLED'.split()) @@ -267,12 +267,12 @@ def configure(env): env.Append(LINKFLAGS=['-shared', '--sysroot=' + lib_sysroot, '-Wl,--warn-shared-textrel']) if mt_link: env.Append(LINKFLAGS=['-Wl,--threads']) - + if env["android_arch"] == "armv7": env.Append(LINKFLAGS='-Wl,--fix-cortex-a8'.split()) env.Append(LINKFLAGS='-Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now'.split()) env.Append(LINKFLAGS='-Wl,-soname,libgodot_android.so -Wl,--gc-sections'.split()) - + env.Append(LINKFLAGS=target_opts) env.Append(LINKFLAGS=common_opts) @@ -293,7 +293,7 @@ def configure(env): # Return NDK version string in source.properties (adapted from the Chromium project). def get_ndk_version(path): - if path == None: + if path is None: return None prop_file_path = os.path.join(path, "source.properties") try: diff --git a/platform/android/dir_access_android.cpp b/platform/android/dir_access_android.cpp deleted file mode 100644 index 402da4527e..0000000000 --- a/platform/android/dir_access_android.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/*************************************************************************/ -/* dir_access_android.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2018 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 ANDROID_NATIVE_ACTIVITY -#include "dir_access_android.h" -#include "file_access_android.h" - -DirAccess *DirAccessAndroid::create_fs() { - - return memnew(DirAccessAndroid); -} - -Error DirAccessAndroid::list_dir_begin() { - - list_dir_end(); - - AAssetDir *aad = AAssetManager_openDir(FileAccessAndroid::asset_manager, current_dir.utf8().get_data()); - if (!aad) - return ERR_CANT_OPEN; //nothing - - return OK; -} - -String DirAccessAndroid::get_next() { - - const char *fn = AAssetDir_getNextFileName(aad); - if (!fn) - return ""; - String s; - s.parse_utf8(fn); - current = s; - return s; -} - -bool DirAccessAndroid::current_is_dir() const { - - String sd; - if (current_dir == "") - sd = current; - else - sd = current_dir + "/" + current; - - AAssetDir *aad2 = AAssetManager_openDir(FileAccessAndroid::asset_manager, sd.utf8().get_data()); - if (aad2) { - - AAssetDir_close(aad2); - return true; - } - - return false; -} - -bool DirAccessAndroid::current_is_hidden() const { - return current != "." && current != ".." && current.begins_with("."); -} - -void DirAccessAndroid::list_dir_end() { - - if (aad == NULL) - return; - - AAssetDir_close(aad); - aad = NULL; -} - -int DirAccessAndroid::get_drive_count() { - - return 0; -} - -String DirAccessAndroid::get_drive(int p_drive) { - - return ""; -} - -Error DirAccessAndroid::change_dir(String p_dir) { - - p_dir = p_dir.simplify_path(); - - if (p_dir == "" || p_dir == "." || (p_dir == ".." && current_dir == "")) - return OK; - - String new_dir; - - if (p_dir.begins_with("/")) - new_dir = p_dir.substr(1, p_dir.length()); - else if (p_dir.begins_with("res://")) - new_dir = p_dir.substr(6, p_dir.length()); - else //relative - new_dir = new_dir + "/" + p_dir; - - //test if newdir exists - new_dir = new_dir.simplify_path(); - - AAssetDir *aad = AAssetManager_openDir(FileAccessAndroid::asset_manager, new_dir.utf8().get_data()); - if (aad) { - - current_dir = new_dir; - AAssetDir_close(aad); - return OK; - } - - return ERR_INVALID_PARAMETER; -} - -String DirAccessAndroid::get_current_dir() { - - return "/" + current_dir; -} - -bool DirAccessAndroid::file_exists(String p_file) { - - String sd; - if (current_dir == "") - sd = p_file; - else - sd = current_dir + "/" + p_file; - - AAsset *a = AAssetManager_open(FileAccessAndroid::asset_manager, sd.utf8().get_data(), AASSET_MODE_STREAMING); - if (a) { - AAsset_close(a); - return true; - } - - return false; -} - -Error DirAccessAndroid::make_dir(String p_dir) { - - ERR_FAIL_V(ERR_UNAVAILABLE); -} - -Error DirAccessAndroid::rename(String p_from, String p_to) { - - ERR_FAIL_V(ERR_UNAVAILABLE); -} - -Error DirAccessAndroid::remove(String p_name) { - - ERR_FAIL_V(ERR_UNAVAILABLE); -} - -//FileType get_file_type() const; -size_t DirAccessAndroid::get_space_left() { - - return 0; -} - -void DirAccessAndroid::make_default() { - - instance_func = create_fs; -} - -DirAccessAndroid::DirAccessAndroid() { - - aad = NULL; -} - -DirAccessAndroid::~DirAccessAndroid() { - - list_dir_end(); -} -#endif diff --git a/platform/android/dir_access_jandroid.cpp b/platform/android/dir_access_jandroid.cpp index 6a95277585..679a13217f 100644 --- a/platform/android/dir_access_jandroid.cpp +++ b/platform/android/dir_access_jandroid.cpp @@ -28,8 +28,6 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef ANDROID_NATIVE_ACTIVITY - #include "dir_access_jandroid.h" #include "core/print_string.h" #include "file_access_jandroid.h" @@ -245,4 +243,3 @@ DirAccessJAndroid::~DirAccessJAndroid() { list_dir_end(); } -#endif diff --git a/platform/android/dir_access_jandroid.h b/platform/android/dir_access_jandroid.h index 1653fb0aa5..ea1e11a4f1 100644 --- a/platform/android/dir_access_jandroid.h +++ b/platform/android/dir_access_jandroid.h @@ -31,8 +31,6 @@ #ifndef DIR_ACCESS_JANDROID_H #define DIR_ACCESS_JANDROID_H -#ifndef ANDROID_NATIVE_ACTIVITY - #include "core/os/dir_access.h" #include "java_glue.h" #include <stdio.h> @@ -87,4 +85,3 @@ public: }; #endif // DIR_ACCESS_JANDROID_H -#endif diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 3b503e2657..a3b5b6dd58 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -395,7 +395,7 @@ class EditorExportAndroid : public EditorExportPlatform { return aname; } - String get_package_name(const String &p_package) { + String get_package_name(const String &p_package) const { String pname = p_package; String basename = ProjectSettings::get_singleton()->get("application/config/name"); @@ -420,6 +420,70 @@ class EditorExportAndroid : public EditorExportPlatform { return pname; } + bool is_package_name_valid(const String &p_package, String *r_error = NULL) const { + + String pname = p_package; + + if (pname.length() == 0) { + if (r_error) { + *r_error = "Package name is missing."; + } + return false; + } + + int segments = 0; + bool first = true; + for (int i = 0; i < pname.length(); i++) { + CharType c = pname[i]; + if (first && c == '.') { + if (r_error) { + *r_error = "Package segments must be of non-zero length."; + } + return false; + } + if (c == '.') { + segments++; + first = true; + continue; + } + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_')) { + if (r_error) { + *r_error = "The character '" + String::chr(c) + "' is not allowed in Android application package names."; + } + return false; + } + if (first && (c >= '0' && c <= '9')) { + if (r_error) { + *r_error = "A digit cannot be the first character in a package segment."; + } + return false; + } + if (first && c == '_') { + if (r_error) { + *r_error = "The character '" + String::chr(c) + "' cannot be the first character in a package segment."; + } + return false; + } + first = false; + } + + if (segments == 0) { + if (r_error) { + *r_error = "The package must have at least one '.' separator."; + } + return false; + } + + if (first) { + if (r_error) { + *r_error = "Package segments must be of non-zero length."; + } + return false; + } + + return true; + } + static bool _should_compress_asset(const String &p_path, const Vector<uint8_t> &p_data) { /* @@ -608,10 +672,13 @@ class EditorExportAndroid : public EditorExportPlatform { aperms++; } - for (int i = 0; i < MAX_USER_PERMISSIONS; i++) { - String user_perm = p_preset->get("user_permissions/" + itos(i)); - if (user_perm.strip_edges() != "" && user_perm.strip_edges() != "False") - perms.push_back(user_perm.strip_edges()); + PoolStringArray user_perms = p_preset->get("permissions/custom_permissions"); + + for (int i = 0; i < user_perms.size(); i++) { + String user_perm = user_perms[i].strip_edges(); + if (!user_perm.empty()) { + perms.push_back(user_perm); + } } if (p_give_internet) { @@ -1040,10 +1107,6 @@ class EditorExportAndroid : public EditorExportPlatform { } public: - enum { - MAX_USER_PERMISSIONS = 20 - }; - typedef Error (*EditorExportSaveFunction)(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total); public: @@ -1105,17 +1168,14 @@ public: r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "architectures/" + abi), is_default)); } + r_options->push_back(ExportOption(PropertyInfo(Variant::POOL_STRING_ARRAY, "permissions/custom_permissions"), PoolStringArray())); + const char **perms = android_perms; while (*perms) { r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "permissions/" + String(*perms).to_lower()), false)); perms++; } - - for (int i = 0; i < MAX_USER_PERMISSIONS; i++) { - - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "user_permissions/" + itos(i)), false)); - } } virtual String get_name() const { @@ -1382,12 +1442,23 @@ public: } } + String pn = p_preset->get("package/unique_name"); + String pn_err; + + if (!is_package_name_valid(get_package_name(pn), &pn_err)) { + + valid = false; + err += "Invalid package name - " + pn_err + "\n"; + } + r_error = err; return valid; } - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const { - return "apk"; + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const { + List<String> list; + list.push_back("apk"); + return list; } virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) { diff --git a/platform/android/file_access_jandroid.cpp b/platform/android/file_access_jandroid.cpp index 573200bcf9..bba45ffc1d 100644 --- a/platform/android/file_access_jandroid.cpp +++ b/platform/android/file_access_jandroid.cpp @@ -28,8 +28,6 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef ANDROID_NATIVE_ACTIVITY - #include "file_access_jandroid.h" #include "core/os/os.h" #include "thread_jandroid.h" @@ -212,5 +210,3 @@ FileAccessJAndroid::~FileAccessJAndroid() { if (is_open()) close(); } - -#endif diff --git a/platform/android/file_access_jandroid.h b/platform/android/file_access_jandroid.h index 39c201ba85..98486702ab 100644 --- a/platform/android/file_access_jandroid.h +++ b/platform/android/file_access_jandroid.h @@ -31,8 +31,6 @@ #ifndef FILE_ACCESS_JANDROID_H #define FILE_ACCESS_JANDROID_H -#ifndef ANDROID_NATIVE_ACTIVITY - #include "core/os/file_access.h" #include "java_glue.h" class FileAccessJAndroid : public FileAccess { @@ -81,6 +79,4 @@ public: ~FileAccessJAndroid(); }; -#endif - #endif // FILE_ACCESS_JANDROID_H diff --git a/platform/android/godot_android.cpp b/platform/android/godot_android.cpp deleted file mode 100644 index 54692dc831..0000000000 --- a/platform/android/godot_android.cpp +++ /dev/null @@ -1,937 +0,0 @@ -/*************************************************************************/ -/* godot_android.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2018 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 ANDROID_NATIVE_ACTIVITY - -#include "core/engine.h" -#include "core/project_settings.h" -#include "file_access_android.h" -#include "main/main.h" -#include "os_android.h" - -#include <EGL/egl.h> -#include <android/log.h> -#include <android/sensor.h> -#include <android/window.h> -#include <android_native_app_glue.h> -#include <errno.h> -#include <jni.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "godot", __VA_ARGS__)) -#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "godot", __VA_ARGS__)) - -extern "C" { -JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerSingleton(JNIEnv *env, jobject obj, jstring name, jobject p_object); -JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerMethod(JNIEnv *env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args); -JNIEXPORT jstring JNICALL Java_org_godotengine_godot_Godot_getGlobal(JNIEnv *env, jobject obj, jstring path); -}; - -class JNISingleton : public Object { - - GDCLASS(JNISingleton, Object); - - struct MethodData { - - jmethodID method; - Variant::Type ret_type; - Vector<Variant::Type> argtypes; - }; - - jobject instance; - Map<StringName, MethodData> method_map; - JNIEnv *env; - -public: - void update_env(JNIEnv *p_env) { env = p_env; } - - virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { - - r_error.error = Variant::CallError::CALL_OK; - - Map<StringName, MethodData>::Element *E = method_map.find(p_method); - if (!E) { - - r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; - return Variant(); - } - - int ac = E->get().argtypes.size(); - if (ac < p_argcount) { - - r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument = ac; - return Variant(); - } - - if (ac > p_argcount) { - - r_error.error = Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; - r_error.argument = ac; - return Variant(); - } - - for (int i = 0; i < p_argcount; i++) { - - if (!Variant::can_convert(p_args[i]->get_type(), E->get().argtypes[i])) { - - r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument = i; - r_error.expected = E->get().argtypes[i]; - } - } - - jvalue *v = NULL; - - if (p_argcount) { - - v = (jvalue *)alloca(sizeof(jvalue) * p_argcount); - } - - for (int i = 0; i < p_argcount; i++) { - - switch (E->get().argtypes[i]) { - - case Variant::BOOL: { - - v[i].z = *p_args[i]; - } break; - case Variant::INT: { - - v[i].i = *p_args[i]; - } break; - case Variant::REAL: { - - v[i].f = *p_args[i]; - } break; - case Variant::STRING: { - - String s = *p_args[i]; - jstring jStr = env->NewStringUTF(s.utf8().get_data()); - v[i].l = jStr; - } break; - case Variant::STRING_ARRAY: { - - PoolVector<String> sarray = *p_args[i]; - jobjectArray arr = env->NewObjectArray(sarray.size(), env->FindClass("java/lang/String"), env->NewStringUTF("")); - - for (int j = 0; j < sarray.size(); j++) { - - env->SetObjectArrayElement(arr, j, env->NewStringUTF(sarray[i].utf8().get_data())); - } - v[i].l = arr; - - } break; - case Variant::INT_ARRAY: { - - PoolVector<int> array = *p_args[i]; - jintArray arr = env->NewIntArray(array.size()); - PoolVector<int>::Read r = array.read(); - env->SetIntArrayRegion(arr, 0, array.size(), r.ptr()); - v[i].l = arr; - - } break; - case Variant::REAL_ARRAY: { - - PoolVector<float> array = *p_args[i]; - jfloatArray arr = env->NewFloatArray(array.size()); - PoolVector<float>::Read r = array.read(); - env->SetFloatArrayRegion(arr, 0, array.size(), r.ptr()); - v[i].l = arr; - - } break; - default: { - - ERR_FAIL_V(Variant()); - } break; - } - } - - Variant ret; - - switch (E->get().ret_type) { - - case Variant::NIL: { - - env->CallVoidMethodA(instance, E->get().method, v); - } break; - case Variant::BOOL: { - - ret = env->CallBooleanMethodA(instance, E->get().method, v); - } break; - case Variant::INT: { - - ret = env->CallIntMethodA(instance, E->get().method, v); - } break; - case Variant::REAL: { - - ret = env->CallFloatMethodA(instance, E->get().method, v); - } break; - case Variant::STRING: { - - jobject o = env->CallObjectMethodA(instance, E->get().method, v); - String singname = env->GetStringUTFChars((jstring)o, NULL); - } break; - case Variant::STRING_ARRAY: { - - jobjectArray arr = (jobjectArray)env->CallObjectMethodA(instance, E->get().method, v); - - int stringCount = env->GetArrayLength(arr); - PoolVector<String> sarr; - - for (int i = 0; i < stringCount; i++) { - jstring string = (jstring)env->GetObjectArrayElement(arr, i); - const char *rawString = env->GetStringUTFChars(string, 0); - sarr.push_back(String(rawString)); - } - - ret = sarr; - - } break; - case Variant::INT_ARRAY: { - - jintArray arr = (jintArray)env->CallObjectMethodA(instance, E->get().method, v); - - int fCount = env->GetArrayLength(arr); - PoolVector<int> sarr; - sarr.resize(fCount); - - PoolVector<int>::Write w = sarr.write(); - env->GetIntArrayRegion(arr, 0, fCount, w.ptr()); - w = PoolVector<int>::Write(); - ret = sarr; - } break; - case Variant::REAL_ARRAY: { - - jfloatArray arr = (jfloatArray)env->CallObjectMethodA(instance, E->get().method, v); - - int fCount = env->GetArrayLength(arr); - PoolVector<float> sarr; - sarr.resize(fCount); - - PoolVector<float>::Write w = sarr.write(); - env->GetFloatArrayRegion(arr, 0, fCount, w.ptr()); - w = PoolVector<float>::Write(); - ret = sarr; - } break; - default: { - - ERR_FAIL_V(Variant()); - } break; - } - - return ret; - } - - jobject get_instance() const { - - return instance; - } - void set_instance(jobject p_instance) { - - instance = p_instance; - } - - void add_method(const StringName &p_name, jmethodID p_method, const Vector<Variant::Type> &p_args, Variant::Type p_ret_type) { - - MethodData md; - md.method = p_method; - md.argtypes = p_args; - md.ret_type = p_ret_type; - method_map[p_name] = md; - } - - JNISingleton() {} -}; - -//JNIEnv *JNISingleton::env=NULL; - -static HashMap<String, JNISingleton *> jni_singletons; - -struct engine { - struct android_app *app; - OS_Android *os; - JNIEnv *jni; - - ASensorManager *sensorManager; - const ASensor *accelerometerSensor; - const ASensor *magnetometerSensor; - const ASensor *gyroscopeSensor; - ASensorEventQueue *sensorEventQueue; - - bool display_active; - bool requested_quit; - int animating; - EGLDisplay display; - EGLSurface surface; - EGLContext context; - int32_t width; - int32_t height; -}; - -/** - * Initialize an EGL context for the current display. - */ -static int engine_init_display(struct engine *engine, bool p_gl2) { - // initialize OpenGL ES and EGL - - /* - * Here specify the attributes of the desired configuration. - * Below, we select an EGLConfig with at least 8 bits per color - * component compatible with on-screen windows - */ - const EGLint gl2_attribs[] = { - // EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_BLUE_SIZE, 4, - EGL_GREEN_SIZE, 4, - EGL_RED_SIZE, 4, - EGL_ALPHA_SIZE, 0, - EGL_DEPTH_SIZE, 16, - EGL_STENCIL_SIZE, EGL_DONT_CARE, - EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_NONE - }; - - const EGLint gl1_attribs[] = { - // EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_BLUE_SIZE, 4, - EGL_GREEN_SIZE, 4, - EGL_RED_SIZE, 4, - EGL_ALPHA_SIZE, 0, - EGL_DEPTH_SIZE, 16, - EGL_STENCIL_SIZE, EGL_DONT_CARE, - EGL_NONE - }; - - const EGLint *attribs = p_gl2 ? gl2_attribs : gl1_attribs; - - EGLint w, h, dummy, format; - EGLint numConfigs; - EGLConfig config; - EGLSurface surface; - EGLContext context; - - EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); - - eglInitialize(display, 0, 0); - - /* Here, the application chooses the configuration it desires. In this - * sample, we have a very simplified selection process, where we pick - * the first EGLConfig that matches our criteria */ - - eglChooseConfig(display, attribs, &config, 1, &numConfigs); - - LOGI("Num configs: %i\n", numConfigs); - - /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is - * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). - * As soon as we picked a EGLConfig, we can safely reconfigure the - * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ - eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); - - ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format); - //ANativeWindow_setFlags(engine->app->window, 0, 0, format|); - - surface = eglCreateWindowSurface(display, config, engine->app->window, NULL); - - const EGLint context_attribs[] = { - EGL_CONTEXT_CLIENT_VERSION, 2, - EGL_NONE - }; - context = eglCreateContext(display, config, EGL_NO_CONTEXT, p_gl2 ? context_attribs : NULL); - - if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) { - LOGW("Unable to eglMakeCurrent"); - return -1; - } - - eglQuerySurface(display, surface, EGL_WIDTH, &w); - eglQuerySurface(display, surface, EGL_HEIGHT, &h); - - //engine->os->set_egl_extensions(eglQueryString(display,EGL_EXTENSIONS)); - engine->os->init_video_mode(w, h); - - engine->display = display; - engine->context = context; - engine->surface = surface; - engine->width = w; - engine->height = h; - engine->display_active = true; - - //engine->state.angle = 0; - - // Initialize GL state. - //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - glEnable(GL_CULL_FACE); - // glShadeModel(GL_SMOOTH); - glDisable(GL_DEPTH_TEST); - LOGI("GL Version: %s - %s %s\n", glGetString(GL_VERSION), glGetString(GL_VENDOR), glGetString(GL_RENDERER)); - - return 0; -} - -static void engine_draw_frame(struct engine *engine) { - if (engine->display == NULL) { - // No display. - return; - } - - // Just fill the screen with a color. - //glClearColor(0,1,0,1); - //glClear(GL_COLOR_BUFFER_BIT); - if (engine->os && engine->os->main_loop_iterate() == true) { - - engine->requested_quit = true; - return; //should exit instead - } - - eglSwapBuffers(engine->display, engine->surface); -} - -static void engine_term_display(struct engine *engine) { - if (engine->display != EGL_NO_DISPLAY) { - eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - if (engine->context != EGL_NO_CONTEXT) { - eglDestroyContext(engine->display, engine->context); - } - if (engine->surface != EGL_NO_SURFACE) { - eglDestroySurface(engine->display, engine->surface); - } - eglTerminate(engine->display); - } - - engine->animating = 0; - engine->display = EGL_NO_DISPLAY; - engine->context = EGL_NO_CONTEXT; - engine->surface = EGL_NO_SURFACE; - engine->display_active = false; -} - -/** - * Process the next input event. - */ -static int32_t engine_handle_input(struct android_app *app, AInputEvent *event) { - struct engine *engine = (struct engine *)app->userData; - - if (!engine->os) - return 0; - - switch (AInputEvent_getType(event)) { - - case AINPUT_EVENT_TYPE_KEY: { - - int ac = AKeyEvent_getAction(event); - switch (ac) { - - case AKEY_EVENT_ACTION_DOWN: { - - int32_t code = AKeyEvent_getKeyCode(event); - if (code == AKEYCODE_BACK) { - - //AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, int handled); - if (engine->os) - engine->os->main_loop_request_quit(); - return 1; - } - - } break; - case AKEY_EVENT_ACTION_UP: { - - } break; - } - - } break; - case AINPUT_EVENT_TYPE_MOTION: { - - Vector<OS_Android::TouchPos> touchvec; - - int pc = AMotionEvent_getPointerCount(event); - - touchvec.resize(pc); - - for (int i = 0; i < pc; i++) { - - touchvec[i].pos.x = AMotionEvent_getX(event, i); - touchvec[i].pos.y = AMotionEvent_getY(event, i); - touchvec[i].id = AMotionEvent_getPointerId(event, i); - } - - //System.out.printf("gaction: %d\n",event.getAction()); - int pidx = (AMotionEvent_getAction(event) & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> 8; - switch (AMotionEvent_getAction(event) & AMOTION_EVENT_ACTION_MASK) { - - case AMOTION_EVENT_ACTION_DOWN: { - engine->os->process_touch(0, 0, touchvec); - - //System.out.printf("action down at: %f,%f\n", event.getX(),event.getY()); - } break; - case AMOTION_EVENT_ACTION_MOVE: { - engine->os->process_touch(1, 0, touchvec); - /* - for(int i=0;i<event.getPointerCount();i++) { - System.out.printf("%d - moved to: %f,%f\n",i, event.getX(i),event.getY(i)); - } - */ - } break; - case AMOTION_EVENT_ACTION_POINTER_UP: { - - engine->os->process_touch(4, pidx, touchvec); - //System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx)); - } break; - case AMOTION_EVENT_ACTION_POINTER_DOWN: { - engine->os->process_touch(3, pidx, touchvec); - //System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx)); - } break; - case AMOTION_EVENT_ACTION_CANCEL: - case AMOTION_EVENT_ACTION_UP: { - engine->os->process_touch(2, 0, touchvec); - /* - for(int i=0;i<event.getPointerCount();i++) { - System.out.printf("%d - up! %f,%f\n",i, event.getX(i),event.getY(i)); - } - */ - } break; - } - - return 1; - } break; - } - - return 0; -} - -/** - * Process the next main command. - */ - -static void _gfx_init(void *ud, bool p_gl2) { - - struct engine *engine = (struct engine *)ud; - engine_init_display(engine, p_gl2); -} - -static void engine_handle_cmd(struct android_app *app, int32_t cmd) { - struct engine *engine = (struct engine *)app->userData; - // LOGI("**** CMD %i\n",cmd); - switch (cmd) { - case APP_CMD_SAVE_STATE: - // The system has asked us to save our current state. Do so. - //engine->app->savedState = malloc(sizeof(struct saved_state)); - //*((struct saved_state*)engine->app->savedState) = engine->state; - //engine->app->savedStateSize = sizeof(struct saved_state); - break; - case APP_CMD_CONFIG_CHANGED: - case APP_CMD_WINDOW_RESIZED: { - - if (engine->display_active) { - - EGLint w, h; - eglQuerySurface(engine->display, engine->surface, EGL_WIDTH, &w); - eglQuerySurface(engine->display, engine->surface, EGL_HEIGHT, &h); - // if (w==engine->os->get_video_mode().width && h==engine->os->get_video_mode().height) - // break; - - engine_term_display(engine); - } - - engine->os->reload_gfx(); - engine_draw_frame(engine); - engine->animating = 1; - - } break; - case APP_CMD_INIT_WINDOW: - //The window is being shown, get it ready. - //LOGI("INIT WINDOW"); - if (engine->app->window != NULL) { - - if (engine->os == NULL) { - - //do initialization here, when there's OpenGL! hackish but the only way - engine->os = new OS_Android(_gfx_init, engine); - - __android_log_print(ANDROID_LOG_INFO, "godot", "pre asdasd setup..."); - - Error err = Main::setup("apk", 0, NULL); - - String modules = ProjectSettings::get_singleton()->get("android/modules"); - Vector<String> mods = modules.split(",", false); - mods.push_back("GodotOS"); - __android_log_print(ANDROID_LOG_INFO, "godot", "mod count: %i", mods.size()); - - if (mods.size()) { - - jclass activityClass = engine->jni->FindClass("android/app/NativeActivity"); - - jmethodID getClassLoader = engine->jni->GetMethodID(activityClass, "getClassLoader", "()Ljava/lang/ClassLoader;"); - - jobject cls = engine->jni->CallObjectMethod(app->activity->clazz, getClassLoader); - - jclass classLoader = engine->jni->FindClass("java/lang/ClassLoader"); - - jmethodID findClass = engine->jni->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); - - static JNINativeMethod methods[] = { - { "registerSingleton", "(Ljava/lang/String;Ljava/lang/Object;)V", (void *)&Java_org_godotengine_godot_Godot_registerSingleton }, - { "registerMethod", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V", (void *)&Java_org_godotengine_godot_Godot_registerMethod }, - { "getGlobal", "(Ljava/lang/String;)Ljava/lang/String;", (void *)&Java_org_godotengine_godot_Godot_getGlobal }, - }; - - jstring gstrClassName = engine->jni->NewStringUTF("org/godotengine/godot/Godot"); - jclass GodotClass = (jclass)engine->jni->CallObjectMethod(cls, findClass, gstrClassName); - - __android_log_print(ANDROID_LOG_INFO, "godot", "godot ****^*^*?^*^*class data %x", GodotClass); - - engine->jni->RegisterNatives(GodotClass, methods, sizeof(methods) / sizeof(methods[0])); - - for (int i = 0; i < mods.size(); i++) { - - String m = mods[i]; - //jclass singletonClass = engine->jni->FindClass(m.utf8().get_data()); - - jstring strClassName = engine->jni->NewStringUTF(m.utf8().get_data()); - jclass singletonClass = (jclass)engine->jni->CallObjectMethod(cls, findClass, strClassName); - - __android_log_print(ANDROID_LOG_INFO, "godot", "****^*^*?^*^*class data %x", singletonClass); - jmethodID initialize = engine->jni->GetStaticMethodID(singletonClass, "initialize", "(Landroid/app/Activity;)Lorg/godotengine/godot/Godot$SingletonBase;"); - - jobject obj = engine->jni->CallStaticObjectMethod(singletonClass, initialize, app->activity->clazz); - __android_log_print(ANDROID_LOG_INFO, "godot", "****^*^*?^*^*class instance %x", obj); - jobject gob = engine->jni->NewGlobalRef(obj); - } - } - - if (!Main::start()) - return; //should exit instead and print the error - - engine->os->main_loop_begin(); - } else { - //i guess recreate resources? - engine->os->reload_gfx(); - } - - engine->animating = 1; - engine_draw_frame(engine); - } - break; - case APP_CMD_TERM_WINDOW: - // The window is being hidden or closed, clean it up. - //LOGI("TERM WINDOW"); - engine_term_display(engine); - break; - case APP_CMD_GAINED_FOCUS: - // When our app gains focus, we start monitoring the accelerometer. - if (engine->accelerometerSensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->accelerometerSensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->accelerometerSensor, (1000L / 60) * 1000); - } - // start monitoring gravity - if (engine->gravitySensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->gravitySensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->gravitySensor, (1000L / 60) * 1000); - } - // Also start monitoring the magnetometer. - if (engine->magnetometerSensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->magnetometerSensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->magnetometerSensor, (1000L / 60) * 1000); - } - // And the gyroscope. - if (engine->gyroscopeSensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->gyroscopeSensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->gyroscopeSensor, (1000L / 60) * 1000); - } - engine->animating = 1; - break; - case APP_CMD_LOST_FOCUS: - // When our app loses focus, we stop monitoring the sensors. - // This is to avoid consuming battery while not being used. - if (engine->accelerometerSensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->accelerometerSensor); - } - if (engine->gravitySensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->gravitySensor); - } - if (engine->magnetometerSensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->magnetometerSensor); - } - if (engine->gyroscopeSensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->gyroscopeSensor); - } - // Also stop animating. - engine->animating = 0; - engine_draw_frame(engine); - break; - } -} - -void android_main(struct android_app *app) { - struct engine engine; - // Make sure glue isn't stripped. - app_dummy(); - - memset(&engine, 0, sizeof(engine)); - app->userData = &engine; - app->onAppCmd = engine_handle_cmd; - app->onInputEvent = engine_handle_input; - engine.app = app; - engine.requested_quit = false; - engine.os = NULL; - engine.display_active = false; - - FileAccessAndroid::asset_manager = app->activity->assetManager; - - // Prepare to monitor sensors - engine.sensorManager = ASensorManager_getInstance(); - engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_ACCELEROMETER); - engine.gravitySensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_GRAVITY); - engine.magnetometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_MAGNETIC_FIELD); - engine.gyroscopeSensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_GYROSCOPE); - engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager, - app->looper, LOOPER_ID_USER, NULL, NULL); - - ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_FULLSCREEN | AWINDOW_FLAG_KEEP_SCREEN_ON, 0); - - app->activity->vm->AttachCurrentThread(&engine.jni, NULL); - - // loop waiting for stuff to do. - - while (1) { - // Read all pending events. - int ident; - int events; - struct android_poll_source *source; - - // If not animating, we will block forever waiting for events. - // If animating, we loop until all events are read, then continue - // to draw the next frame of animation. - - int nullmax = 50; - while ((ident = ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events, - (void **)&source)) >= 0) { - - // Process this event. - - if (source != NULL) { - // LOGI("process\n"); - source->process(app, source); - } else { - nullmax--; - if (nullmax < 0) - break; - } - - // If a sensor has data, process it now. - // LOGI("events\n"); - if (ident == LOOPER_ID_USER) { - if (engine.accelerometerSensor != NULL || engine.magnetometerSensor != NULL || engine.gyroscopeSensor != NULL) { - ASensorEvent event; - while (ASensorEventQueue_getEvents(engine.sensorEventQueue, - &event, 1) > 0) { - - if (engine.os) { - if (event.acceleration != NULL) { - engine.os->process_accelerometer(Vector3(event.acceleration.x, event.acceleration.y, - event.acceleration.z)); - } - if (event.magnetic != NULL) { - engine.os->process_magnetometer(Vector3(event.magnetic.x, event.magnetic.y, - event.magnetic.z)); - } - if (event.vector != NULL) { - engine.os->process_gyroscope(Vector3(event.vector.x, event.vector.y, - event.vector.z)); - } - } - } - } - } - - // Check if we are exiting. - if (app->destroyRequested != 0) { - if (engine.os) { - engine.os->main_loop_request_quit(); - } - app->destroyRequested = 0; - } - - if (engine.requested_quit) { - engine_term_display(&engine); - exit(0); - } - - // LOGI("end\n"); - } - - // LOGI("engine animating? %i\n",engine.animating); - - if (engine.animating) { - //do os render - - engine_draw_frame(&engine); - //LOGI("TERM WINDOW"); - } - } -} - -JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerSingleton(JNIEnv *env, jobject obj, jstring name, jobject p_object) { - - String singname = env->GetStringUTFChars(name, NULL); - JNISingleton *s = memnew(JNISingleton); - s->update_env(env); - s->set_instance(env->NewGlobalRef(p_object)); - jni_singletons[singname] = s; - - Engine::get_singleton()->add_singleton(Engine::Singleton(singname, s)); -} - -static Variant::Type get_jni_type(const String &p_type) { - - static struct { - const char *name; - Variant::Type type; - } _type_to_vtype[] = { - { "void", Variant::NIL }, - { "boolean", Variant::BOOL }, - { "int", Variant::INT }, - { "float", Variant::REAL }, - { "java.lang.String", Variant::STRING }, - { "[I", Variant::INT_ARRAY }, - { "[F", Variant::REAL_ARRAY }, - { "[Ljava.lang.String;", Variant::STRING_ARRAY }, - { NULL, Variant::NIL } - }; - - int idx = 0; - - while (_type_to_vtype[idx].name) { - - if (p_type == _type_to_vtype[idx].name) - return _type_to_vtype[idx].type; - - idx++; - } - - return Variant::NIL; -} - -static const char *get_jni_sig(const String &p_type) { - - static struct { - const char *name; - const char *sig; - } _type_to_vtype[] = { - { "void", "V" }, - { "boolean", "Z" }, - { "int", "I" }, - { "float", "F" }, - { "java.lang.String", "Ljava/lang/String;" }, - { "[I", "[I" }, - { "[F", "[F" }, - { "[Ljava.lang.String;", "[Ljava/lang/String;" }, - { NULL, "V" } - }; - - int idx = 0; - - while (_type_to_vtype[idx].name) { - - if (p_type == _type_to_vtype[idx].name) - return _type_to_vtype[idx].sig; - - idx++; - } - - return ""; -} - -JNIEXPORT jstring JNICALL Java_org_godotengine_godot_Godot_getGlobal(JNIEnv *env, jobject obj, jstring path) { - - String js = env->GetStringUTFChars(path, NULL); - - return env->NewStringUTF(ProjectSettings::get_singleton()->get(js).operator String().utf8().get_data()); -} - -JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerMethod(JNIEnv *env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args) { - - String singname = env->GetStringUTFChars(sname, NULL); - - ERR_FAIL_COND(!jni_singletons.has(singname)); - - JNISingleton *s = jni_singletons.get(singname); - - String mname = env->GetStringUTFChars(name, NULL); - String retval = env->GetStringUTFChars(ret, NULL); - Vector<Variant::Type> types; - String cs = "("; - - int stringCount = env->GetArrayLength(args); - - for (int i = 0; i < stringCount; i++) { - - jstring string = (jstring)env->GetObjectArrayElement(args, i); - const char *rawString = env->GetStringUTFChars(string, 0); - types.push_back(get_jni_type(String(rawString))); - cs += get_jni_sig(String(rawString)); - } - - cs += ")"; - cs += get_jni_sig(retval); - jclass cls = env->GetObjectClass(s->get_instance()); - jmethodID mid = env->GetMethodID(cls, mname.ascii().get_data(), cs.ascii().get_data()); - if (!mid) { - - print_line("RegisterMethod: Failed getting method ID: " + mname); - } - - s->add_method(mname, mid, types, get_jni_type(retval)); -} - -#endif diff --git a/platform/android/java/gradle/wrapper/gradle-wrapper.properties b/platform/android/java/gradle/wrapper/gradle-wrapper.properties index fe37fa74a9..6fb3a79546 100644 --- a/platform/android/java/gradle/wrapper/gradle-wrapper.properties +++ b/platform/android/java/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml b/platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml index 23bac02294..104993da7e 100644 --- a/platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml +++ b/platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml @@ -32,9 +32,9 @@ android:id="@+id/appIcon" android:layout_width="fill_parent" android:layout_height="25dp" - android:scaleType="centerInside" + android:scaleType="centerInside" android:layout_alignParentLeft="true" - android:layout_alignParentTop="true" + android:layout_alignParentTop="true" android:src="@android:drawable/stat_sys_download" /> <TextView diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java index ab37f7a02c..88194f00d1 100644 --- a/platform/android/java/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/src/org/godotengine/godot/Godot.java @@ -279,7 +279,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC // ...add to FrameLayout layout.addView(edittext); - mView = new GodotView(getApplication(), io, use_gl3, use_32_bits, use_debug_opengl,this); + mView = new GodotView(getApplication(), io, use_gl3, use_32_bits, use_debug_opengl, this); layout.addView(mView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); edittext.setView(mView); io.setEdit(edittext); diff --git a/platform/android/java/src/org/godotengine/godot/GodotView.java b/platform/android/java/src/org/godotengine/godot/GodotView.java index 181ffc3b4b..4cb4db33de 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotView.java +++ b/platform/android/java/src/org/godotengine/godot/GodotView.java @@ -86,7 +86,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { private Godot activity; private InputManagerCompat mInputManager; - public GodotView(Context context, GodotIO p_io, boolean p_use_gl3, boolean p_use_32_bits, boolean p_use_debug_opengl,Godot p_activity) { + public GodotView(Context context, GodotIO p_io, boolean p_use_gl3, boolean p_use_32_bits, boolean p_use_debug_opengl, Godot p_activity) { super(context); ctx = context; io = p_io; @@ -204,48 +204,65 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { return i; } } - onInputDeviceAdded(device_id); - return joy_devices.size() - 1; + + return -1; } @Override public void onInputDeviceAdded(int deviceId) { - joystick joy = new joystick(); - joy.device_id = deviceId; - final int id = joy_devices.size(); - InputDevice device = mInputManager.getInputDevice(deviceId); - final String name = device.getName(); - joy.name = device.getName(); - joy.axes = new ArrayList<InputDevice.MotionRange>(); - joy.hats = new ArrayList<InputDevice.MotionRange>(); - List<InputDevice.MotionRange> ranges = device.getMotionRanges(); - Collections.sort(ranges, new RangeComparator()); - for (InputDevice.MotionRange range : ranges) { - if (range.getAxis() == MotionEvent.AXIS_HAT_X || range.getAxis() == MotionEvent.AXIS_HAT_Y) { - joy.hats.add(range); - } else { - joy.axes.add(range); + int id = find_joy_device(deviceId); + + // Check if the device has not been already added + if (id < 0) { + InputDevice device = mInputManager.getInputDevice(deviceId); + + id = joy_devices.size(); + + joystick joy = new joystick(); + joy.device_id = deviceId; + joy.name = device.getName(); + joy.axes = new ArrayList<InputDevice.MotionRange>(); + joy.hats = new ArrayList<InputDevice.MotionRange>(); + + List<InputDevice.MotionRange> ranges = device.getMotionRanges(); + Collections.sort(ranges, new RangeComparator()); + + for (InputDevice.MotionRange range : ranges) { + if (range.getAxis() == MotionEvent.AXIS_HAT_X || range.getAxis() == MotionEvent.AXIS_HAT_Y) { + joy.hats.add(range); + } else { + joy.axes.add(range); + } } + + joy_devices.add(joy); + + final int device_id = id; + final String name = joy.name; + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.joyconnectionchanged(device_id, true, name); + } + }); } - joy_devices.add(joy); - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.joyconnectionchanged(id, true, name); - } - }); } @Override public void onInputDeviceRemoved(int deviceId) { - final int id = find_joy_device(deviceId); - joy_devices.remove(id); - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.joyconnectionchanged(id, false, ""); - } - }); + final int device_id = find_joy_device(deviceId); + + // Check if the evice has not been already removed + if (device_id > -1) { + joy_devices.remove(device_id); + + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.joyconnectionchanged(device_id, false, ""); + } + }); + } } @Override @@ -266,15 +283,18 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { if ((source & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK || (source & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD || (source & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) { final int button = get_godot_button(keyCode); - final int device = find_joy_device(event.getDeviceId()); + final int device_id = find_joy_device(event.getDeviceId()); - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.joybutton(device, button, false); - } - }); - return true; + // Check if the device exists + if (device_id > -1) { + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.joybutton(device_id, button, false); + } + }); + return true; + } } else { final int chr = event.getUnicodeChar(0); queueEvent(new Runnable() { @@ -284,6 +304,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { } }); }; + return super.onKeyUp(keyCode, event); }; @@ -308,18 +329,20 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { if (event.getRepeatCount() > 0) // ignore key echo return true; - final int button = get_godot_button(keyCode); - final int device = find_joy_device(event.getDeviceId()); - //Log.e(TAG, String.format("joy button down! button %x, %d, device %d", keyCode, button, device)); - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.joybutton(device, button, true); - } - }); - return true; + final int button = get_godot_button(keyCode); + final int device_id = find_joy_device(event.getDeviceId()); + // Check if the device exists + if (device_id > -1) { + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.joybutton(device_id, button, true); + } + }); + return true; + } } else { final int chr = event.getUnicodeChar(0); queueEvent(new Runnable() { @@ -329,6 +352,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { } }); }; + return super.onKeyDown(keyCode, event); } @@ -338,33 +362,35 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK && event.getAction() == MotionEvent.ACTION_MOVE) { final int device_id = find_joy_device(event.getDeviceId()); - joystick joy = joy_devices.get(device_id); - for (int i = 0; i < joy.axes.size(); i++) { - InputDevice.MotionRange range = joy.axes.get(i); - final float value = (event.getAxisValue(range.getAxis()) - range.getMin()) / range.getRange() * 2.0f - 1.0f; - //Log.e(TAG, String.format("axis event: %d, value %f", i, value)); - final int idx = i; - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.joyaxis(device_id, idx, value); - } - }); - } + // Check if the device exists + if (device_id > -1) { + joystick joy = joy_devices.get(device_id); + + for (int i = 0; i < joy.axes.size(); i++) { + InputDevice.MotionRange range = joy.axes.get(i); + final float value = (event.getAxisValue(range.getAxis()) - range.getMin()) / range.getRange() * 2.0f - 1.0f; + final int idx = i; + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.joyaxis(device_id, idx, value); + } + }); + } - for (int i = 0; i < joy.hats.size(); i += 2) { - final int hatX = Math.round(event.getAxisValue(joy.hats.get(i).getAxis())); - final int hatY = Math.round(event.getAxisValue(joy.hats.get(i + 1).getAxis())); - //Log.e(TAG, String.format("HAT EVENT %d, %d", hatX, hatY)); - queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.joyhat(device_id, hatX, hatY); - } - }); + for (int i = 0; i < joy.hats.size(); i += 2) { + final int hatX = Math.round(event.getAxisValue(joy.hats.get(i).getAxis())); + final int hatY = Math.round(event.getAxisValue(joy.hats.get(i + 1).getAxis())); + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.joyhat(device_id, hatX, hatY); + } + }); + } + return true; } - return true; }; return super.onGenericMotionEvent(event); @@ -408,9 +434,9 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { setRenderer(new Renderer()); } - private static final int _EGL_CONTEXT_FLAGS_KHR = 0x30FC; - private static final int _EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR= 0x00000001; - + private static final int _EGL_CONTEXT_FLAGS_KHR = 0x30FC; + private static final int _EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR = 0x00000001; + private static class ContextFactory implements GLSurfaceView.EGLContextFactory { private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098; public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { @@ -422,9 +448,9 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener { checkEglError("Before eglCreateContext", egl); EGLContext context; if (use_debug_opengl) { - int[] attrib_list2 = { EGL_CONTEXT_CLIENT_VERSION, 2,_EGL_CONTEXT_FLAGS_KHR,_EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR, EGL10.EGL_NONE }; - int[] attrib_list3 = { EGL_CONTEXT_CLIENT_VERSION, 3,_EGL_CONTEXT_FLAGS_KHR,_EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR, EGL10.EGL_NONE }; - context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, use_gl3 ? attrib_list3 : attrib_list2); + int[] attrib_list2 = { EGL_CONTEXT_CLIENT_VERSION, 2, _EGL_CONTEXT_FLAGS_KHR, _EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR, EGL10.EGL_NONE }; + int[] attrib_list3 = { EGL_CONTEXT_CLIENT_VERSION, 3, _EGL_CONTEXT_FLAGS_KHR, _EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR, EGL10.EGL_NONE }; + context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, use_gl3 ? attrib_list3 : attrib_list2); } else { int[] attrib_list2 = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE }; int[] attrib_list3 = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE }; diff --git a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java index 7216d8b5a4..03a7a71bb1 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java +++ b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java @@ -44,7 +44,7 @@ import javax.net.ssl.TrustManagerFactory; import org.apache.http.conn.ssl.SSLSocketFactory; /** - * + * * @author Luis Linietsky <luis.linietsky@gmail.com> */ public class CustomSSLSocketFactory extends SSLSocketFactory { diff --git a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java b/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java index b84f5cce2e..cfe9c4fef0 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java +++ b/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java @@ -69,7 +69,7 @@ import android.content.SharedPreferences; import android.util.Log; /** - * + * * @author Luis Linietsky <luis.linietsky@gmail.com> */ public class HttpRequester { diff --git a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java b/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java index 2368766afa..a1d5b26b3c 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java +++ b/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java @@ -39,7 +39,7 @@ import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; /** - * + * * @author Luis Linietsky <luis.linietsky@gmail.com> */ public class RequestParams { diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 6cf49758bc..fb9c0f08ad 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -28,8 +28,6 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef ANDROID_NATIVE_ACTIVITY - #include "java_glue.h" #include "android/asset_manager_jni.h" #include "audio_driver_jandroid.h" @@ -268,11 +266,11 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) { return ret; }; - if (name == "java.lang.Integer") { + if (name == "java.lang.Integer" || name == "java.lang.Long") { jclass nclass = env->FindClass("java/lang/Number"); - jmethodID intValue = env->GetMethodID(nclass, "intValue", "()I"); - int ret = env->CallIntMethod(obj, intValue); + jmethodID longValue = env->GetMethodID(nclass, "longValue", "()J"); + jlong ret = env->CallLongMethod(obj, longValue); return ret; }; @@ -589,8 +587,6 @@ TST tst; static bool initialized = false; static int step = 0; -static bool resized = false; -static bool resized_reload = false; static Size2 new_size; static Vector3 accelerometer; static Vector3 gravity; @@ -792,7 +788,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *en _getClipboard = env->GetMethodID(cls, "getClipboard", "()Ljava/lang/String;"); _setClipboard = env->GetMethodID(cls, "setClipboard", "(Ljava/lang/String;)V"); - jclass clsio = env->FindClass("org/godotengine/godot/Godot"); if (cls) { jclass c = env->GetObjectClass(gob); _openURI = env->GetMethodID(c, "openURI", "(Ljava/lang/String;)I"); @@ -887,7 +882,7 @@ static void _initialize_java_modules() { ERR_CONTINUE(!initialize); } jobject obj = env->CallStaticObjectMethod(singletonClass, initialize, _godot_instance); - jobject gob = env->NewGlobalRef(obj); + env->NewGlobalRef(obj); } } } @@ -931,13 +926,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, j if (os_android) os_android->set_display_size(Size2(width, height)); - - /*input_mutex->lock(); - resized=true; - if (reload) - resized_reload=true; - new_size=Size2(width,height); - input_mutex->unlock();*/ } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jobject obj, bool p_32_bits) { @@ -986,7 +974,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, job os_android->process_gyroscope(gyroscope); - if (os_android->main_loop_iterate() == true) { + if (os_android->main_loop_iterate()) { jclass cls = env->FindClass("org/godotengine/godot/Godot"); jmethodID _finish = env->GetMethodID(cls, "forceQuit", "()V"); @@ -1576,4 +1564,3 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * //Main::cleanup(); //return os.get_exit_code(); -#endif diff --git a/platform/android/java_glue.h b/platform/android/java_glue.h index d433b5f0d8..dc5b9cca49 100644 --- a/platform/android/java_glue.h +++ b/platform/android/java_glue.h @@ -28,8 +28,6 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef ANDROID_NATIVE_ACTIVITY - #ifndef JAVA_GLUE_H #define JAVA_GLUE_H @@ -64,5 +62,4 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jobject obj, jint p_height); } -#endif #endif // JAVA_GLUE_H diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 484ca4fff8..afdd108987 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -39,15 +39,10 @@ #include "file_access_android.h" #include "main/main.h" #include "servers/visual/visual_server_raster.h" -//#include "servers/visual/visual_server_wrap_mt.h" +#include "servers/visual/visual_server_wrap_mt.h" -#ifdef ANDROID_NATIVE_ACTIVITY -#include "dir_access_android.h" -#include "file_access_android.h" -#else #include "dir_access_jandroid.h" #include "file_access_jandroid.h" -#endif #include <dlfcn.h> @@ -90,18 +85,6 @@ void OS_Android::initialize_core() { OS_Unix::initialize_core(); -#ifdef ANDROID_NATIVE_ACTIVITY - - FileAccess::make_default<FileAccessAndroid>(FileAccess::ACCESS_RESOURCES); - FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_USERDATA); - FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_FILESYSTEM); - //FileAccessBufferedFA<FileAccessUnix>::make_default(); - DirAccess::make_default<DirAccessAndroid>(DirAccess::ACCESS_RESOURCES); - DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_USERDATA); - DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_FILESYSTEM); - -#else - if (use_apk_expansion) FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_RESOURCES); else { @@ -121,8 +104,6 @@ void OS_Android::initialize_core() { DirAccess::make_default<DirAccessJAndroid>(DirAccess::ACCESS_RESOURCES); DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_USERDATA); DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_FILESYSTEM); - -#endif } void OS_Android::set_opengl_extensions(const char *p_gl_extensions) { @@ -183,13 +164,11 @@ Error OS_Android::initialize(const VideoMode &p_desired, int p_video_driver, int video_driver_index = p_video_driver; visual_server = memnew(VisualServerRaster); - /* if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - + if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { visual_server = memnew(VisualServerWrapMT(visual_server, false)); - };*/ + } visual_server->init(); - // visual_server->cursor_set_visible(false, 0); AudioDriverManager::initialize(p_audio_driver); @@ -586,7 +565,7 @@ Error OS_Android::shell_open(String p_uri) { String OS_Android::get_resource_dir() const { - return "/"; //android has it's own filesystem for resources inside the APK + return "/"; //android has its own filesystem for resources inside the APK } String OS_Android::get_locale() const { @@ -677,13 +656,14 @@ String OS_Android::get_unique_id() const { return OS::get_unique_id(); } -Error OS_Android::native_video_play(String p_path, float p_volume) { +Error OS_Android::native_video_play(String p_path, float p_volume, String p_audio_track, String p_subtitle_track) { + // FIXME: Add support for volume, audio and subtitle tracks if (video_play_func) video_play_func(p_path); return OK; } -bool OS_Android::native_video_is_playing() { +bool OS_Android::native_video_is_playing() const { if (video_is_playing_func) return video_is_playing_func(); return false; diff --git a/platform/android/os_android.h b/platform/android/os_android.h index 9594c6fdf4..ad6fe1976a 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -41,12 +41,6 @@ #include "servers/audio_server.h" #include "servers/visual/rasterizer.h" -#ifdef ANDROID_NATIVE_ACTIVITY -#include <android/log.h> -#include <android/sensor.h> -#include <android_native_app_glue.h> -#endif - typedef void (*GFXInitFunc)(void *ud, bool gl2); typedef int (*OpenURIFunc)(const String &); typedef String (*GetUserDataDirFunc)(); @@ -237,8 +231,8 @@ public: void process_event(Ref<InputEvent> p_event); void init_video_mode(int p_video_width, int p_video_height); - virtual Error native_video_play(String p_path, float p_volume); - virtual bool native_video_is_playing(); + virtual Error native_video_play(String p_path, float p_volume, String p_audio_track, String p_subtitle_track); + virtual bool native_video_is_playing() const; virtual void native_video_pause(); virtual void native_video_stop(); diff --git a/platform/android/power_android.cpp b/platform/android/power_android.cpp index 51283183df..0a6bf9dfcb 100644 --- a/platform/android/power_android.cpp +++ b/platform/android/power_android.cpp @@ -98,7 +98,7 @@ ANativeWindow *Android_JNI_GetNativeWindow(void) { return anw; } -/* +/* * CODE CHUNK IMPORTED FROM SDL 2.0 * returns 0 on success or -1 on error (others undefined then) * returns truthy or falsy value in plugged, charged and battery diff --git a/platform/android/sign.sh b/platform/android/sign.sh deleted file mode 100755 index 830da05a37..0000000000 --- a/platform/android/sign.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -jarsigner -digestalg SHA1 -sigalg MD5withRSA -verbose -keystore my-release-key.keystore "$1" reduz - -echo "" -echo "" -echo "Checking if APK is verified..." -jarsigner -verify "$1" -verbose -certs - diff --git a/platform/haiku/haiku_direct_window.cpp b/platform/haiku/haiku_direct_window.cpp index 150e90be65..6b64082250 100644 --- a/platform/haiku/haiku_direct_window.cpp +++ b/platform/haiku/haiku_direct_window.cpp @@ -86,7 +86,7 @@ void HaikuDirectWindow::DirectConnected(direct_buffer_info *info) { void HaikuDirectWindow::MessageReceived(BMessage *message) { switch (message->what) { case REDRAW_MSG: - if (Main::iteration() == true) { + if (Main::iteration()) { view->EnableDirectMode(false); Quit(); } diff --git a/platform/haiku/os_haiku.cpp b/platform/haiku/os_haiku.cpp index c80365f1f3..f9f12af817 100644 --- a/platform/haiku/os_haiku.cpp +++ b/platform/haiku/os_haiku.cpp @@ -117,16 +117,13 @@ Error OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p #endif - visual_server = memnew(VisualServerRaster()); - - ERR_FAIL_COND_V(!visual_server, ERR_UNAVAILABLE); - - // TODO: enable multithreaded VS - /* + visual_server = memnew(VisualServerRaster); + // FIXME: Reimplement threaded rendering if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD)); + visual_server = memnew(VisualServerWrapMT(visual_server, false)); } - */ + + ERR_FAIL_COND_V(!visual_server, ERR_UNAVAILABLE); video_driver_index = p_video_driver; diff --git a/platform/iphone/detect.py b/platform/iphone/detect.py index b13a1e9643..c9f37931b0 100644 --- a/platform/iphone/detect.py +++ b/platform/iphone/detect.py @@ -1,7 +1,7 @@ import os import string import sys - +from methods import detect_darwin_sdk_path def is_active(): return True @@ -22,9 +22,8 @@ def can_build(): def get_opts(): from SCons.Variables import BoolVariable return [ - ('IPHONEPLATFORM', 'Name of the iPhone platform', 'iPhoneOS'), ('IPHONEPATH', 'Path to iPhone toolchain', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain'), - ('IPHONESDK', 'Path to the iPhone SDK', '/Applications/Xcode.app/Contents/Developer/Platforms/${IPHONEPLATFORM}.platform/Developer/SDKs/${IPHONEPLATFORM}.sdk/'), + ('IPHONESDK', 'Path to the iPhone SDK', ''), BoolVariable('game_center', 'Support for game center', True), BoolVariable('store_kit', 'Support for in-app store', True), BoolVariable('icloud', 'Support for iCloud', True), @@ -87,7 +86,7 @@ def configure(env): s_compiler_path = '$IPHONEPATH/Developer/usr/bin/' ccache_path = os.environ.get("CCACHE") - if ccache_path == None: + if ccache_path is None: env['CC'] = compiler_path + 'clang' env['CXX'] = compiler_path + 'clang++' env['S_compiler'] = s_compiler_path + 'gcc' @@ -103,13 +102,15 @@ def configure(env): ## Compile flags if (env["arch"] == "x86" or env["arch"] == "x86_64"): - env['IPHONEPLATFORM'] = 'iPhoneSimulator' + detect_darwin_sdk_path('iphonesimulator', env) env['ENV']['MACOSX_DEPLOYMENT_TARGET'] = '10.9' arch_flag = "i386" if env["arch"] == "x86" else env["arch"] env.Append(CCFLAGS=('-arch ' + arch_flag + ' -fobjc-abi-version=2 -fobjc-legacy-dispatch -fmessage-length=0 -fpascal-strings -fblocks -fasm-blocks -isysroot $IPHONESDK -mios-simulator-version-min=9.0 -DCUSTOM_MATRIX_TRANSFORM_H=\\\"build/iphone/matrix4_iphone.h\\\" -DCUSTOM_VECTOR3_TRANSFORM_H=\\\"build/iphone/vector3_iphone.h\\\"').split()) elif (env["arch"] == "arm"): + detect_darwin_sdk_path('iphone', env) env.Append(CCFLAGS='-fno-objc-arc -arch armv7 -fmessage-length=0 -fno-strict-aliasing -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits -fpascal-strings -fblocks -isysroot $IPHONESDK -fvisibility=hidden -mthumb "-DIBOutlet=__attribute__((iboutlet))" "-DIBOutletCollection(ClassName)=__attribute__((iboutletcollection(ClassName)))" "-DIBAction=void)__attribute__((ibaction)" -miphoneos-version-min=9.0 -MMD -MT dependencies'.split()) elif (env["arch"] == "arm64"): + detect_darwin_sdk_path('iphone', env) env.Append(CCFLAGS='-fno-objc-arc -arch arm64 -fmessage-length=0 -fno-strict-aliasing -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits -fpascal-strings -fblocks -fvisibility=hidden -MMD -MT dependencies -miphoneos-version-min=9.0 -isysroot $IPHONESDK'.split()) env.Append(CPPFLAGS=['-DNEED_LONG_INT']) env.Append(CPPFLAGS=['-DLIBYUV_DISABLE_NEON']) diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 63bc4a519b..8a9b254cdc 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -99,6 +99,70 @@ class EditorExportPlatformIOS : public EditorExportPlatform { Error _export_additional_assets(const String &p_out_dir, const Vector<String> &p_assets, bool p_is_framework, Vector<IOSExportAsset> &r_exported_assets); Error _export_additional_assets(const String &p_out_dir, const Vector<SharedObject> &p_libraries, Vector<IOSExportAsset> &r_exported_assets); + bool is_package_name_valid(const String &p_package, String *r_error = NULL) const { + + String pname = p_package; + + if (pname.length() == 0) { + if (r_error) { + *r_error = "Identifier is missing."; + } + return false; + } + + int segments = 0; + bool first = true; + for (int i = 0; i < pname.length(); i++) { + CharType c = pname[i]; + if (first && c == '.') { + if (r_error) { + *r_error = "Identifier segments must be of non-zero length."; + } + return false; + } + if (c == '.') { + segments++; + first = true; + continue; + } + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_')) { + if (r_error) { + *r_error = "The character '" + String::chr(c) + "' is not allowed in Identifier."; + } + return false; + } + if (first && (c >= '0' && c <= '9')) { + if (r_error) { + *r_error = "A digit cannot be the first character in a Identifier segment."; + } + return false; + } + if (first && c == '_') { + if (r_error) { + *r_error = "The character '" + String::chr(c) + "' cannot be the first character in a Identifier segment."; + } + return false; + } + first = false; + } + + if (segments == 0) { + if (r_error) { + *r_error = "The Identifier must have at least one '.' separator."; + } + return false; + } + + if (first) { + if (r_error) { + *r_error = "Identifier segments must be of non-zero length."; + } + return false; + } + + return true; + } + protected: virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features); virtual void get_export_options(List<ExportOption> *r_options); @@ -108,7 +172,11 @@ public: virtual String get_os_name() const { return "iOS"; } virtual Ref<Texture> get_logo() const { return logo; } - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const { return "ipa"; } + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const { + List<String> list; + list.push_back("ipa"); + return list; + } virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; @@ -978,11 +1046,33 @@ bool EditorExportPlatformIOS::can_export(const Ref<EditorExportPreset> &p_preset err += "Custom release package not found.\n"; } + String team_id = p_preset->get("application/app_store_team_id"); + if (team_id.length() == 0) { + err += "App Store Team ID not specified - cannot configure the project.\n"; + } + + String identifier = p_preset->get("application/identifier"); + String pn_err; + if (!is_package_name_valid(identifier, &pn_err)) { + err += "Invalid Identifier - " + pn_err + "\n"; + } + + for (unsigned int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { + IconInfo info = icon_infos[i]; + String icon_path = p_preset->get(info.preset_key); + if (icon_path.length() == 0) { + if (info.is_required) { + err += "Required icon is not specified in the preset.\n"; + } + break; + } + } + if (!err.empty()) r_error = err; r_missing_templates = !valid; - return valid; + return err.empty(); } EditorExportPlatformIOS::EditorExportPlatformIOS() { diff --git a/platform/iphone/gl_view.mm b/platform/iphone/gl_view.mm index 478a3125af..5b4d1f8226 100644 --- a/platform/iphone/gl_view.mm +++ b/platform/iphone/gl_view.mm @@ -53,7 +53,6 @@ static GLView *_instance = NULL; static bool video_found_error = false; static bool video_playing = false; -static float video_previous_volume = 0.0f; static CMTime video_current_time; void _show_keyboard(String); @@ -85,7 +84,8 @@ Rect2 _get_ios_window_safe_area(float p_window_width, float p_window_height) { } ERR_FAIL_COND_V(insets.left < 0 || insets.top < 0 || insets.right < 0 || insets.bottom < 0, Rect2(0, 0, p_window_width, p_window_height)); - return Rect2(insets.left, insets.top, p_window_width - insets.right - insets.left, p_window_height - insets.bottom - insets.top); + UIEdgeInsets window_insets = UIEdgeInsetsMake(_points_to_pixels(insets.top), _points_to_pixels(insets.left), _points_to_pixels(insets.bottom), _points_to_pixels(insets.right)); + return Rect2(window_insets.left, window_insets.top, p_window_width - window_insets.right - window_insets.left, p_window_height - window_insets.bottom - window_insets.top); } bool _play_video(String p_path, float p_volume, String p_audio_track, String p_subtitle_track) { @@ -248,16 +248,6 @@ static int remove_touch(UITouch *p_touch) { return remaining; }; -static int get_first_id(UITouch *p_touch) { - - for (int i = 0; i < max_touches; i++) { - - if (touches[i] != NULL) - return i; - }; - return -1; -}; - static void clear_touches() { for (int i = 0; i < max_touches; i++) { @@ -751,7 +741,6 @@ static void clear_touches() { [_instance.moviePlayerController stop]; [_instance.moviePlayerController.view removeFromSuperview]; - //[[MPMusicPlayerController applicationMusicPlayer] setVolume: video_previous_volume]; video_playing = false; } */ diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp index addef61ec7..e996a5905b 100644 --- a/platform/iphone/os_iphone.cpp +++ b/platform/iphone/os_iphone.cpp @@ -34,7 +34,7 @@ #include "drivers/gles3/rasterizer_gles3.h" #include "servers/visual/visual_server_raster.h" -//#include "servers/visual/visual_server_wrap_mt.h" +#include "servers/visual/visual_server_wrap_mt.h" #include "main/main.h" @@ -107,13 +107,11 @@ Error OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p RasterizerGLES3::register_config(); RasterizerGLES3::make_current(); - visual_server = memnew(VisualServerRaster()); - /* - FIXME: Reimplement threaded rendering? Or remove? + visual_server = memnew(VisualServerRaster); + // FIXME: Reimplement threaded rendering if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { visual_server = memnew(VisualServerWrapMT(visual_server, false)); - }; - */ + } visual_server->init(); //visual_server->cursor_set_visible(false, 0); diff --git a/platform/javascript/audio_driver_javascript.cpp b/platform/javascript/audio_driver_javascript.cpp index 7a6613bb32..a5b627b8dc 100644 --- a/platform/javascript/audio_driver_javascript.cpp +++ b/platform/javascript/audio_driver_javascript.cpp @@ -44,6 +44,11 @@ extern "C" EMSCRIPTEN_KEEPALIVE void audio_driver_js_mix() { AudioDriverJavaScript::singleton->mix_to_js(); } +extern "C" EMSCRIPTEN_KEEPALIVE void audio_driver_process_capture(float sample) { + + AudioDriverJavaScript::singleton->process_capture(sample); +} + void AudioDriverJavaScript::mix_to_js() { int channel_count = get_total_channels_by_speaker_mode(get_speaker_mode()); @@ -51,31 +56,39 @@ void AudioDriverJavaScript::mix_to_js() { int32_t *stream_buffer = reinterpret_cast<int32_t *>(internal_buffer); audio_server_process(sample_count, stream_buffer); for (int i = 0; i < sample_count * channel_count; i++) { - internal_buffer[i] = float(stream_buffer[i] >> 16) / 32768.0; + internal_buffer[i] = float(stream_buffer[i] >> 16) / 32768.f; } } +void AudioDriverJavaScript::process_capture(float sample) { + + int32_t sample32 = int32_t(sample * 32768.f) * (1U << 16); + input_buffer_write(sample32); +} + Error AudioDriverJavaScript::init() { /* clang-format off */ EM_ASM({ _audioDriver_audioContext = new (window.AudioContext || window.webkitAudioContext); + _audioDriver_audioInput = null; + _audioDriver_inputStream = null; _audioDriver_scriptNode = null; }); /* clang-format on */ int channel_count = get_total_channels_by_speaker_mode(get_speaker_mode()); /* clang-format off */ - int buffer_length = EM_ASM_INT({ + buffer_length = EM_ASM_INT({ var CHANNEL_COUNT = $0; var channelCount = _audioDriver_audioContext.destination.channelCount; try { // Try letting the browser recommend a buffer length. - _audioDriver_scriptNode = _audioDriver_audioContext.createScriptProcessor(0, 0, channelCount); + _audioDriver_scriptNode = _audioDriver_audioContext.createScriptProcessor(0, 2, channelCount); } catch (e) { // ...otherwise, default to 4096. - _audioDriver_scriptNode = _audioDriver_audioContext.createScriptProcessor(4096, 0, channelCount); + _audioDriver_scriptNode = _audioDriver_audioContext.createScriptProcessor(4096, 2, channelCount); } _audioDriver_scriptNode.connect(_audioDriver_audioContext.destination); @@ -91,6 +104,7 @@ Error AudioDriverJavaScript::init() { memdelete_arr(internal_buffer); internal_buffer = memnew_arr(float, buffer_length *channel_count); } + return internal_buffer ? OK : ERR_OUT_OF_MEMORY; } @@ -101,11 +115,13 @@ void AudioDriverJavaScript::start() { var INTERNAL_BUFFER_PTR = $0; var audioDriverMixFunction = cwrap('audio_driver_js_mix'); + var audioDriverProcessCapture = cwrap('audio_driver_process_capture', null, ['number']); _audioDriver_scriptNode.onaudioprocess = function(audioProcessingEvent) { audioDriverMixFunction(); - // The output buffer contains the samples that will be modified and played. + + var input = audioProcessingEvent.inputBuffer; var output = audioProcessingEvent.outputBuffer; - var input = HEAPF32.subarray( + var internalBuffer = HEAPF32.subarray( INTERNAL_BUFFER_PTR / HEAPF32.BYTES_PER_ELEMENT, INTERNAL_BUFFER_PTR / HEAPF32.BYTES_PER_ELEMENT + output.length * output.numberOfChannels); @@ -113,8 +129,16 @@ void AudioDriverJavaScript::start() { var outputData = output.getChannelData(channel); // Loop through samples. for (var sample = 0; sample < outputData.length; sample++) { - // Set output equal to input. - outputData[sample] = input[sample * output.numberOfChannels + channel]; + outputData[sample] = internalBuffer[sample * output.numberOfChannels + channel]; + } + } + + if (_audioDriver_audioInput) { + var inputDataL = input.getChannelData(0); + var inputDataR = input.getChannelData(1); + for (var i = 0; i < inputDataL.length; i++) { + audioDriverProcessCapture(inputDataL[i]); + audioDriverProcessCapture(inputDataR[i]); } } }; @@ -152,14 +176,74 @@ void AudioDriverJavaScript::finish() { /* clang-format off */ EM_ASM({ _audioDriver_audioContext = null; + _audioDriver_audioInput = null; _audioDriver_scriptNode = null; }); /* clang-format on */ - memdelete_arr(internal_buffer); - internal_buffer = NULL; + + if (internal_buffer) { + memdelete_arr(internal_buffer); + internal_buffer = NULL; + } +} + +Error AudioDriverJavaScript::capture_start() { + + input_buffer_init(buffer_length); + + /* clang-format off */ + EM_ASM({ + function gotMediaInput(stream) { + _audioDriver_inputStream = stream; + _audioDriver_audioInput = _audioDriver_audioContext.createMediaStreamSource(stream); + _audioDriver_audioInput.connect(_audioDriver_scriptNode); + } + + function gotMediaInputError(e) { + console.log(e); + } + + if (navigator.mediaDevices.getUserMedia) { + navigator.mediaDevices.getUserMedia({"audio": true}).then(gotMediaInput, gotMediaInputError); + } else { + if (!navigator.getUserMedia) + navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia; + navigator.getUserMedia({"audio": true}, gotMediaInput, gotMediaInputError); + } + }); + /* clang-format on */ + + return OK; +} + +Error AudioDriverJavaScript::capture_stop() { + + /* clang-format off */ + EM_ASM({ + if (_audioDriver_inputStream) { + const tracks = _audioDriver_inputStream.getTracks(); + for (var i = 0; i < tracks.length; i++) { + tracks[i].stop(); + } + _audioDriver_inputStream = null; + } + + if (_audioDriver_audioInput) { + _audioDriver_audioInput.disconnect(); + _audioDriver_audioInput = null; + } + + }); + /* clang-format on */ + + input_buffer.clear(); + + return OK; } AudioDriverJavaScript::AudioDriverJavaScript() { + internal_buffer = NULL; + singleton = this; } diff --git a/platform/javascript/audio_driver_javascript.h b/platform/javascript/audio_driver_javascript.h index a65a8ec29f..c8aeb0b446 100644 --- a/platform/javascript/audio_driver_javascript.h +++ b/platform/javascript/audio_driver_javascript.h @@ -37,8 +37,12 @@ class AudioDriverJavaScript : public AudioDriver { float *internal_buffer; + int buffer_length; + public: void mix_to_js(); + void process_capture(float sample); + static AudioDriverJavaScript *singleton; virtual const char *get_name() const; @@ -51,6 +55,9 @@ public: virtual void unlock(); virtual void finish(); + virtual Error capture_start(); + virtual Error capture_stop(); + AudioDriverJavaScript(); }; diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py index 17b31f8d73..22b5f1f87a 100644 --- a/platform/javascript/detect.py +++ b/platform/javascript/detect.py @@ -122,12 +122,17 @@ def configure(env): ## Link flags env.Append(LINKFLAGS=['-s', 'BINARYEN=1']) + env.Append(LINKFLAGS=['-s', 'BINARYEN_TRAP_MODE=\'clamp\'']) # Allow increasing memory buffer size during runtime. This is efficient # when using WebAssembly (in comparison to asm.js) and works well for # us since we don't know requirements at compile-time. env.Append(LINKFLAGS=['-s', 'ALLOW_MEMORY_GROWTH=1']) + # Since we use both memory growth and MEMFS preloading, + # this avoids unecessary copying on start-up. + env.Append(LINKFLAGS=['--no-heap-copy']) + # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1. env.Append(LINKFLAGS=['-s', 'USE_WEBGL2=1']) diff --git a/platform/javascript/engine.js b/platform/javascript/engine.js index c3ef5bbbb5..91458eb4c3 100644 --- a/platform/javascript/engine.js +++ b/platform/javascript/engine.js @@ -1,3 +1,6 @@ + // The following is concatenated with generated code, and acts as the end + // of a wrapper for said code. See pre.js for the other part of the + // wrapper. exposedLibs['PATH'] = PATH; exposedLibs['FS'] = FS; return Module; diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp index 1e47d8db95..7a325e81dd 100644 --- a/platform/javascript/export/export.cpp +++ b/platform/javascript/export/export.cpp @@ -58,7 +58,7 @@ public: virtual Ref<Texture> get_logo() const; virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const; + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const; virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool poll_devices(); @@ -174,9 +174,11 @@ bool EditorExportPlatformJavaScript::can_export(const Ref<EditorExportPreset> &p return valid; } -String EditorExportPlatformJavaScript::get_binary_extension(const Ref<EditorExportPreset> &p_preset) const { +List<String> EditorExportPlatformJavaScript::get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const { - return "html"; + List<String> list; + list.push_back("html"); + return list; } Error EditorExportPlatformJavaScript::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index 7c7aeac980..9250ca4903 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -862,6 +862,24 @@ void OS_JavaScript::finalize() { // Miscellaneous +Error OS_JavaScript::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode, bool read_stderr) { + + ERR_EXPLAIN("OS::execute() is not available on the HTML5 platform"); + ERR_FAIL_V(ERR_UNAVAILABLE); +} + +Error OS_JavaScript::kill(const ProcessID &p_pid) { + + ERR_EXPLAIN("OS::kill() is not available on the HTML5 platform"); + ERR_FAIL_V(ERR_UNAVAILABLE); +} + +int OS_JavaScript::get_process_id() const { + + ERR_EXPLAIN("OS::get_process_id() is not available on the HTML5 platform"); + ERR_FAIL_V(0); +} + extern "C" EMSCRIPTEN_KEEPALIVE void send_notification(int p_notification) { if (p_notification == MainLoop::NOTIFICATION_WM_MOUSE_ENTER || p_notification == MainLoop::NOTIFICATION_WM_MOUSE_EXIT) { diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h index 84075898ac..79dac5940f 100644 --- a/platform/javascript/os_javascript.h +++ b/platform/javascript/os_javascript.h @@ -133,6 +133,10 @@ public: void run_async(); bool main_loop_iterate(); + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false); + virtual Error kill(const ProcessID &p_pid); + virtual int get_process_id() const; + virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual void set_window_title(const String &p_title); virtual void set_icon(const Ref<Image> &p_icon); diff --git a/platform/javascript/pre.js b/platform/javascript/pre.js index 02194bc75e..a870e676ea 100644 --- a/platform/javascript/pre.js +++ b/platform/javascript/pre.js @@ -1,2 +1,5 @@ var Engine = { RuntimeEnvironment: function(Module, exposedLibs) { + // The above is concatenated with generated code, and acts as the start of + // a wrapper for said code. See engine.js for the other part of the + // wrapper. diff --git a/platform/osx/detect.py b/platform/osx/detect.py index 8a0883eca3..051836b66d 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -1,5 +1,6 @@ import os import sys +from methods import detect_darwin_sdk_path def is_active(): @@ -23,6 +24,7 @@ def get_opts(): return [ ('osxcross_sdk', 'OSXCross SDK version', 'darwin14'), + ('MACOS_SDK_PATH', 'Path to the macOS SDK', ''), EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')), BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False), ] @@ -84,12 +86,16 @@ def configure(env): env['AS'] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-as" env.Append(CCFLAGS=['-D__MACPORTS__']) #hack to fix libvpx MM256_BROADCASTSI128_SI256 define + detect_darwin_sdk_path('osx', env) + env.Append(CPPFLAGS=['-isysroot', '$MACOS_SDK_PATH']) + env.Append(LINKFLAGS=['-isysroot', '$MACOS_SDK_PATH']) + else: # osxcross build root = os.environ.get("OSXCROSS_ROOT", 0) basecmd = root + "/target/bin/x86_64-apple-" + env["osxcross_sdk"] + "-" ccache_path = os.environ.get("CCACHE") - if ccache_path == None: + if ccache_path is None: env['CC'] = basecmd + "cc" env['CXX'] = basecmd + "c++" else: diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 27b4fdc228..12a0193521 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -74,7 +74,14 @@ public: virtual String get_os_name() const { return "OSX"; } virtual Ref<Texture> get_logo() const { return logo; } - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const { return use_dmg() ? "dmg" : "zip"; } + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const { + List<String> list; + if (use_dmg()) { + list.push_back("dmg"); + } + list.push_back("zip"); + return list; + } virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; @@ -132,10 +139,76 @@ void EditorExportPlatformOSX::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), false)); } +void _rgba8_to_packbits_encode(int p_ch, int p_size, PoolVector<uint8_t> &p_source, Vector<uint8_t> &p_dest) { + + int src_len = p_size * p_size; + + Vector<uint8_t> result; + result.resize(src_len * 1.25); //temp vector for rle encoded data, make it 25% larger for worst case scenario + int res_size = 0; + + uint8_t buf[128]; + int buf_size = 0; + + int i = 0; + while (i < src_len) { + uint8_t cur = p_source.read()[i * 4 + p_ch]; + + if (i < src_len - 2) { + + if ((p_source.read()[(i + 1) * 4 + p_ch] == cur) && (p_source.read()[(i + 2) * 4 + p_ch] == cur)) { + if (buf_size > 0) { + result.write[res_size++] = (uint8_t)(buf_size - 1); + copymem(&result.write[res_size], &buf, buf_size); + res_size += buf_size; + buf_size = 0; + } + + uint8_t lim = i + 130 >= src_len ? src_len - i - 1 : 130; + bool hit_lim = true; + + for (int j = 3; j <= lim; j++) { + if (p_source.read()[(i + j) * 4 + p_ch] != cur) { + hit_lim = false; + i = i + j - 1; + result.write[res_size++] = (uint8_t)(j - 3 + 0x80); + result.write[res_size++] = cur; + break; + } + } + if (hit_lim) { + result.write[res_size++] = (uint8_t)(lim - 3 + 0x80); + result.write[res_size++] = cur; + i = i + lim; + } + } else { + buf[buf_size++] = cur; + if (buf_size == 128) { + result.write[res_size++] = (uint8_t)(buf_size - 1); + copymem(&result.write[res_size], &buf, buf_size); + res_size += buf_size; + buf_size = 0; + } + } + } else { + buf[buf_size++] = cur; + result.write[res_size++] = (uint8_t)(buf_size - 1); + copymem(&result.write[res_size], &buf, buf_size); + res_size += buf_size; + buf_size = 0; + } + + i++; + } + + int ofs = p_dest.size(); + p_dest.resize(p_dest.size() + res_size); + copymem(&p_dest.write[ofs], result.ptr(), res_size); +} + void EditorExportPlatformOSX::_make_icon(const Ref<Image> &p_icon, Vector<uint8_t> &p_data) { Ref<ImageTexture> it = memnew(ImageTexture); - int size = 512; Vector<uint8_t> data; @@ -145,32 +218,82 @@ void EditorExportPlatformOSX::_make_icon(const Ref<Image> &p_icon, Vector<uint8_ data.write[2] = 'n'; data.write[3] = 's'; - const char *name[] = { "ic09", "ic08", "ic07", "icp6", "icp5", "icp4" }; - int index = 0; - - while (size >= 16) { - + struct MacOSIconInfo { + const char *name; + const char *mask_name; + bool is_png; + int size; + }; + + static const MacOSIconInfo icon_infos[] = { + { "ic10", "", true, 1024 }, //1024x1024 32-bit PNG and 512x512@2x 32-bit "retina" PNG + { "ic09", "", true, 512 }, //512×512 32-bit PNG + { "ic14", "", true, 512 }, //256x256@2x 32-bit "retina" PNG + { "ic08", "", true, 256 }, //256×256 32-bit PNG + { "ic13", "", true, 256 }, //128x128@2x 32-bit "retina" PNG + { "ic07", "", true, 128 }, //128x128 32-bit PNG + { "ic12", "", true, 64 }, //32x32@2x 32-bit "retina" PNG + { "ic11", "", true, 32 }, //16x16@2x 32-bit "retina" PNG + { "il32", "l8mk", false, 32 }, //32x32 24-bit RLE + 8-bit uncompressed mask + { "is32", "s8mk", false, 16 } //16x16 24-bit RLE + 8-bit uncompressed mask + }; + + for (unsigned int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { Ref<Image> copy = p_icon; // does this make sense? doesn't this just increase the reference count instead of making a copy? Do we even need a copy? copy->convert(Image::FORMAT_RGBA8); - copy->resize(size, size); - it->create_from_image(copy); - String path = EditorSettings::get_singleton()->get_cache_dir().plus_file("icon.png"); - ResourceSaver::save(path, it); - - FileAccess *f = FileAccess::open(path, FileAccess::READ); - ERR_FAIL_COND(!f); - - int ofs = data.size(); - uint32_t len = f->get_len(); - data.resize(data.size() + len + 8); - f->get_buffer(&data.write[ofs + 8], len); - memdelete(f); - len += 8; - len = BSWAP32(len); - copymem(&data.write[ofs], name[index], 4); - encode_uint32(len, &data.write[ofs + 4]); - index++; - size /= 2; + copy->resize(icon_infos[i].size, icon_infos[i].size); + + if (icon_infos[i].is_png) { + //encode png icon + it->create_from_image(copy); + String path = EditorSettings::get_singleton()->get_cache_dir().plus_file("icon.png"); + ResourceSaver::save(path, it); + + FileAccess *f = FileAccess::open(path, FileAccess::READ); + ERR_FAIL_COND(!f); + + int ofs = data.size(); + uint32_t len = f->get_len(); + data.resize(data.size() + len + 8); + f->get_buffer(&data.write[ofs + 8], len); + memdelete(f); + len += 8; + len = BSWAP32(len); + copymem(&data.write[ofs], icon_infos[i].name, 4); + encode_uint32(len, &data.write[ofs + 4]); + } else { + PoolVector<uint8_t> src_data = copy->get_data(); + + //encode 24bit RGB RLE icon + { + int ofs = data.size(); + data.resize(data.size() + 8); + + _rgba8_to_packbits_encode(0, icon_infos[i].size, src_data, data); // encode R + _rgba8_to_packbits_encode(1, icon_infos[i].size, src_data, data); // encode G + _rgba8_to_packbits_encode(2, icon_infos[i].size, src_data, data); // encode B + + int len = data.size() - ofs; + len = BSWAP32(len); + copymem(&data.write[ofs], icon_infos[i].name, 4); + encode_uint32(len, &data.write[ofs + 4]); + } + + //encode 8bit mask uncompressed icon + { + int ofs = data.size(); + int len = copy->get_width() * copy->get_height(); + data.resize(data.size() + len + 8); + + for (int j = 0; j < len; j++) { + data.write[ofs + 8 + j] = src_data.read()[j * 4 + 3]; + } + len += 8; + len = BSWAP32(len); + copymem(&data.write[ofs], icon_infos[i].mask_name, 4); + encode_uint32(len, &data.write[ofs + 4]); + } + } } uint32_t total_len = data.size(); @@ -334,7 +457,8 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p io2.opaque = &dst_f; zipFile dst_pkg_zip = NULL; - if (use_dmg()) { + String export_format = use_dmg() && p_path.ends_with("dmg") ? "dmg" : "zip"; + if (export_format == "dmg") { // We're on OSX so we can export to DMG, but first we create our application bundle tmp_app_path_name = EditorSettings::get_singleton()->get_cache_dir().plus_file(pkg_name + ".app"); print_line("Exporting to " + tmp_app_path_name); @@ -429,7 +553,7 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p print_line("ADDING: " + file + " size: " + itos(data.size())); total_size += data.size(); - if (use_dmg()) { + if (export_format == "dmg") { // write it into our application bundle file = tmp_app_path_name + "/" + file; @@ -491,7 +615,7 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p if (err == OK) { ep.step("Making PKG", 1); - if (use_dmg()) { + if (export_format == "dmg") { String pack_path = tmp_app_path_name + "/Contents/Resources/" + pkg_name + ".pck"; Vector<SharedObject> shared_objects; err = save_pack(p_preset, pack_path, &shared_objects); diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index 6fd52f09d1..546c88e74a 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -74,8 +74,12 @@ public: IP_Unix *ip_unix; +#ifdef COREAUDIO_ENABLED AudioDriverCoreAudio audio_driver; +#endif +#ifdef COREMIDI_ENABLED MIDIDriverCoreMidi midi_driver; +#endif InputDefault *input; JoypadOSX *joypad_osx; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 886ff4b332..e7b3e35381 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -76,10 +76,12 @@ #define NSWindowStyleMaskBorderless NSBorderlessWindowMask #endif -static NSRect convertRectToBacking(NSRect contentRect) { - - return [OS_OSX::singleton->window_view convertRectToBacking:contentRect]; -} +#ifndef NSAppKitVersionNumber10_12 +#define NSAppKitVersionNumber10_12 1504 +#endif +#ifndef NSAppKitVersionNumber10_14 +#define NSAppKitVersionNumber10_14 1671 +#endif static void get_key_modifier_state(unsigned int p_osx_state, Ref<InputEventWithModifiers> state) { @@ -105,12 +107,13 @@ static int prev_mouse_y = 0; static int button_mask = 0; static bool mouse_down_control = false; -static Vector2 get_mouse_pos(NSEvent *event) { +static Vector2 get_mouse_pos(NSPoint locationInWindow, CGFloat backingScaleFactor) { const NSRect contentRect = [OS_OSX::singleton->window_view frame]; - const NSPoint p = [event locationInWindow]; - mouse_x = p.x * OS_OSX::singleton->_mouse_scale([[event window] backingScaleFactor]); - mouse_y = (contentRect.size.height - p.y) * OS_OSX::singleton->_mouse_scale([[event window] backingScaleFactor]); + const NSPoint p = locationInWindow; + const float s = OS_OSX::singleton->_mouse_scale(backingScaleFactor); + mouse_x = p.x * s; + mouse_y = (contentRect.size.height - p.y) * s; return Vector2(mouse_x, mouse_y); } @@ -271,7 +274,7 @@ static Vector2 get_mouse_pos(NSEvent *event) { float newDisplayScale = OS_OSX::singleton->is_hidpi_allowed() ? newBackingScaleFactor : 1.0; const NSRect contentRect = [OS_OSX::singleton->window_view frame]; - const NSRect fbRect = contentRect; //convertRectToBacking(contentRect); + const NSRect fbRect = contentRect; OS_OSX::singleton->window_size.width = fbRect.size.width * newDisplayScale; OS_OSX::singleton->window_size.height = fbRect.size.height * newDisplayScale; @@ -292,7 +295,7 @@ static Vector2 get_mouse_pos(NSEvent *event) { [OS_OSX::singleton->context update]; const NSRect contentRect = [OS_OSX::singleton->window_view frame]; - const NSRect fbRect = contentRect; //convertRectToBacking(contentRect); + const NSRect fbRect = contentRect; float displayScale = OS_OSX::singleton->_display_scale(); OS_OSX::singleton->window_size.width = fbRect.size.width * displayScale; @@ -330,8 +333,15 @@ static Vector2 get_mouse_pos(NSEvent *event) { - (void)windowDidBecomeKey:(NSNotification *)notification { //_GodotInputWindowFocus(window, GL_TRUE); //_GodotPlatformSetCursorMode(window, window->cursorMode); - if (OS_OSX::singleton->get_main_loop()) + + if (OS_OSX::singleton->get_main_loop()) { + get_mouse_pos( + [OS_OSX::singleton->window_object mouseLocationOutsideOfEventStream], + [OS_OSX::singleton->window_view backingScaleFactor]); + OS_OSX::singleton->input->set_mouse_position(Point2(mouse_x, mouse_y)); + OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); + } } - (void)windowDidResignKey:(NSNotification *)notification { @@ -361,6 +371,8 @@ static Vector2 get_mouse_pos(NSEvent *event) { bool imeMode; } - (void)cancelComposition; +- (BOOL)wantsUpdateLayer; +- (void)updateLayer; @end @implementation GodotContentView @@ -371,6 +383,14 @@ static Vector2 get_mouse_pos(NSEvent *event) { } } +- (BOOL)wantsUpdateLayer { + return YES; +} + +- (void)updateLayer { + [OS_OSX::singleton->context update]; +} + - (id)init { self = [super init]; trackingArea = nil; @@ -598,12 +618,13 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) { mm->set_button_mask(button_mask); prev_mouse_x = mouse_x; prev_mouse_y = mouse_y; - const Vector2 pos = get_mouse_pos(event); + const CGFloat backingScaleFactor = [[event window] backingScaleFactor]; + const Vector2 pos = get_mouse_pos([event locationInWindow], backingScaleFactor); mm->set_position(pos); mm->set_global_position(pos); Vector2 relativeMotion = Vector2(); - relativeMotion.x = [event deltaX] * OS_OSX::singleton -> _mouse_scale([[event window] backingScaleFactor]); - relativeMotion.y = [event deltaY] * OS_OSX::singleton -> _mouse_scale([[event window] backingScaleFactor]); + relativeMotion.x = [event deltaX] * OS_OSX::singleton -> _mouse_scale(backingScaleFactor); + relativeMotion.y = [event deltaY] * OS_OSX::singleton -> _mouse_scale(backingScaleFactor); mm->set_relative(relativeMotion); get_key_modifier_state([event modifierFlags], mm); @@ -686,7 +707,7 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) { Ref<InputEventMagnifyGesture> ev; ev.instance(); get_key_modifier_state([event modifierFlags], ev); - ev->set_position(get_mouse_pos(event)); + ev->set_position(get_mouse_pos([event locationInWindow], [[event window] backingScaleFactor])); ev->set_factor([event magnification] + 1.0); OS_OSX::singleton->push_input(ev); } @@ -929,7 +950,7 @@ static int remapKey(unsigned int key) { CFDataRef layoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); if (!layoutData) - return 0; + return translateKey(key); const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout *)CFDataGetBytePtr(layoutData); @@ -1078,6 +1099,8 @@ inline void sendPanEvent(double dx, double dy, int modifierFlags) { - (void)scrollWheel:(NSEvent *)event { double deltaX, deltaY; + get_mouse_pos([event locationInWindow], [[event window] backingScaleFactor]); + deltaX = [event scrollingDeltaX]; deltaY = [event scrollingDeltaY]; @@ -1221,6 +1244,9 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a ERR_FAIL_COND_V(window_object == nil, ERR_UNAVAILABLE); window_view = [[GodotContentView alloc] init]; + if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_14) { + [window_view setWantsLayer:TRUE]; + } float displayScale = 1.0; if (is_hidpi_allowed()) { @@ -1378,7 +1404,6 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a visual_server = memnew(VisualServerRaster); if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD)); } @@ -1402,7 +1427,9 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a void OS_OSX::finalize() { +#ifdef COREMIDI_ENABLED midi_driver.close(); +#endif CFNotificationCenterRemoveObserver(CFNotificationCenterGetDistributedCenter(), NULL, kTISNotifySelectedKeyboardInputSourceChanged, NULL); CGDisplayRemoveReconfigurationCallback(displays_arrangement_changed, NULL); @@ -1452,7 +1479,7 @@ public: switch (p_type) { case ERR_WARNING: - if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12) { + if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_12) { os_log_info(OS_LOG_DEFAULT, "WARNING: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); @@ -1462,7 +1489,7 @@ public: logf_error("\E[0;33m At: %s:%i.\E[0m\n", p_file, p_line); break; case ERR_SCRIPT: - if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12) { + if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_12) { os_log_error(OS_LOG_DEFAULT, "SCRIPT ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); @@ -1472,7 +1499,7 @@ public: logf_error("\E[0;35m At: %s:%i.\E[0m\n", p_file, p_line); break; case ERR_SHADER: - if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12) { + if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_12) { os_log_error(OS_LOG_DEFAULT, "SHADER ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); @@ -1483,7 +1510,7 @@ public: break; case ERR_ERROR: default: - if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12) { + if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_12) { os_log_error(OS_LOG_DEFAULT, "ERROR: %{public}s: %{public}s\nAt: %{public}s:%i.", p_function, err_details, p_file, p_line); @@ -1864,28 +1891,30 @@ bool OS_OSX::can_draw() const { void OS_OSX::set_clipboard(const String &p_text) { - NSArray *types = [NSArray arrayWithObjects:NSStringPboardType, nil]; + NSString *copiedString = [NSString stringWithUTF8String:p_text.utf8().get_data()]; + NSArray *copiedStringArray = [NSArray arrayWithObject:copiedString]; NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; - [pasteboard declareTypes:types owner:nil]; - [pasteboard setString:[NSString stringWithUTF8String:p_text.utf8().get_data()] - forType:NSStringPboardType]; + [pasteboard clearContents]; + [pasteboard writeObjects:copiedStringArray]; } String OS_OSX::get_clipboard() const { NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; + NSArray *classArray = [NSArray arrayWithObject:[NSString class]]; + NSDictionary *options = [NSDictionary dictionary]; - if (![[pasteboard types] containsObject:NSStringPboardType]) { - return ""; - } + BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options]; - NSString *object = [pasteboard stringForType:NSStringPboardType]; - if (!object) { + if (!ok) { return ""; } - char *utfs = strdup([object UTF8String]); + NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options]; + NSString *string = [objectsToPaste objectAtIndex:0]; + + char *utfs = strdup([string UTF8String]); String ret; ret.parse_utf8(utfs); free(utfs); @@ -2152,11 +2181,7 @@ void OS_OSX::set_window_size(const Size2 p_size) { if (menuBarHeight != 0.f) { size.y += menuBarHeight; } else { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 if (floor(NSAppKitVersionNumber) < NSAppKitVersionNumber10_12) { -#else - { -#endif size.y += [[NSStatusBar systemStatusBar] thickness]; } } @@ -2717,7 +2742,9 @@ OS_OSX::OS_OSX() { [NSApp sendEvent:event]; } +#ifdef COREAUDIO_ENABLED AudioDriverManager::add_driver(&audio_driver); +#endif } bool OS_OSX::_check_internal_feature_support(const String &p_feature) { diff --git a/platform/server/SCsub b/platform/server/SCsub index c9082f9b3a..51fd05a87e 100644 --- a/platform/server/SCsub +++ b/platform/server/SCsub @@ -1,10 +1,21 @@ #!/usr/bin/env python +import os +import platform +import sys + Import('env') common_server = [\ "os_server.cpp",\ - "#platform/x11/crash_handler_x11.cpp", - "#platform/x11/power_x11.cpp", ] + +if sys.platform == "darwin": + common_server.append("#platform/osx/crash_handler_osx.mm") + common_server.append("#platform/osx/power_osx.cpp") + common_server.append("#platform/osx/sem_osx.cpp") +else: + common_server.append("#platform/x11/crash_handler_x11.cpp") + common_server.append("#platform/x11/power_x11.cpp") + prog = env.add_program('#bin/godot_server', ['godot_server.cpp'] + common_server) diff --git a/platform/server/detect.py b/platform/server/detect.py index 597a2ff6a0..0b23e9c649 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -11,9 +11,15 @@ def get_name(): return "Server" +def get_program_suffix(): + if (sys.platform == "darwin"): + return "osx" + return "x11" + + def can_build(): - if (os.name != "posix" or sys.platform == "darwin"): + if (os.name != "posix"): return False return True @@ -147,6 +153,10 @@ def configure(env): env.Append(CPPPATH=['#platform/server']) env.Append(CPPFLAGS=['-DSERVER_ENABLED', '-DUNIX_ENABLED']) + + if (platform.system() == "Darwin"): + env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-lz', '-framework', 'IOKit']) + env.Append(LIBS=['pthread']) if (platform.system() == "Linux"): diff --git a/platform/server/os_server.cpp b/platform/server/os_server.cpp index 1069d6bbed..60f20d6009 100644 --- a/platform/server/os_server.cpp +++ b/platform/server/os_server.cpp @@ -68,6 +68,10 @@ void OS_Server::initialize_core() { crash_handler.initialize(); OS_Unix::initialize_core(); + +#ifdef __APPLE__ + SemaphoreOSX::make_default(); +#endif } Error OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { @@ -87,7 +91,11 @@ Error OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int input = memnew(InputDefault); +#ifdef __APPLE__ + power_manager = memnew(power_osx); +#else power_manager = memnew(PowerX11); +#endif _ensure_user_data_dir(); @@ -221,7 +229,7 @@ void OS_Server::run() { while (!force_quit) { - if (Main::iteration() == true) + if (Main::iteration()) break; }; diff --git a/platform/server/os_server.h b/platform/server/os_server.h index 07d70e5236..0367ec3db9 100644 --- a/platform/server/os_server.h +++ b/platform/server/os_server.h @@ -34,8 +34,14 @@ #include "drivers/rtaudio/audio_driver_rtaudio.h" #include "drivers/unix/os_unix.h" #include "main/input_default.h" +#ifdef __APPLE__ +#include "platform/osx/crash_handler_osx.h" +#include "platform/osx/power_osx.h" +#include "platform/osx/sem_osx.h" +#else #include "platform/x11/crash_handler_x11.h" #include "platform/x11/power_x11.h" +#endif #include "servers/audio_server.h" #include "servers/visual/rasterizer.h" #include "servers/visual_server.h" @@ -61,7 +67,11 @@ class OS_Server : public OS_Unix { InputDefault *input; +#ifdef __APPLE__ + power_osx *power_manager; +#else PowerX11 *power_manager; +#endif CrashHandler crash_handler; diff --git a/platform/server/platform_config.h b/platform/server/platform_config.h index 2fa8eda337..26ba8f26c6 100644 --- a/platform/server/platform_config.h +++ b/platform/server/platform_config.h @@ -28,10 +28,13 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) #include <alloca.h> #endif #if defined(__FreeBSD__) || defined(__OpenBSD__) #include <stdlib.h> #define PTHREAD_BSD_SET_NAME #endif +#ifdef __APPLE__ +#define PTHREAD_RENAME_SELF +#endif diff --git a/platform/uwp/detect.py b/platform/uwp/detect.py index 559f23ca5b..f25b9ba9cd 100644 --- a/platform/uwp/detect.py +++ b/platform/uwp/detect.py @@ -17,7 +17,7 @@ def can_build(): # building natively on windows! if (os.getenv("VSINSTALLDIR")): - if (os.getenv("ANGLE_SRC_PATH") == None): + if (os.getenv("ANGLE_SRC_PATH") is None): return False return True diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp index 6a7284f770..c0ea13e7fb 100644 --- a/platform/uwp/export/export.cpp +++ b/platform/uwp/export/export.cpp @@ -1021,8 +1021,10 @@ public: return "UWP"; } - virtual String get_binary_extension(const Ref<EditorExportPreset> &p_preset) const { - return "appx"; + virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const { + List<String> list; + list.push_back("appx"); + return list; } virtual Ref<Texture> get_logo() const { @@ -1132,7 +1134,7 @@ public: } break; } - if (!exists_export_template("uwp_" + platform_infix + "_debug.zip", &err) || !exists_export_template("uwp_" + platform_infix + "_debug.zip", &err)) { + if (!exists_export_template("uwp_" + platform_infix + "_debug.zip", &err) || !exists_export_template("uwp_" + platform_infix + "_release.zip", &err)) { valid = false; r_missing_templates = true; } diff --git a/platform/uwp/os_uwp.cpp b/platform/uwp/os_uwp.cpp index f489c0894f..1f81d476ea 100644 --- a/platform/uwp/os_uwp.cpp +++ b/platform/uwp/os_uwp.cpp @@ -47,6 +47,7 @@ #include "platform/windows/windows_terminal_logger.h" #include "servers/audio_server.h" #include "servers/visual/visual_server_raster.h" +#include "servers/visual/visual_server_wrap_mt.h" #include "thread_uwp.h" #include <ppltasks.h> @@ -295,13 +296,10 @@ Error OSUWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_au set_video_mode(vm); visual_server = memnew(VisualServerRaster); - // FIXME: Reimplement threaded rendering? Or remove? - /* + // FIXME: Reimplement threaded rendering if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - - visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD)); + visual_server = memnew(VisualServerWrapMT(visual_server, false)); } - */ visual_server->init(); input = memnew(InputDefault); @@ -864,7 +862,7 @@ void OSUWP::run() { CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); if (managed_object->alert_close_handle) continue; process_events(); // get rid of pending events - if (Main::iteration() == true) + if (Main::iteration()) break; }; diff --git a/platform/windows/context_gl_win.cpp b/platform/windows/context_gl_win.cpp index 794f6df31f..2d70b00dda 100644 --- a/platform/windows/context_gl_win.cpp +++ b/platform/windows/context_gl_win.cpp @@ -91,18 +91,18 @@ Error ContextGL_Win::initialize() { PFD_DRAW_TO_WINDOW | // Format Must Support Window PFD_SUPPORT_OPENGL | // Format Must Support OpenGL PFD_DOUBLEBUFFER, - PFD_TYPE_RGBA, - OS::get_singleton()->is_layered_allowed() ? 32 : 24, - 0, 0, 0, 0, 0, 0, // Color Bits Ignored - OS::get_singleton()->is_layered_allowed() ? 8 : 0, // Alpha Buffer - 0, // Shift Bit Ignored - 0, // No Accumulation Buffer - 0, 0, 0, 0, // Accumulation Bits Ignored - 24, // 24Bit Z-Buffer (Depth Buffer) - 0, // No Stencil Buffer - 0, // No Auxiliary Buffer - PFD_MAIN_PLANE, // Main Drawing Layer - 0, // Reserved + (BYTE)PFD_TYPE_RGBA, + (BYTE)(OS::get_singleton()->is_layered_allowed() ? 32 : 24), + (BYTE)0, (BYTE)0, (BYTE)0, (BYTE)0, (BYTE)0, (BYTE)0, // Color Bits Ignored + (BYTE)(OS::get_singleton()->is_layered_allowed() ? 8 : 0), // Alpha Buffer + (BYTE)0, // Shift Bit Ignored + (BYTE)0, // No Accumulation Buffer + (BYTE)0, (BYTE)0, (BYTE)0, (BYTE)0, // Accumulation Bits Ignored + (BYTE)24, // 24Bit Z-Buffer (Depth Buffer) + (BYTE)0, // No Stencil Buffer + (BYTE)0, // No Auxiliary Buffer + (BYTE)PFD_MAIN_PLANE, // Main Drawing Layer + (BYTE)0, // Reserved 0, 0, 0 // Layer Masks Ignored }; diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 5d5af17086..e14db9a201 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -147,9 +147,9 @@ def setup_msvc_auto(env): # Note: actual compiler version can be found in env['MSVC_VERSION'], e.g. "14.1" for VS2015 # Get actual target arch into bits (it may be "default" at this point): if env['TARGET_ARCH'] in ('amd64', 'x86_64'): - env['bits'] = 64 + env['bits'] = '64' else: - env['bits'] = 32 + env['bits'] = '32' print(" Found MSVC version %s, arch %s, bits=%s" % (env['MSVC_VERSION'], env['TARGET_ARCH'], env['bits'])) if env['TARGET_ARCH'] in ('amd64', 'x86_64'): env["x86_libtheora_opt_vc"] = False @@ -262,7 +262,7 @@ def configure_mingw(env): env.Append(CCFLAGS=['-O2']) else: #optimize for size env.Prepend(CCFLAGS=['-Os']) - + env.Append(LINKFLAGS=['-Wl,--subsystem,windows']) @@ -281,7 +281,7 @@ def configure_mingw(env): env.Append(CCFLAGS=['-O2']) else: #optimize for size env.Prepend(CCFLAGS=['-Os']) - + elif (env["target"] == "debug"): env.Append(CCFLAGS=['-g3', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED']) diff --git a/platform/windows/joypad.cpp b/platform/windows/joypad.cpp index b56fb6509e..7201714fb8 100644 --- a/platform/windows/joypad.cpp +++ b/platform/windows/joypad.cpp @@ -163,7 +163,7 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) { const GUID &guid = instance->guidProduct; char uid[128]; - sprintf(uid, "%08lx%04hx%04hx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx", + sprintf_s(uid, "%08lx%04hx%04hx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx", __builtin_bswap32(guid.Data1), guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); @@ -172,7 +172,7 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) { joy->di_joy->SetDataFormat(&c_dfDIJoystick2); joy->di_joy->SetCooperativeLevel(*hWnd, DISCL_FOREGROUND); - joy->di_joy->EnumObjects(objectsCallback, this, NULL); + joy->di_joy->EnumObjects(objectsCallback, this, 0); joy->joy_axis.sort(); joy->guid = instance->guidInstance; diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index e8c209c0fc..55d2bb2153 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -58,11 +58,8 @@ static const WORD MAX_CONSOLE_LINES = 1500; extern "C" { -#ifdef _MSC_VER -_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; -#else -__attribute__((visibility("default"))) DWORD NvOptimusEnablement = 0x00000001; -#endif +__declspec(dllexport) DWORD NvOptimusEnablement = 1; +__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; } // Workaround mingw-w64 < 4.0 bug @@ -303,19 +300,17 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_SETFOCUS: { window_has_focus = true; - // Re-capture cursor if we're in one of the capture modes - if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { - SetCapture(hWnd); - } + + // Restore mouse mode + _set_mouse_mode_impl(mouse_mode); + break; } case WM_KILLFOCUS: { window_has_focus = false; - // Release capture if we're in one of the capture modes - if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { - ReleaseCapture(); - } + // Release capture unconditionally because it can be set due to dragging, in addition to captured mode + ReleaseCapture(); // Release every touch to avoid sticky points for (Map<int, Vector2>::Element *E = touch_state.front(); E; E = E->next()) { @@ -337,15 +332,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) alt_mem = false; control_mem = false; shift_mem = false; - if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { - RECT clipRect; - GetClientRect(hWnd, &clipRect); - ClientToScreen(hWnd, (POINT *)&clipRect.left); - ClientToScreen(hWnd, (POINT *)&clipRect.right); - ClipCursor(&clipRect); - SetCapture(hWnd); - } - } else { + } else { // WM_INACTIVE main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); alt_mem = false; }; @@ -705,12 +692,14 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (uMsg != WM_MOUSEWHEEL && uMsg != WM_MOUSEHWHEEL) { if (mb->is_pressed()) { - if (++pressrc > 0) + if (++pressrc > 0 && mouse_mode != MOUSE_MODE_CAPTURED) SetCapture(hWnd); } else { if (--pressrc <= 0) { - ReleaseCapture(); + if (mouse_mode != MOUSE_MODE_CAPTURED) { + ReleaseCapture(); + } pressrc = 0; } } @@ -738,16 +727,28 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } } break; + case WM_MOVE: { + if (!IsIconic(hWnd)) { + int x = LOWORD(lParam); + int y = HIWORD(lParam); + last_pos = Point2(x, y); + } + } break; + case WM_SIZE: { - int window_w = LOWORD(lParam); - int window_h = HIWORD(lParam); - if (window_w > 0 && window_h > 0 && !preserve_window_size) { - video_mode.width = window_w; - video_mode.height = window_h; - } else { - preserve_window_size = false; - set_window_size(Size2(video_mode.width, video_mode.height)); + // Ignore size when a SIZE_MINIMIZED event is triggered + if (wParam != SIZE_MINIMIZED) { + int window_w = LOWORD(lParam); + int window_h = HIWORD(lParam); + if (window_w > 0 && window_h > 0 && !preserve_window_size) { + video_mode.width = window_w; + video_mode.height = window_h; + } else { + preserve_window_size = false; + set_window_size(Size2(video_mode.width, video_mode.height)); + } } + if (wParam == SIZE_MAXIMIZED) { maximized = true; minimized = false; @@ -763,7 +764,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) RECT r; GetWindowRect(hWnd, &r); - dib_size = Size2(r.right - r.left, r.bottom - r.top); + dib_size = Size2i(r.right - r.left, r.bottom - r.top); BITMAPINFO bmi; ZeroMemory(&bmi, sizeof(BITMAPINFO)); @@ -773,7 +774,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = BI_RGB; - bmi.bmiHeader.biSizeImage = dib_size.x, dib_size.y * 4; + bmi.bmiHeader.biSizeImage = dib_size.x * dib_size.y * 4; hBitmap = CreateDIBSection(hDC_dib, &bmi, DIB_RGB_COLORS, (void **)&dib_data, NULL, 0x0); SelectObject(hDC_dib, hBitmap); @@ -1050,7 +1051,6 @@ static int QueryDpiForMonitor(HMONITOR hmon, _MonitorDpiType dpiType = MDT_Defau UINT x = 0, y = 0; HRESULT hr = E_FAIL; - bool bSet = false; if (hmon && (Shcore != (HMODULE)INVALID_HANDLE_VALUE)) { hr = getDPIForMonitor(hmon, dpiType /*MDT_Effective_DPI*/, &x, &y); if (SUCCEEDED(hr) && (x > 0) && (y > 0)) { @@ -1204,7 +1204,14 @@ Error OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); - char *windowid = getenv("GODOT_WINDOWID"); + char *windowid; +#ifdef MINGW_ENABLED + windowid = getenv("GODOT_WINDOWID"); +#else + size_t len; + _dupenv_s(&windowid, &len, "GODOT_WINDOWID"); +#endif + if (windowid) { // strtoull on mingw @@ -1213,6 +1220,7 @@ Error OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int #else hWnd = (HWND)_strtoui64(windowid, NULL, 0); #endif + free(windowid); SetLastError(0); user_proc = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_WNDPROC); SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)(WNDPROC)::WndProc); @@ -1221,7 +1229,7 @@ Error OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int printf("Error setting WNDPROC: %li\n", le); }; - LONG_PTR proc = GetWindowLongPtr(hWnd, GWLP_WNDPROC); + GetWindowLongPtr(hWnd, GWLP_WNDPROC); RECT rect; if (!GetClientRect(hWnd, &rect)) { @@ -1327,24 +1335,9 @@ Error OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int visual_server = memnew(VisualServerRaster); if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD)); } - /* - DEVMODE dmScreenSettings; // Device Mode - memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared - dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure - dmScreenSettings.dmPelsWidth = width; // Selected Screen Width - dmScreenSettings.dmPelsHeight = height; // Selected Screen Height - dmScreenSettings.dmBitsPerPel = bits; // Selected Bits Per Pixel - dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; - if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) - - - - - */ visual_server->init(); input = memnew(InputDefault); @@ -1527,18 +1520,27 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) { if (mouse_mode == p_mode) return; + + _set_mouse_mode_impl(p_mode); + mouse_mode = p_mode; - if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { +} + +void OS_Windows::_set_mouse_mode_impl(MouseMode p_mode) { + + if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_CONFINED) { RECT clipRect; GetClientRect(hWnd, &clipRect); ClientToScreen(hWnd, (POINT *)&clipRect.left); ClientToScreen(hWnd, (POINT *)&clipRect.right); ClipCursor(&clipRect); - center = Point2i(video_mode.width / 2, video_mode.height / 2); - POINT pos = { (int)center.x, (int)center.y }; - ClientToScreen(hWnd, &pos); - if (mouse_mode == MOUSE_MODE_CAPTURED) + if (p_mode == MOUSE_MODE_CAPTURED) { + center = Point2i(video_mode.width / 2, video_mode.height / 2); + POINT pos = { (int)center.x, (int)center.y }; + ClientToScreen(hWnd, &pos); SetCursorPos(pos.x, pos.y); + SetCapture(hWnd); + } } else { ReleaseCapture(); ClipCursor(NULL); @@ -1552,7 +1554,6 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) { set_cursor_shape(c); } } - OS_Windows::MouseMode OS_Windows::get_mouse_mode() const { return mouse_mode; @@ -1696,6 +1697,10 @@ int OS_Windows::get_screen_dpi(int p_screen) const { Point2 OS_Windows::get_window_position() const { + if (minimized) { + return last_pos; + } + RECT r; GetWindowRect(hWnd, &r); return Point2(r.left, r.top); @@ -1716,18 +1721,28 @@ void OS_Windows::set_window_position(const Point2 &p_position) { ClientToScreen(hWnd, (POINT *)&rect.right); ClipCursor(&rect); } + + last_pos = p_position; } Size2 OS_Windows::get_window_size() const { + if (minimized) { + return Size2(video_mode.width, video_mode.height); + } + RECT r; - GetClientRect(hWnd, &r); - return Vector2(r.right - r.left, r.bottom - r.top); + if (GetClientRect(hWnd, &r)) { // Only area inside of window border + return Size2(r.right - r.left, r.bottom - r.top); + } + return Size2(); } Size2 OS_Windows::get_real_window_size() const { RECT r; - GetWindowRect(hWnd, &r); - return Vector2(r.right - r.left, r.bottom - r.top); + if (GetWindowRect(hWnd, &r)) { // Includes area of the window border + return Size2(r.right - r.left, r.bottom - r.top); + } + return Size2(); } void OS_Windows::set_window_size(const Size2 p_size) { @@ -1744,7 +1759,7 @@ void OS_Windows::set_window_size(const Size2 p_size) { RECT rect; GetWindowRect(hWnd, &rect); - if (video_mode.borderless_window == false) { + if (!video_mode.borderless_window) { RECT crect; GetClientRect(hWnd, &crect); @@ -2266,7 +2281,6 @@ void OS_Windows::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shap ERR_FAIL_COND(!image.is_valid()); UINT image_size = texture_size.width * texture_size.height; - UINT size = sizeof(UINT) * image_size; // Create the BITMAP with alpha channel COLORREF *buffer = (COLORREF *)memalloc(sizeof(COLORREF) * image_size); @@ -2546,7 +2560,16 @@ void OS_Windows::set_icon(const Ref<Image> &p_icon) { bool OS_Windows::has_environment(const String &p_var) const { +#ifdef MINGW_ENABLED return _wgetenv(p_var.c_str()) != NULL; +#else + wchar_t *env; + size_t len; + _wdupenv_s(&env, &len, p_var.c_str()); + const bool has_env = env != NULL; + free(env); + return has_env; +#endif }; String OS_Windows::get_environment(const String &p_var) const { @@ -2729,15 +2752,10 @@ void OS_Windows::run() { main_loop->init(); - uint64_t last_ticks = get_ticks_usec(); - - int frames = 0; - uint64_t frame = 0; - while (!force_quit) { process_events(); // get rid of pending events - if (Main::iteration() == true) + if (Main::iteration()) break; }; @@ -2926,7 +2944,7 @@ bool OS_Windows::is_disable_crash_handler() const { Error OS_Windows::move_to_trash(const String &p_path) { SHFILEOPSTRUCTW sf; WCHAR *from = new WCHAR[p_path.length() + 2]; - wcscpy(from, p_path.c_str()); + wcscpy_s(from, p_path.length() + 1, p_path.c_str()); from[p_path.length() + 1] = 0; sf.hwnd = hWnd; diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 01e1c51ca5..d09ade4daa 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -93,6 +93,7 @@ class OS_Windows : public OS { HDC hDC; // Private GDI Device Context HINSTANCE hInstance; // Holds The Instance Of The Application HWND hWnd; + Point2 last_pos; HBITMAP hBitmap; //DIB section for layered window uint8_t *dib_data; @@ -157,6 +158,8 @@ class OS_Windows : public OS { void _update_window_style(bool repaint = true); + void _set_mouse_mode_impl(MouseMode p_mode); + // functions used by main to initialize/deinitialize the OS protected: virtual int get_current_video_driver() const; diff --git a/platform/x11/detect.py b/platform/x11/detect.py index ee59e9b5a1..524c8448bc 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -1,6 +1,7 @@ import os import platform import sys +from compat import decode_utf8 def is_active(): @@ -149,6 +150,19 @@ def configure(env): env.Append(CCFLAGS=['-pipe']) env.Append(LINKFLAGS=['-pipe']) + # Check for gcc version > 5 before adding -no-pie + import re + import subprocess + proc = subprocess.Popen([env['CXX'], '--version'], stdout=subprocess.PIPE) + (stdout, _) = proc.communicate() + stdout = decode_utf8(stdout) + match = re.search('[0-9][0-9.]*', stdout) + if match is not None: + version = match.group().split('.') + if (version[0] > '5'): + env.Append(CCFLAGS=['-fpie']) + env.Append(LINKFLAGS=['-no-pie']) + ## Dependencies env.ParseConfig('pkg-config x11 --cflags --libs') diff --git a/platform/x11/godot_x11.cpp b/platform/x11/godot_x11.cpp index 3241cbcbf9..21148f8e86 100644 --- a/platform/x11/godot_x11.cpp +++ b/platform/x11/godot_x11.cpp @@ -43,7 +43,7 @@ int main(int argc, char *argv[]) { setlocale(LC_CTYPE, ""); char *cwd = (char *)malloc(PATH_MAX); - getcwd(cwd, PATH_MAX); + char *ret = getcwd(cwd, PATH_MAX); Error err = Main::setup(argv[0], argc - 1, &argv[1]); if (err != OK) { @@ -55,7 +55,8 @@ int main(int argc, char *argv[]) { os.run(); // it is actually the OS that decides how to run Main::cleanup(); - chdir(cwd); + if (ret) + chdir(cwd); free(cwd); return os.get_exit_code(); diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 5be0b9304a..0c02e47b5e 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -267,6 +267,10 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a // maybe contextgl wants to be in charge of creating the window #if defined(OPENGL_ENABLED) + // Set DRI_PRIME if not set. This means that Godot should default to a higher-power GPU if it exists. + // Note: Due to the final '0' parameter to setenv any existing DRI_PRIME environment variables will not + // be overwritten. + setenv("DRI_PRIME", "1", 0); ContextGL_X11::ContextType opengl_api_type = ContextGL_X11::GLES_3_0_COMPATIBLE; @@ -342,12 +346,12 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a context_gl->set_use_vsync(current_videomode.use_vsync); #endif - visual_server = memnew(VisualServerRaster); + visual_server = memnew(VisualServerRaster); if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD)); } + if (current_videomode.maximized) { current_videomode.maximized = false; set_window_maximized(true); @@ -365,7 +369,7 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a } // disable resizable window - if (!current_videomode.resizable) { + if (!current_videomode.resizable && !current_videomode.fullscreen) { XSizeHints *xsh; xsh = XAllocSizeHints(); xsh->flags = PMinSize | PMaxSize; @@ -1096,7 +1100,7 @@ void OS_X11::set_window_size(const Size2 p_size) { int old_h = xwa.height; // If window resizable is disabled we need to update the attributes first - if (is_window_resizable() == false) { + if (!is_window_resizable()) { XSizeHints *xsh; xsh = XAllocSizeHints(); xsh->flags = PMinSize | PMaxSize; @@ -1688,7 +1692,7 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { } } else { //ignore - if (last_is_pressed == false) { + if (!last_is_pressed) { return; } } @@ -2095,7 +2099,7 @@ void OS_X11::process_xevents() { last_timestamp = event.xkey.time; // key event is a little complex, so - // it will be handled in it's own function. + // it will be handled in its own function. handle_key_event((XKeyEvent *)&event); } break; case SelectionRequest: { @@ -2814,7 +2818,7 @@ void OS_X11::run() { #ifdef JOYDEV_ENABLED joypad->process_joypads(); #endif - if (Main::iteration() == true) + if (Main::iteration()) break; }; @@ -2849,11 +2853,19 @@ void OS_X11::set_context(int p_context) { XClassHint *classHint = XAllocClassHint(); if (classHint) { + char *wm_class = (char *)"Godot"; if (p_context == CONTEXT_EDITOR) classHint->res_name = (char *)"Godot_Editor"; if (p_context == CONTEXT_PROJECTMAN) classHint->res_name = (char *)"Godot_ProjectList"; - classHint->res_class = (char *)"Godot"; + + if (p_context == CONTEXT_ENGINE) { + classHint->res_name = (char *)"Godot_Engine"; + wm_class = (char *)((String)GLOBAL_GET("application/config/name")).utf8().ptrw(); + } + + classHint->res_class = wm_class; + XSetClassHint(x11_display, x11_window, classHint); XFree(classHint); } diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp index a33fc844a5..b11c2c2886 100644 --- a/scene/2d/animated_sprite.cpp +++ b/scene/2d/animated_sprite.cpp @@ -312,12 +312,12 @@ void SpriteFrames::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_frames"), &SpriteFrames::_set_frames); ClassDB::bind_method(D_METHOD("_get_frames"), &SpriteFrames::_get_frames); - ADD_PROPERTYNZ(PropertyInfo(Variant::ARRAY, "frames", PROPERTY_HINT_NONE, "", 0), "_set_frames", "_get_frames"); //compatibility + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "frames", PROPERTY_HINT_NONE, "", 0), "_set_frames", "_get_frames"); //compatibility ClassDB::bind_method(D_METHOD("_set_animations"), &SpriteFrames::_set_animations); ClassDB::bind_method(D_METHOD("_get_animations"), &SpriteFrames::_get_animations); - ADD_PROPERTYNZ(PropertyInfo(Variant::ARRAY, "animations", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_animations", "_get_animations"); //compatibility + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "animations", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_animations", "_get_animations"); //compatibility } SpriteFrames::SpriteFrames() { @@ -395,15 +395,17 @@ void AnimatedSprite::_notification(int p_what) { int fc = frames->get_frame_count(animation); if (frame >= fc - 1) { if (frames->get_animation_loop(animation)) { + emit_signal(SceneStringNames::get_singleton()->animation_finished); frame = 0; } else { frame = fc - 1; + if (!is_over) { + is_over = true; + emit_signal(SceneStringNames::get_singleton()->animation_finished); + } } } else { frame++; - if (frame == fc - 1) { - emit_signal(SceneStringNames::get_singleton()->animation_finished); - } } update(); @@ -625,6 +627,7 @@ void AnimatedSprite::_reset_timeout() { return; timeout = _get_frame_duration(); + is_over = false; } void AnimatedSprite::set_animation(const StringName &p_animation) { @@ -690,15 +693,15 @@ void AnimatedSprite::_bind_methods() { ADD_SIGNAL(MethodInfo("frame_changed")); ADD_SIGNAL(MethodInfo("animation_finished")); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "animation"), "set_animation", "get_animation"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "frame", PROPERTY_HINT_SPRITE_FRAME), "set_frame", "get_frame"); - ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "speed_scale"), "set_speed_scale", "get_speed_scale"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "playing"), "_set_playing", "_is_playing"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "flip_h"), "set_flip_h", "is_flipped_h"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "flip_v"), "set_flip_v", "is_flipped_v"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "frame", PROPERTY_HINT_SPRITE_FRAME), "set_frame", "get_frame"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "speed_scale"), "set_speed_scale", "get_speed_scale"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing"), "_set_playing", "_is_playing"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "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"); } AnimatedSprite::AnimatedSprite() { @@ -712,4 +715,5 @@ AnimatedSprite::AnimatedSprite() { playing = false; animation = "default"; timeout = 0; + is_over = false; } diff --git a/scene/2d/animated_sprite.h b/scene/2d/animated_sprite.h index cc49465403..7270ee4d0e 100644 --- a/scene/2d/animated_sprite.h +++ b/scene/2d/animated_sprite.h @@ -135,6 +135,7 @@ class AnimatedSprite : public Node2D { bool centered; Point2 offset; + bool is_over; float timeout; bool hflip; diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp index c375374dce..4a4aaf3238 100644 --- a/scene/2d/area_2d.cpp +++ b/scene/2d/area_2d.cpp @@ -158,7 +158,9 @@ void Area2D::_body_inout(int p_status, const RID &p_body, int p_instance, int p_ Map<ObjectID, BodyState>::Element *E = body_map.find(objid); - ERR_FAIL_COND(!body_in && !E); + if (!body_in && !E) { + return; //does not exist because it was likely removed from the tree + } locked = true; @@ -399,7 +401,7 @@ void Area2D::set_monitoring(bool p_enable) { if (p_enable == monitoring) return; if (locked) { - ERR_EXPLAIN("Function blocked during in/out signal. Use call_deferred(\"set_monitoring\",true/false)"); + ERR_EXPLAIN("Function blocked during in/out signal. Use set_deferred(\"monitoring\",true/false)"); } ERR_FAIL_COND(locked); @@ -424,10 +426,10 @@ bool Area2D::is_monitoring() const { void Area2D::set_monitorable(bool p_enable) { - if (locked) { - ERR_EXPLAIN("This function can't be used during the in/out signal."); + if (locked || Physics2DServer::get_singleton()->is_flushing_queries()) { + ERR_EXPLAIN("Function blocked during in/out signal. Use set_deferred(\"monitorable\",true/false)"); } - ERR_FAIL_COND(locked); + ERR_FAIL_COND(locked || Physics2DServer::get_singleton()->is_flushing_queries()); if (p_enable == monitorable) return; @@ -664,19 +666,19 @@ void Area2D::_bind_methods() { ADD_SIGNAL(MethodInfo("area_entered", PropertyInfo(Variant::OBJECT, "area", PROPERTY_HINT_RESOURCE_TYPE, "Area2D"))); ADD_SIGNAL(MethodInfo("area_exited", PropertyInfo(Variant::OBJECT, "area", PROPERTY_HINT_RESOURCE_TYPE, "Area2D"))); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine"), "set_space_override_mode", "get_space_override_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "gravity_point"), "set_gravity_is_point", "is_gravity_a_point"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "gravity_distance_scale", PROPERTY_HINT_EXP_RANGE, "0,1024,0.001,or_greater"), "set_gravity_distance_scale", "get_gravity_distance_scale"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine"), "set_space_override_mode", "get_space_override_mode"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point"), "set_gravity_is_point", "is_gravity_a_point"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "gravity_distance_scale", PROPERTY_HINT_EXP_RANGE, "0,1024,0.001,or_greater"), "set_gravity_distance_scale", "get_gravity_distance_scale"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_vec"), "set_gravity_vector", "get_gravity_vector"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "gravity", PROPERTY_HINT_RANGE, "-1024,1024,0.001"), "set_gravity", "get_gravity"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.01,or_greater"), "set_linear_damp", "get_linear_damp"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.01,or_greater"), "set_angular_damp", "get_angular_damp"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,128,1"), "set_priority", "get_priority"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "monitoring"), "set_monitoring", "is_monitoring"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "monitorable"), "set_monitorable", "is_monitorable"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,128,1"), "set_priority", "get_priority"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "monitoring"), "set_monitoring", "is_monitoring"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "monitorable"), "set_monitorable", "is_monitorable"); ADD_GROUP("Collision", "collision_"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_layer", "get_collision_layer"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_layer", "get_collision_layer"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask"); ADD_GROUP("Audio Bus", "audio_bus_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_bus_override"), "set_audio_bus_override", "is_overriding_audio_bus"); diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index a1ae05d971..c2af725919 100644 --- a/scene/2d/audio_stream_player_2d.cpp +++ b/scene/2d/audio_stream_player_2d.cpp @@ -92,6 +92,9 @@ void AudioStreamPlayer2D::_mix_audio() { int cc = AudioServer::get_singleton()->get_channel_count(); if (cc == 1) { + if (!AudioServer::get_singleton()->thread_has_channel_mix_buffer(current.bus_index, 0)) + continue; //may have been removed + AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(current.bus_index, 0); for (int j = 0; j < buffer_size; j++) { @@ -102,11 +105,20 @@ void AudioStreamPlayer2D::_mix_audio() { } else { AudioFrame *targets[4]; + bool valid = true; for (int k = 0; k < cc; k++) { + if (!AudioServer::get_singleton()->thread_has_channel_mix_buffer(current.bus_index, k)) { + valid = false; //may have been removed + break; + } + targets[k] = AudioServer::get_singleton()->thread_get_channel_mix_buffer(current.bus_index, k); } + if (!valid) + continue; + for (int j = 0; j < buffer_size; j++) { AudioFrame frame = buffer[j] * vol; @@ -179,7 +191,7 @@ void AudioStreamPlayer2D::_notification(int p_what) { Physics2DDirectSpaceState::ShapeResult sr[MAX_INTERSECT_AREAS]; - int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask); + int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, false, true); for (int i = 0; i < areas; i++) { @@ -311,6 +323,7 @@ void AudioStreamPlayer2D::play(float p_from_pos) { } if (stream_playback.is_valid()) { + active = true; setplay = p_from_pos; output_ready = false; set_physics_process_internal(true); diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 3b86ca76ea..cc297d742d 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -422,14 +422,14 @@ void Camera2D::clear_current() { void Camera2D::set_limit(Margin p_margin, int p_limit) { - ERR_FAIL_INDEX(p_margin, 4); + ERR_FAIL_INDEX((int)p_margin, 4); limit[p_margin] = p_limit; update(); } int Camera2D::get_limit(Margin p_margin) const { - ERR_FAIL_INDEX_V(p_margin, 4, 0); + ERR_FAIL_INDEX_V((int)p_margin, 4, 0); return limit[p_margin]; } @@ -446,14 +446,14 @@ bool Camera2D::is_limit_smoothing_enabled() const { void Camera2D::set_drag_margin(Margin p_margin, float p_drag_margin) { - ERR_FAIL_INDEX(p_margin, 4); + ERR_FAIL_INDEX((int)p_margin, 4); drag_margin[p_margin] = p_drag_margin; update(); } float Camera2D::get_drag_margin(Margin p_margin) const { - ERR_FAIL_INDEX_V(p_margin, 4, 0); + ERR_FAIL_INDEX_V((int)p_margin, 4, 0); return drag_margin[p_margin]; } @@ -710,7 +710,7 @@ 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_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "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"); diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index fab0b7d433..d847fa2471 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -44,12 +44,19 @@ Mutex *CanvasItemMaterial::material_mutex = NULL; SelfList<CanvasItemMaterial>::List CanvasItemMaterial::dirty_materials; Map<CanvasItemMaterial::MaterialKey, CanvasItemMaterial::ShaderData> CanvasItemMaterial::shader_map; +CanvasItemMaterial::ShaderNames *CanvasItemMaterial::shader_names = NULL; void CanvasItemMaterial::init_shaders() { #ifndef NO_THREADS material_mutex = Mutex::create(); #endif + + shader_names = memnew(ShaderNames); + + shader_names->particles_anim_h_frames = "particles_anim_h_frames"; + shader_names->particles_anim_v_frames = "particles_anim_v_frames"; + shader_names->particles_anim_loop = "particles_anim_loop"; } void CanvasItemMaterial::finish_shaders() { @@ -102,7 +109,37 @@ void CanvasItemMaterial::_update_shader() { case LIGHT_MODE_UNSHADED: code += ",unshaded"; break; case LIGHT_MODE_LIGHT_ONLY: code += ",light_only"; break; } - code += ";\n"; //that's it. + + code += ";\n"; + + if (particles_animation) { + + code += "uniform int particles_anim_h_frames;\n"; + code += "uniform int particles_anim_v_frames;\n"; + code += "uniform bool particles_anim_loop;\n"; + + code += "void vertex() {\n"; + + code += "\tfloat h_frames = float(particles_anim_h_frames);\n"; + code += "\tfloat v_frames = float(particles_anim_v_frames);\n"; + + code += "\tVERTEX.xy /= vec2(h_frames, v_frames);\n"; + + code += "\tint total_frames = particles_anim_h_frames * particles_anim_v_frames;\n"; + code += "\tint frame = int(float(total_frames) * INSTANCE_CUSTOM.z);\n"; + code += "\tif (particles_anim_loop) {\n"; + code += "\t\tframe = abs(frame) % total_frames;\n"; + code += "\t} else {\n"; + code += "\t\tframe = clamp(frame, 0, total_frames - 1);\n"; + code += "\t}\n"; + + code += "\tfloat frame_w = 1.0 / h_frames;\n"; + code += "\tfloat frame_h = 1.0 / v_frames;\n"; + code += "\tUV.x = UV.x * frame_w + frame_w * float(frame % particles_anim_h_frames);\n"; + code += "\tUV.y = UV.y * frame_h + frame_h * float(frame / particles_anim_h_frames);\n"; + + code += "}\n"; + } ShaderData shader_data; shader_data.shader = VS::get_singleton()->shader_create(); @@ -177,7 +214,52 @@ CanvasItemMaterial::LightMode CanvasItemMaterial::get_light_mode() const { return light_mode; } +void CanvasItemMaterial::set_particles_animation(bool p_particles_anim) { + particles_animation = p_particles_anim; + _queue_shader_change(); + _change_notify(); +} + +bool CanvasItemMaterial::get_particles_animation() const { + return particles_animation; +} + +void CanvasItemMaterial::set_particles_anim_h_frames(int p_frames) { + + particles_anim_h_frames = p_frames; + VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_h_frames, p_frames); +} + +int CanvasItemMaterial::get_particles_anim_h_frames() const { + + return particles_anim_h_frames; +} +void CanvasItemMaterial::set_particles_anim_v_frames(int p_frames) { + + particles_anim_v_frames = p_frames; + VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_v_frames, p_frames); +} + +int CanvasItemMaterial::get_particles_anim_v_frames() const { + + return particles_anim_v_frames; +} + +void CanvasItemMaterial::set_particles_anim_loop(bool p_loop) { + + particles_anim_loop = p_loop; + VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_loop, particles_anim_loop); +} + +bool CanvasItemMaterial::get_particles_anim_loop() const { + + return particles_anim_loop; +} + void CanvasItemMaterial::_validate_property(PropertyInfo &property) const { + if (property.name.begins_with("particles_anim_") && !particles_animation) { + property.usage = 0; + } } RID CanvasItemMaterial::get_shader_rid() const { @@ -199,8 +281,25 @@ void CanvasItemMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_light_mode", "light_mode"), &CanvasItemMaterial::set_light_mode); ClassDB::bind_method(D_METHOD("get_light_mode"), &CanvasItemMaterial::get_light_mode); + ClassDB::bind_method(D_METHOD("set_particles_animation", "particles_anim"), &CanvasItemMaterial::set_particles_animation); + ClassDB::bind_method(D_METHOD("get_particles_animation"), &CanvasItemMaterial::get_particles_animation); + + ClassDB::bind_method(D_METHOD("set_particles_anim_h_frames", "frames"), &CanvasItemMaterial::set_particles_anim_h_frames); + ClassDB::bind_method(D_METHOD("get_particles_anim_h_frames"), &CanvasItemMaterial::get_particles_anim_h_frames); + + ClassDB::bind_method(D_METHOD("set_particles_anim_v_frames", "frames"), &CanvasItemMaterial::set_particles_anim_v_frames); + ClassDB::bind_method(D_METHOD("get_particles_anim_v_frames"), &CanvasItemMaterial::get_particles_anim_v_frames); + + ClassDB::bind_method(D_METHOD("set_particles_anim_loop", "loop"), &CanvasItemMaterial::set_particles_anim_loop); + ClassDB::bind_method(D_METHOD("get_particles_anim_loop"), &CanvasItemMaterial::get_particles_anim_loop); + ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_mode", PROPERTY_HINT_ENUM, "Mix,Add,Sub,Mul,Premult Alpha"), "set_blend_mode", "get_blend_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "light_mode", PROPERTY_HINT_ENUM, "Normal,Unshaded,Light Only"), "set_light_mode", "get_light_mode"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "particles_animation"), "set_particles_animation", "get_particles_animation"); + + ADD_PROPERTY(PropertyInfo(Variant::INT, "particles_anim_h_frames", PROPERTY_HINT_RANGE, "1,128,1"), "set_particles_anim_h_frames", "get_particles_anim_h_frames"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "particles_anim_v_frames", PROPERTY_HINT_RANGE, "1,128,1"), "set_particles_anim_v_frames", "get_particles_anim_v_frames"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "particles_anim_loop"), "set_particles_anim_loop", "get_particles_anim_loop"); BIND_ENUM_CONSTANT(BLEND_MODE_MIX); BIND_ENUM_CONSTANT(BLEND_MODE_ADD); @@ -218,6 +317,11 @@ CanvasItemMaterial::CanvasItemMaterial() : blend_mode = BLEND_MODE_MIX; light_mode = LIGHT_MODE_NORMAL; + particles_animation = false; + + set_particles_anim_h_frames(1); + set_particles_anim_v_frames(1); + set_particles_anim_loop(false); current_key.key = 0; current_key.invalid_key = 1; @@ -272,6 +376,9 @@ bool CanvasItem::is_visible_in_tree() const { void CanvasItem::_propagate_visibility_changed(bool p_visible) { + if (p_visible && first_draw) { //avoid propagating it twice + first_draw = false; + } notification(NOTIFICATION_VISIBILITY_CHANGED); if (p_visible) @@ -861,6 +968,15 @@ RID CanvasItem::get_canvas() const { return get_viewport()->find_world_2d()->get_canvas(); } +ObjectID CanvasItem::get_canvas_layer_instance_id() const { + + if (canvas_layer) { + return canvas_layer->get_instance_id(); + } else { + return 0; + } +} + CanvasItem *CanvasItem::get_toplevel() const { CanvasItem *ci = const_cast<CanvasItem *>(this); @@ -1044,7 +1160,7 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("draw_string", "font", "position", "text", "modulate", "clip_w"), &CanvasItem::draw_string, DEFVAL(Color(1, 1, 1)), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("draw_char", "font", "position", "char", "next", "modulate"), &CanvasItem::draw_char, DEFVAL(Color(1, 1, 1))); ClassDB::bind_method(D_METHOD("draw_mesh", "mesh", "texture", "normal_map"), &CanvasItem::draw_mesh, DEFVAL(Ref<Texture>())); - ClassDB::bind_method(D_METHOD("draw_multimesh", "mesh", "texture", "normal_map"), &CanvasItem::draw_mesh, DEFVAL(Ref<Texture>())); + ClassDB::bind_method(D_METHOD("draw_multimesh", "multimesh", "texture", "normal_map"), &CanvasItem::draw_multimesh, DEFVAL(Ref<Texture>())); ClassDB::bind_method(D_METHOD("draw_set_transform", "position", "rotation", "scale"), &CanvasItem::draw_set_transform); ClassDB::bind_method(D_METHOD("draw_set_transform_matrix", "xform"), &CanvasItem::draw_set_transform_matrix); @@ -1080,16 +1196,16 @@ void CanvasItem::_bind_methods() { BIND_VMETHOD(MethodInfo("_draw")); ADD_GROUP("Visibility", ""); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible"); - ADD_PROPERTYNO(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate"); - ADD_PROPERTYNO(PropertyInfo(Variant::COLOR, "self_modulate"), "set_self_modulate", "get_self_modulate"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "show_behind_parent"), "set_draw_behind_parent", "is_draw_behind_parent_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible"); + ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate"); + ADD_PROPERTY(PropertyInfo(Variant::COLOR, "self_modulate"), "set_self_modulate", "get_self_modulate"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_behind_parent"), "set_draw_behind_parent", "is_draw_behind_parent_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_on_top", PROPERTY_HINT_NONE, "", 0), "_set_on_top", "_is_on_top"); //compatibility - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "light_mask", PROPERTY_HINT_LAYERS_2D_RENDER), "set_light_mask", "get_light_mask"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "light_mask", PROPERTY_HINT_LAYERS_2D_RENDER), "set_light_mask", "get_light_mask"); ADD_GROUP("Material", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial,CanvasItemMaterial"), "set_material", "get_material"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "use_parent_material"), "set_use_parent_material", "get_use_parent_material"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial,CanvasItemMaterial"), "set_material", "get_material"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_parent_material"), "set_use_parent_material", "get_use_parent_material"); //exporting these things doesn't really make much sense i think // ADD_PROPERTY(PropertyInfo(Variant::BOOL, "toplevel", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_as_toplevel", "is_set_as_toplevel"); // ADD_PROPERTY(PropertyInfo(Variant::BOOL,"transform/notify"),"set_transform_notify","is_transform_notify_enabled"); diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index 36a0e4039a..9fe7cb1e00 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -70,6 +70,7 @@ private: struct { uint32_t blend_mode : 4; uint32_t light_mode : 4; + uint32_t particles_animation : 1; uint32_t invalid_key : 1; }; @@ -80,6 +81,14 @@ private: } }; + struct ShaderNames { + StringName particles_anim_h_frames; + StringName particles_anim_v_frames; + StringName particles_anim_loop; + }; + + static ShaderNames *shader_names; + struct ShaderData { RID shader; int users; @@ -95,6 +104,7 @@ private: mk.key = 0; mk.blend_mode = blend_mode; mk.light_mode = light_mode; + mk.particles_animation = particles_animation; return mk; } @@ -108,6 +118,11 @@ private: BlendMode blend_mode; LightMode light_mode; + bool particles_animation; + + int particles_anim_h_frames; + int particles_anim_v_frames; + bool particles_anim_loop; protected: static void _bind_methods(); @@ -120,6 +135,17 @@ public: void set_light_mode(LightMode p_light_mode); LightMode get_light_mode() const; + void set_particles_animation(bool p_particles_anim); + bool get_particles_animation() const; + + void set_particles_anim_h_frames(int p_frames); + int get_particles_anim_h_frames() const; + void set_particles_anim_v_frames(int p_frames); + int get_particles_anim_v_frames() const; + + void set_particles_anim_loop(bool p_frames); + bool get_particles_anim_loop() const; + static void init_shaders(); static void finish_shaders(); static void flush_changes(); @@ -326,6 +352,7 @@ public: Rect2 get_viewport_rect() const; RID get_viewport_rid() const; RID get_canvas() const; + ObjectID get_canvas_layer_instance_id() const; Ref<World2D> get_world_2d() const; virtual void set_material(const Ref<Material> &p_material); diff --git a/scene/2d/collision_object_2d.cpp b/scene/2d/collision_object_2d.cpp index 7ade74e8a6..738f7ddf59 100644 --- a/scene/2d/collision_object_2d.cpp +++ b/scene/2d/collision_object_2d.cpp @@ -58,6 +58,14 @@ void CollisionObject2D::_notification(int p_what) { //get space } + case NOTIFICATION_ENTER_CANVAS: { + + if (area) + Physics2DServer::get_singleton()->area_attach_canvas_instance_id(rid, get_canvas_layer_instance_id()); + else + Physics2DServer::get_singleton()->body_attach_canvas_instance_id(rid, get_canvas_layer_instance_id()); + } + case NOTIFICATION_VISIBILITY_CHANGED: { _update_pickable(); @@ -86,6 +94,14 @@ void CollisionObject2D::_notification(int p_what) { Physics2DServer::get_singleton()->body_set_space(rid, RID()); } break; + + case NOTIFICATION_EXIT_CANVAS: { + + if (area) + Physics2DServer::get_singleton()->area_attach_canvas_instance_id(rid, 0); + else + Physics2DServer::get_singleton()->body_attach_canvas_instance_id(rid, 0); + } } } diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index 508ceeaaf9..07bbbd9321 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -247,7 +247,7 @@ Vector<Point2> CollisionPolygon2D::get_polygon() const { void CollisionPolygon2D::set_build_mode(BuildMode p_mode) { - ERR_FAIL_INDEX(p_mode, 2); + ERR_FAIL_INDEX((int)p_mode, 2); build_mode = p_mode; if (parent) { _build_polygon(); @@ -325,8 +325,8 @@ void CollisionPolygon2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "build_mode", PROPERTY_HINT_ENUM, "Solids,Segments"), "set_build_mode", "get_build_mode"); ADD_PROPERTY(PropertyInfo(Variant::POOL_VECTOR2_ARRAY, "polygon"), "set_polygon", "get_polygon"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "one_way_collision"), "set_one_way_collision", "is_one_way_collision_enabled"); + 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"); BIND_ENUM_CONSTANT(BUILD_SOLIDS); BIND_ENUM_CONSTANT(BUILD_SEGMENTS); diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp index cb9c8ecf95..d3e25d541a 100644 --- a/scene/2d/collision_shape_2d.cpp +++ b/scene/2d/collision_shape_2d.cpp @@ -229,9 +229,9 @@ void CollisionShape2D::_bind_methods() { ClassDB::bind_method(D_METHOD("is_one_way_collision_enabled"), &CollisionShape2D::is_one_way_collision_enabled); ClassDB::bind_method(D_METHOD("_shape_changed"), &CollisionShape2D::_shape_changed); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "one_way_collision"), "set_one_way_collision", "is_one_way_collision_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape"); + 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"); } CollisionShape2D::CollisionShape2D() { diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp index d29c6b37d5..93ad99272c 100644 --- a/scene/2d/cpu_particles_2d.cpp +++ b/scene/2d/cpu_particles_2d.cpp @@ -29,8 +29,9 @@ /*************************************************************************/ #include "cpu_particles_2d.h" - -//#include "scene/resources/particles_material.h" +#include "particles_2d.h" +#include "scene/2d/canvas_item.h" +#include "scene/resources/particles_material.h" #include "servers/visual_server.h" void CPUParticles2D::set_emitting(bool p_emitting) { @@ -237,6 +238,17 @@ String CPUParticles2D::get_configuration_warning() const { String warnings; + CanvasItemMaterial *mat = Object::cast_to<CanvasItemMaterial>(get_material().ptr()); + + if (get_material().is_null() || (mat && !mat->get_particles_animation())) { + if (get_param(PARAM_ANIM_SPEED) != 0.0 || get_param(PARAM_ANIM_OFFSET) != 0.0 || + get_param_curve(PARAM_ANIM_SPEED).is_valid() || get_param_curve(PARAM_ANIM_OFFSET).is_valid()) { + if (warnings != String()) + warnings += "\n"; + warnings += "- " + TTR("CPUParticles2D animation requires the usage of a CanvasItemMaterial with \"Particles Animation\" enabled."); + } + } + return warnings; } @@ -396,6 +408,7 @@ bool CPUParticles2D::get_particle_flag(Flags p_flag) const { void CPUParticles2D::set_emission_shape(EmissionShape p_shape) { emission_shape = p_shape; + _change_notify(); } void CPUParticles2D::set_emission_sphere_radius(float p_radius) { @@ -479,6 +492,15 @@ void CPUParticles2D::_validate_property(PropertyInfo &property) const { if (property.name == "emission_normals" && emission_shape != EMISSION_SHAPE_DIRECTED_POINTS) { property.usage = 0; } + + if (property.name == "emission_points" && emission_shape != EMISSION_SHAPE_POINTS && emission_shape != EMISSION_SHAPE_DIRECTED_POINTS) { + property.usage = 0; + } + + if (property.name == "emission_colors" && emission_shape != EMISSION_SHAPE_POINTS && emission_shape != EMISSION_SHAPE_DIRECTED_POINTS) { + property.usage = 0; + } + /* if (property.name.begins_with("orbit_") && !flags[FLAG_DISABLE_Z]) { property.usage = 0; @@ -531,7 +553,7 @@ void CPUParticles2D::_particles_process(float p_delta) { if (!local_coords) { emission_xform = get_global_transform(); velocity_xform = emission_xform; - emission_xform[2] = Vector2(); + velocity_xform[2] = Vector2(); } for (int i = 0; i < pcount; i++) { @@ -618,9 +640,12 @@ void CPUParticles2D::_particles_process(float p_delta) { p.velocity = rot * parameters[PARAM_INITIAL_LINEAR_VELOCITY] * Math::lerp(1.0f, float(Math::randf()), randomness[PARAM_INITIAL_LINEAR_VELOCITY]); float base_angle = (parameters[PARAM_ANGLE] + tex_angle) * Math::lerp(1.0f, p.angle_rand, randomness[PARAM_ANGLE]); - p.custom[0] = Math::deg2rad(base_angle); //angle - p.custom[1] = 0.0; //phase - p.custom[2] = (parameters[PARAM_ANIM_OFFSET] + tex_anim_offset) * Math::lerp(1.0f, p.anim_offset_rand, randomness[PARAM_ANIM_OFFSET]); //animation offset (0-1) + p.rotation = Math::deg2rad(base_angle); + + p.custom[0] = 0.0; // unused + p.custom[1] = 0.0; // phase [0..1] + p.custom[2] = (parameters[PARAM_ANIM_OFFSET] + tex_anim_offset) * Math::lerp(1.0f, p.anim_offset_rand, randomness[PARAM_ANIM_OFFSET]); //animation phase [0..1] + p.custom[3] = 0.0; p.transform = Transform2D(); p.time = 0; p.base_color = Color(1, 1, 1, 1); @@ -767,14 +792,9 @@ void CPUParticles2D::_particles_process(float p_delta) { } float base_angle = (parameters[PARAM_ANGLE] + tex_angle) * Math::lerp(1.0f, p.angle_rand, randomness[PARAM_ANGLE]); base_angle += p.custom[1] * lifetime * (parameters[PARAM_ANGULAR_VELOCITY] + tex_angular_velocity) * Math::lerp(1.0f, rand_from_seed(alt_seed) * 2.0f - 1.0f, randomness[PARAM_ANGULAR_VELOCITY]); - p.custom[0] = Math::deg2rad(base_angle); //angle - p.custom[2] = (parameters[PARAM_ANIM_OFFSET] + tex_anim_offset) * Math::lerp(1.0f, p.anim_offset_rand, randomness[PARAM_ANIM_OFFSET]) + p.custom[1] * (parameters[PARAM_ANIM_SPEED] + tex_anim_speed) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_ANIM_SPEED]); //angle - if (flags[FLAG_ANIM_LOOP]) { - p.custom[2] = Math::fmod(p.custom[2], 1.0f); //loop - - } else { - p.custom[2] = CLAMP(p.custom[2], 0.0f, 1.0); //0 to 1 only - } + p.rotation = Math::deg2rad(base_angle); //angle + float animation_phase = (parameters[PARAM_ANIM_OFFSET] + tex_anim_offset) * Math::lerp(1.0f, p.anim_offset_rand, randomness[PARAM_ANIM_OFFSET]) + p.custom[1] * (parameters[PARAM_ANIM_SPEED] + tex_anim_speed) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_ANIM_SPEED]); + p.custom[2] = animation_phase; } //apply color //apply hue rotation @@ -825,8 +845,8 @@ void CPUParticles2D::_particles_process(float p_delta) { } } else { - p.transform.elements[0] = Vector2(Math::cos(p.custom[0]), -Math::sin(p.custom[0])); - p.transform.elements[1] = Vector2(Math::sin(p.custom[0]), Math::cos(p.custom[0])); + p.transform.elements[0] = Vector2(Math::cos(p.rotation), -Math::sin(p.rotation)); + p.transform.elements[1] = Vector2(Math::sin(p.rotation), Math::cos(p.rotation)); } //scale by scale @@ -985,7 +1005,7 @@ void CPUParticles2D::_notification(int p_what) { if (p_what == NOTIFICATION_INTERNAL_PROCESS) { - if (particles.size() == 0) + if (particles.size() == 0 || !is_visible_in_tree()) return; float delta = get_process_delta_time(); @@ -1058,8 +1078,7 @@ void CPUParticles2D::_notification(int p_what) { } void CPUParticles2D::convert_from_particles(Node *p_particles) { -#if 0 - Particles *particles = Object::cast_to<Particles>(p_particles); + Particles2D *particles = Object::cast_to<Particles2D>(p_particles); ERR_FAIL_COND(!particles); set_emitting(particles->is_emitting()); @@ -1074,7 +1093,12 @@ void CPUParticles2D::convert_from_particles(Node *p_particles) { set_fractional_delta(particles->get_fractional_delta()); set_speed_scale(particles->get_speed_scale()); set_draw_order(DrawOrder(particles->get_draw_order())); - set_mesh(particles->get_draw_pass_mesh(0)); + set_texture(particles->get_texture()); + + Ref<Material> mat = particles->get_material(); + if (mat.is_valid()) { + set_material(mat); + } Ref<ParticlesMaterial> material = particles->get_process_material(); if (material.is_null()) @@ -1091,15 +1115,14 @@ void CPUParticles2D::convert_from_particles(Node *p_particles) { } set_particle_flag(FLAG_ALIGN_Y_TO_VELOCITY, material->get_flag(ParticlesMaterial::FLAG_ALIGN_Y_TO_VELOCITY)); - set_particle_flag(FLAG_ROTATE_Y, material->get_flag(ParticlesMaterial::FLAG_ROTATE_Y)); - set_particle_flag(FLAG_DISABLE_Z, material->get_flag(ParticlesMaterial::FLAG_DISABLE_Z)); - set_particle_flag(FLAG_ANIM_LOOP, material->get_flag(ParticlesMaterial::FLAG_ANIM_LOOP)); set_emission_shape(EmissionShape(material->get_emission_shape())); set_emission_sphere_radius(material->get_emission_sphere_radius()); - set_emission_rect_extents(material->get_emission_rect_extents()); + Vector2 rect_extents = Vector2(material->get_emission_box_extents().x, material->get_emission_box_extents().y); + set_emission_rect_extents(rect_extents); - set_gravity(material->get_gravity()); + Vector2 gravity = Vector2(material->get_gravity().x, material->get_gravity().y); + set_gravity(gravity); #define CONVERT_PARAM(m_param) \ set_param(m_param, material->get_param(ParticlesMaterial::m_param)); \ @@ -1123,7 +1146,6 @@ void CPUParticles2D::convert_from_particles(Node *p_particles) { CONVERT_PARAM(PARAM_ANIM_OFFSET); #undef CONVERT_PARAM -#endif } void CPUParticles2D::_bind_methods() { @@ -1253,7 +1275,7 @@ void CPUParticles2D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "initial_velocity", PROPERTY_HINT_RANGE, "0,1000,0.01,or_greater"), "set_param", "get_param", PARAM_INITIAL_LINEAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "initial_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_INITIAL_LINEAR_VELOCITY); ADD_GROUP("Angular Velocity", "angular_"); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-360,360,0.01"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-720,720,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGULAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angular_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANGULAR_VELOCITY); /* @@ -1283,15 +1305,15 @@ void CPUParticles2D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angle_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGLE); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angle_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANGLE); ADD_GROUP("Scale", ""); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale", PROPERTY_HINT_RANGE, "0,1000,0.01,or_greater"), "set_param", "get_param", PARAM_SCALE); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_SCALE); - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "scale_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_SCALE); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale_amount", PROPERTY_HINT_RANGE, "0,1000,0.01,or_greater"), "set_param", "get_param", PARAM_SCALE); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale_amount_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_SCALE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "scale_amount_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_SCALE); ADD_GROUP("Color", ""); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color"); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "GradientTexture"), "set_color_ramp", "get_color_ramp"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "Gradient"), "set_color_ramp", "get_color_ramp"); ADD_GROUP("Hue Variation", "hue_"); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation", PROPERTY_HINT_RANGE, "-1,1,0.1"), "set_param", "get_param", PARAM_HUE_VARIATION); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_param", "get_param", PARAM_HUE_VARIATION); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_HUE_VARIATION); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "hue_variation_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_HUE_VARIATION); ADD_GROUP("Animation", "anim_"); @@ -1301,7 +1323,6 @@ void CPUParticles2D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anim_offset", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param", "get_param", PARAM_ANIM_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anim_offset_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANIM_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "anim_offset_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANIM_OFFSET); - ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "anim_loop"), "set_particle_flag", "get_particle_flag", FLAG_ANIM_LOOP); BIND_ENUM_CONSTANT(PARAM_INITIAL_LINEAR_VELOCITY); BIND_ENUM_CONSTANT(PARAM_ANGULAR_VELOCITY); diff --git a/scene/2d/cpu_particles_2d.h b/scene/2d/cpu_particles_2d.h index 4f51eb1062..d967c3be26 100644 --- a/scene/2d/cpu_particles_2d.h +++ b/scene/2d/cpu_particles_2d.h @@ -68,7 +68,6 @@ public: enum Flags { FLAG_ALIGN_Y_TO_VELOCITY, - FLAG_ANIM_LOOP, FLAG_MAX }; @@ -87,6 +86,7 @@ private: Transform2D transform; Color color; float custom[4]; + float rotation; Vector2 velocity; bool active; float angle_rand; @@ -168,7 +168,6 @@ private: PoolVector<Color> emission_colors; int emission_point_count; - bool anim_loop; Vector2 gravity; void _particles_process(float p_delta); diff --git a/scene/2d/line_2d.cpp b/scene/2d/line_2d.cpp index e164f0ca75..6faf8c2855 100644 --- a/scene/2d/line_2d.cpp +++ b/scene/2d/line_2d.cpp @@ -347,13 +347,13 @@ void Line2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "width"), "set_width", "get_width"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "default_color"), "set_default_color", "get_default_color"); ADD_GROUP("Fill", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "gradient", PROPERTY_HINT_RESOURCE_TYPE, "Gradient"), "set_gradient", "get_gradient"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "texture_mode", PROPERTY_HINT_ENUM, "None,Tile,Stretch"), "set_texture_mode", "get_texture_mode"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gradient", PROPERTY_HINT_RESOURCE_TYPE, "Gradient"), "set_gradient", "get_gradient"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_mode", PROPERTY_HINT_ENUM, "None,Tile,Stretch"), "set_texture_mode", "get_texture_mode"); ADD_GROUP("Capping", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "joint_mode", PROPERTY_HINT_ENUM, "Sharp,Bevel,Round"), "set_joint_mode", "get_joint_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "begin_cap_mode", PROPERTY_HINT_ENUM, "None,Box,Round"), "set_begin_cap_mode", "get_begin_cap_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "end_cap_mode", PROPERTY_HINT_ENUM, "None,Box,Round"), "set_end_cap_mode", "get_end_cap_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "joint_mode", PROPERTY_HINT_ENUM, "Sharp,Bevel,Round"), "set_joint_mode", "get_joint_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "begin_cap_mode", PROPERTY_HINT_ENUM, "None,Box,Round"), "set_begin_cap_mode", "get_begin_cap_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "end_cap_mode", PROPERTY_HINT_ENUM, "None,Box,Round"), "set_end_cap_mode", "get_end_cap_mode"); ADD_GROUP("Border", ""); ADD_PROPERTY(PropertyInfo(Variant::REAL, "sharp_limit"), "set_sharp_limit", "get_sharp_limit"); ADD_PROPERTY(PropertyInfo(Variant::INT, "round_precision"), "set_round_precision", "get_round_precision"); diff --git a/scene/2d/line_builder.cpp b/scene/2d/line_builder.cpp index a3f1b25e05..d5e8a33805 100644 --- a/scene/2d/line_builder.cpp +++ b/scene/2d/line_builder.cpp @@ -294,7 +294,6 @@ void LineBuilder::build() { if (texture_mode == Line2D::LINE_TEXTURE_TILE) { uvx1 = current_distance1 / (width * tile_aspect); } else if (texture_mode == Line2D::LINE_TEXTURE_STRETCH) { - uvx0 = current_distance0 / total_distance; uvx1 = current_distance1 / total_distance; } diff --git a/scene/2d/mesh_instance_2d.cpp b/scene/2d/mesh_instance_2d.cpp index 9f21fe1a1f..46777665d8 100644 --- a/scene/2d/mesh_instance_2d.cpp +++ b/scene/2d/mesh_instance_2d.cpp @@ -51,8 +51,8 @@ void MeshInstance2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_normal_map"), &MeshInstance2D::get_normal_map); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh"), "set_mesh", "get_mesh"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map"); } void MeshInstance2D::set_mesh(const Ref<Mesh> &p_mesh) { diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp index b36924e521..9154929e0b 100644 --- a/scene/2d/navigation_polygon.cpp +++ b/scene/2d/navigation_polygon.cpp @@ -349,8 +349,6 @@ void NavigationPolygonInstance::set_enabled(bool p_enabled) { if (Engine::get_singleton()->is_editor_hint() || get_tree()->is_debugging_navigation_hint()) update(); - - //update_gizmo(); } bool NavigationPolygonInstance::is_enabled() const { @@ -461,26 +459,28 @@ void NavigationPolygonInstance::_notification(int p_what) { void NavigationPolygonInstance::set_navigation_polygon(const Ref<NavigationPolygon> &p_navpoly) { - if (p_navpoly == navpoly) + if (p_navpoly == navpoly) { return; + } if (navigation && nav_id != -1) { navigation->navpoly_remove(nav_id); nav_id = -1; } + if (navpoly.is_valid()) { navpoly->disconnect(CoreStringNames::get_singleton()->changed, this, "_navpoly_changed"); } navpoly = p_navpoly; - if (navpoly.is_valid()) { navpoly->connect(CoreStringNames::get_singleton()->changed, this, "_navpoly_changed"); } + _navpoly_changed(); if (navigation && navpoly.is_valid() && enabled) { nav_id = navigation->navpoly_add(navpoly, get_relative_transform_to_parent(navigation), this); } - //update_gizmo(); + _change_notify("navpoly"); update_configuration_warning(); } diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 29065a89b3..2d9bbfe657 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -204,12 +204,6 @@ Size2 Node2D::get_scale() const { return _scale; } -void Node2D::_notification(int p_what) { - - switch (p_what) { - } -} - Transform2D Node2D::get_transform() const { return _mat; @@ -441,10 +435,10 @@ void Node2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_relative_transform_to_parent", "parent"), &Node2D::get_relative_transform_to_parent); ADD_GROUP("Transform", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_rotation", "get_rotation"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "rotation_degrees", PROPERTY_HINT_RANGE, "-1080,1080,0.1,or_lesser,or_greater", PROPERTY_USAGE_EDITOR), "set_rotation_degrees", "get_rotation_degrees"); - ADD_PROPERTYNO(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_rotation", "get_rotation"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "rotation_degrees", PROPERTY_HINT_RANGE, "-1080,1080,0.1,or_lesser,or_greater", PROPERTY_USAGE_EDITOR), "set_rotation_degrees", "get_rotation_degrees"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "", 0), "set_transform", "get_transform"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "", 0), "set_global_position", "get_global_position"); @@ -454,8 +448,8 @@ void Node2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "global_transform", PROPERTY_HINT_NONE, "", 0), "set_global_transform", "get_global_transform"); ADD_GROUP("Z Index", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "z_index", PROPERTY_HINT_RANGE, itos(VS::CANVAS_ITEM_Z_MIN) + "," + itos(VS::CANVAS_ITEM_Z_MAX) + ",1"), "set_z_index", "get_z_index"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "z_as_relative"), "set_z_as_relative", "is_z_relative"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "z_index", PROPERTY_HINT_RANGE, itos(VS::CANVAS_ITEM_Z_MIN) + "," + itos(VS::CANVAS_ITEM_Z_MAX) + ",1"), "set_z_index", "get_z_index"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "z_as_relative"), "set_z_as_relative", "is_z_relative"); } Node2D::Node2D() { diff --git a/scene/2d/node_2d.h b/scene/2d/node_2d.h index 725686cdf8..924a84fb88 100644 --- a/scene/2d/node_2d.h +++ b/scene/2d/node_2d.h @@ -52,8 +52,6 @@ class Node2D : public CanvasItem { void _update_xform_values(); protected: - void _notification(int p_what); - static void _bind_methods(); public: diff --git a/scene/2d/parallax_background.cpp b/scene/2d/parallax_background.cpp index 027d64b813..59cb16fe91 100644 --- a/scene/2d/parallax_background.cpp +++ b/scene/2d/parallax_background.cpp @@ -206,7 +206,9 @@ void ParallaxBackground::_bind_methods() { ParallaxBackground::ParallaxBackground() { - base_scale = Vector2(1, 1); scale = 1.0; set_layer(-1); //behind all by default + + base_scale = Vector2(1, 1); + ignore_camera_zoom = false; } diff --git a/scene/2d/particles_2d.cpp b/scene/2d/particles_2d.cpp index 7e824cdf75..35b7e7da3e 100644 --- a/scene/2d/particles_2d.cpp +++ b/scene/2d/particles_2d.cpp @@ -219,6 +219,20 @@ String Particles2D::get_configuration_warning() const { if (warnings != String()) warnings += "\n"; warnings += "- " + TTR("A material to process the particles is not assigned, so no behavior is imprinted."); + } else { + + CanvasItemMaterial *mat = Object::cast_to<CanvasItemMaterial>(get_material().ptr()); + + if (get_material().is_null() || (mat && !mat->get_particles_animation())) { + const ParticlesMaterial *process = Object::cast_to<ParticlesMaterial>(process_material.ptr()); + if (process && + (process->get_param(ParticlesMaterial::PARAM_ANIM_SPEED) != 0.0 || process->get_param(ParticlesMaterial::PARAM_ANIM_OFFSET) != 0.0 || + process->get_param_texture(ParticlesMaterial::PARAM_ANIM_SPEED).is_valid() || process->get_param_texture(ParticlesMaterial::PARAM_ANIM_OFFSET).is_valid())) { + if (warnings != String()) + warnings += "\n"; + warnings += "- " + TTR("Particles2D animation requires the usage of a CanvasItemMaterial with \"Particles Animation\" enabled."); + } + } } return warnings; @@ -257,30 +271,6 @@ Ref<Texture> Particles2D::get_normal_map() const { void Particles2D::_validate_property(PropertyInfo &property) const { } -void Particles2D::set_v_frames(int p_count) { - - ERR_FAIL_COND(p_count < 1); - v_frames = p_count; - update(); -} - -int Particles2D::get_v_frames() const { - - return v_frames; -} - -void Particles2D::set_h_frames(int p_count) { - - ERR_FAIL_COND(p_count < 1); - h_frames = p_count; - update(); -} - -int Particles2D::get_h_frames() const { - - return h_frames; -} - void Particles2D::restart() { VS::get_singleton()->particles_restart(particles); } @@ -296,7 +286,7 @@ void Particles2D::_notification(int p_what) { if (normal_map.is_valid()) normal_rid = normal_map->get_rid(); - VS::get_singleton()->canvas_item_add_particles(get_canvas_item(), particles, texture_rid, normal_rid, h_frames, v_frames); + VS::get_singleton()->canvas_item_add_particles(get_canvas_item(), particles, texture_rid, normal_rid); #ifdef TOOLS_ENABLED if (Engine::get_singleton()->is_editor_hint() && (this == get_tree()->get_edited_scene_root() || get_tree()->get_edited_scene_root()->is_a_parent_of(this))) { @@ -361,12 +351,6 @@ void Particles2D::_bind_methods() { ClassDB::bind_method(D_METHOD("capture_rect"), &Particles2D::capture_rect); - ClassDB::bind_method(D_METHOD("set_v_frames", "frames"), &Particles2D::set_v_frames); - ClassDB::bind_method(D_METHOD("get_v_frames"), &Particles2D::get_v_frames); - - ClassDB::bind_method(D_METHOD("set_h_frames", "frames"), &Particles2D::set_h_frames); - ClassDB::bind_method(D_METHOD("get_h_frames"), &Particles2D::get_h_frames); - ClassDB::bind_method(D_METHOD("restart"), &Particles2D::restart); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "emitting"), "set_emitting", "is_emitting"); @@ -389,8 +373,6 @@ void Particles2D::_bind_methods() { ADD_GROUP("Textures", ""); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "h_frames", PROPERTY_HINT_RANGE, "1,1024,1"), "set_h_frames", "get_h_frames"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "v_frames", PROPERTY_HINT_RANGE, "1,1024,1"), "set_v_frames", "get_v_frames"); BIND_ENUM_CONSTANT(DRAW_ORDER_INDEX); BIND_ENUM_CONSTANT(DRAW_ORDER_LIFETIME); @@ -413,8 +395,6 @@ Particles2D::Particles2D() { set_use_local_coordinates(true); set_draw_order(DRAW_ORDER_INDEX); set_speed_scale(1); - h_frames = 1; - v_frames = 1; } Particles2D::~Particles2D() { diff --git a/scene/2d/particles_2d.h b/scene/2d/particles_2d.h index af673841b1..6d52f8b28e 100644 --- a/scene/2d/particles_2d.h +++ b/scene/2d/particles_2d.h @@ -59,8 +59,6 @@ private: bool local_coords; int fixed_fps; bool fractional_delta; - int v_frames; - int h_frames; Ref<Material> process_material; @@ -118,12 +116,6 @@ public: virtual String get_configuration_warning() const; - void set_v_frames(int p_count); - int get_v_frames() const; - - void set_h_frames(int p_count); - int get_h_frames() const; - void restart(); Rect2 capture_rect() const; Particles2D(); diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp index cdb208e6cd..5eae43b2d5 100644 --- a/scene/2d/path_2d.cpp +++ b/scene/2d/path_2d.cpp @@ -63,6 +63,10 @@ bool Path2D::_edit_use_rect() const { bool Path2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { + if (curve.is_null()) { + return false; + } + for (int i = 0; i < curve->get_point_count(); i++) { Vector2 s[2]; s[0] = curve->get_point_position(i); @@ -299,7 +303,7 @@ void PathFollow2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_lookahead", "lookahead"), &PathFollow2D::set_lookahead); ClassDB::bind_method(D_METHOD("get_lookahead"), &PathFollow2D::get_lookahead); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_EXP_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "h_offset"), "set_h_offset", "get_h_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_offset"), "set_v_offset", "get_v_offset"); diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index d0bebd3354..3dde228bfa 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -32,8 +32,11 @@ #include "core/core_string_names.h" #include "core/engine.h" +#include "core/list.h" #include "core/math/math_funcs.h" #include "core/method_bind_ext.gen.inc" +#include "core/object.h" +#include "core/rid.h" #include "scene/scene_string_names.h" void PhysicsBody2D::_notification(int p_what) { @@ -65,6 +68,8 @@ void PhysicsBody2D::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_layers", "mask"), &PhysicsBody2D::_set_layers); ClassDB::bind_method(D_METHOD("_get_layers"), &PhysicsBody2D::_get_layers); + + ClassDB::bind_method(D_METHOD("get_collision_exceptions"), &PhysicsBody2D::get_collision_exceptions); ClassDB::bind_method(D_METHOD("add_collision_exception_with", "body"), &PhysicsBody2D::add_collision_exception_with); ClassDB::bind_method(D_METHOD("remove_collision_exception_with", "body"), &PhysicsBody2D::remove_collision_exception_with); ADD_PROPERTY(PropertyInfo(Variant::INT, "layers", PROPERTY_HINT_LAYERS_2D_PHYSICS, "", 0), "_set_layers", "_get_layers"); //for backwards compat @@ -134,6 +139,20 @@ PhysicsBody2D::PhysicsBody2D(Physics2DServer::BodyMode p_mode) : set_pickable(false); } +Array PhysicsBody2D::get_collision_exceptions() { + List<RID> exceptions; + Physics2DServer::get_singleton()->body_get_collision_exceptions(get_rid(), &exceptions); + Array ret; + for (List<RID>::Element *E = exceptions.front(); E; E = E->next()) { + RID body = E->get(); + ObjectID instance_id = Physics2DServer::get_singleton()->body_get_object_instance_id(body); + Object *obj = ObjectDB::get_instance(instance_id); + PhysicsBody2D *physics_body = Object::cast_to<PhysicsBody2D>(obj); + ret.append(physics_body); + } + return ret; +} + void PhysicsBody2D::add_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); @@ -280,10 +299,10 @@ void StaticBody2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "constant_linear_velocity"), "set_constant_linear_velocity", "get_constant_linear_velocity"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "constant_angular_velocity"), "set_constant_angular_velocity", "get_constant_angular_velocity"); #ifndef DISABLE_DEPRECATED - ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); #endif // DISABLE_DEPRECATED - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "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"); } StaticBody2D::StaticBody2D() : @@ -1042,10 +1061,10 @@ void RigidBody2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "inertia", PROPERTY_HINT_EXP_RANGE, "0.01,65535,0.01", 0), "set_inertia", "get_inertia"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "weight", PROPERTY_HINT_EXP_RANGE, "0.01,65535,0.01", PROPERTY_USAGE_EDITOR), "set_weight", "get_weight"); #ifndef DISABLE_DEPRECATED - ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); #endif // DISABLE_DEPRECATED - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "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::REAL, "gravity_scale", PROPERTY_HINT_RANGE, "-128,128,0.01"), "set_gravity_scale", "get_gravity_scale"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "custom_integrator"), "set_use_custom_integrator", "is_using_custom_integrator"); ADD_PROPERTY(PropertyInfo(Variant::INT, "continuous_cd", PROPERTY_HINT_ENUM, "Disabled,Cast Ray,Cast Shape"), "set_continuous_collision_detection_mode", "get_continuous_collision_detection_mode"); @@ -1060,8 +1079,8 @@ void RigidBody2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "angular_velocity"), "set_angular_velocity", "get_angular_velocity"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "angular_damp", PROPERTY_HINT_RANGE, "-1,128,0.01"), "set_angular_damp", "get_angular_damp"); ADD_GROUP("Applied Forces", "applied_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "applied_force"), "set_applied_force", "get_applied_force"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "applied_torque"), "set_applied_torque", "get_applied_torque"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "applied_force"), "set_applied_force", "get_applied_force"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "applied_torque"), "set_applied_torque", "get_applied_torque"); ADD_SIGNAL(MethodInfo("body_shape_entered", PropertyInfo(Variant::INT, "body_id"), PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node"), PropertyInfo(Variant::INT, "body_shape"), PropertyInfo(Variant::INT, "local_shape"))); ADD_SIGNAL(MethodInfo("body_shape_exited", PropertyInfo(Variant::INT, "body_id"), PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "Node"), PropertyInfo(Variant::INT, "body_shape"), PropertyInfo(Variant::INT, "local_shape"))); @@ -1207,7 +1226,7 @@ bool KinematicBody2D::move_and_collide(const Vector2 &p_motion, bool p_infinite_ //so, if you pass 45 as limit, avoid numerical precision erros when angle is 45. #define FLOOR_ANGLE_THRESHOLD 0.01 -Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const Vector2 &p_floor_direction, bool p_infinite_inertia, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle) { +Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const Vector2 &p_floor_direction, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle, bool p_infinite_inertia) { Vector2 floor_motion = floor_velocity; if (on_floor && on_floor_body.is_valid()) { @@ -1218,7 +1237,8 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const } } - Vector2 motion = (floor_motion + p_linear_velocity) * get_physics_process_delta_time(); + // Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky + Vector2 motion = (floor_motion + p_linear_velocity) * (Engine::get_singleton()->is_in_physics_frame() ? get_physics_process_delta_time() : get_process_delta_time()); Vector2 lv = p_linear_velocity; on_floor = false; @@ -1313,11 +1333,11 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const return lv; } -Vector2 KinematicBody2D::move_and_slide_with_snap(const Vector2 &p_linear_velocity, const Vector2 &p_snap, const Vector2 &p_floor_direction, bool p_infinite_inertia, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle) { +Vector2 KinematicBody2D::move_and_slide_with_snap(const Vector2 &p_linear_velocity, const Vector2 &p_snap, const Vector2 &p_floor_direction, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle, bool p_infinite_inertia) { bool was_on_floor = on_floor; - Vector2 ret = move_and_slide(p_linear_velocity, p_floor_direction, p_infinite_inertia, p_stop_on_slope, p_max_slides, p_floor_max_angle); + Vector2 ret = move_and_slide(p_linear_velocity, p_floor_direction, p_stop_on_slope, p_max_slides, p_floor_max_angle, p_infinite_inertia); if (!was_on_floor || p_snap == Vector2()) { return ret; } @@ -1405,6 +1425,10 @@ void KinematicBody2D::set_sync_to_physics(bool p_enable) { return; } sync_to_physics = p_enable; + + if (Engine::get_singleton()->is_editor_hint()) + return; + if (p_enable) { Physics2DServer::get_singleton()->body_set_force_integration_callback(get_rid(), this, "_direct_state_changed"); set_only_update_transform_changes(true); @@ -1451,10 +1475,10 @@ void KinematicBody2D::_notification(int p_what) { void KinematicBody2D::_bind_methods() { ClassDB::bind_method(D_METHOD("move_and_collide", "rel_vec", "infinite_inertia", "exclude_raycast_shapes", "test_only"), &KinematicBody2D::_move, DEFVAL(true), DEFVAL(true), DEFVAL(false)); - ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "infinite_inertia", "stop_on_slope", "max_bounces", "floor_max_angle"), &KinematicBody2D::move_and_slide, DEFVAL(Vector2(0, 0)), DEFVAL(true), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45))); - ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "floor_normal", "infinite_inertia", "stop_on_slope", "max_bounces", "floor_max_angle"), &KinematicBody2D::move_and_slide_with_snap, DEFVAL(Vector2(0, 0)), DEFVAL(true), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45))); + ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody2D::move_and_slide, DEFVAL(Vector2(0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true)); + ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody2D::move_and_slide_with_snap, DEFVAL(Vector2(0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true)); - ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec", "infinite_inertia"), &KinematicBody2D::test_move); + ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec", "infinite_inertia"), &KinematicBody2D::test_move, DEFVAL(true)); ClassDB::bind_method(D_METHOD("is_on_floor"), &KinematicBody2D::is_on_floor); ClassDB::bind_method(D_METHOD("is_on_ceiling"), &KinematicBody2D::is_on_ceiling); diff --git a/scene/2d/physics_body_2d.h b/scene/2d/physics_body_2d.h index 29befb0375..c7b42add84 100644 --- a/scene/2d/physics_body_2d.h +++ b/scene/2d/physics_body_2d.h @@ -67,6 +67,7 @@ public: void set_collision_layer_bit(int p_bit, bool p_value); bool get_collision_layer_bit(int p_bit) const; + Array get_collision_exceptions(); void add_collision_exception_with(Node *p_node); //must be physicsbody void remove_collision_exception_with(Node *p_node); @@ -331,15 +332,15 @@ protected: public: bool move_and_collide(const Vector2 &p_motion, bool p_infinite_inertia, Collision &r_collision, bool p_exclude_raycast_shapes = true, bool p_test_only = false); - bool test_move(const Transform2D &p_from, const Vector2 &p_motion, bool p_infinite_inertia); + bool test_move(const Transform2D &p_from, const Vector2 &p_motion, bool p_infinite_inertia = true); bool separate_raycast_shapes(bool p_infinite_inertia, Collision &r_collision); void set_safe_margin(float p_margin); float get_safe_margin() const; - Vector2 move_and_slide(const Vector2 &p_linear_velocity, const Vector2 &p_floor_direction = Vector2(0, 0), bool p_infinite_inertia = true, bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45)); - Vector2 move_and_slide_with_snap(const Vector2 &p_linear_velocity, const Vector2 &p_snap, const Vector2 &p_floor_direction = Vector2(0, 0), bool p_infinite_inertia = true, bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45)); + Vector2 move_and_slide(const Vector2 &p_linear_velocity, const Vector2 &p_floor_direction = Vector2(0, 0), bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45), bool p_infinite_inertia = true); + Vector2 move_and_slide_with_snap(const Vector2 &p_linear_velocity, const Vector2 &p_snap, const Vector2 &p_floor_direction = Vector2(0, 0), bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45), bool p_infinite_inertia = true); bool is_on_floor() const; bool is_on_wall() const; bool is_on_ceiling() const; diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp index fc0741cc5c..aa6d57a67d 100644 --- a/scene/2d/polygon_2d.cpp +++ b/scene/2d/polygon_2d.cpp @@ -194,7 +194,7 @@ void Polygon2D::_notification(int p_what) { } } - if (!invert && bone_weights.size()) { + if (skeleton_node && !invert && bone_weights.size()) { //a skeleton is set! fill indices and weights int vc = points.size(); bones.resize(vc * 4); diff --git a/scene/2d/skeleton_2d.cpp b/scene/2d/skeleton_2d.cpp index 2c362f1b31..1c504d00fc 100644 --- a/scene/2d/skeleton_2d.cpp +++ b/scene/2d/skeleton_2d.cpp @@ -298,6 +298,7 @@ Skeleton2D::Skeleton2D() { transform_dirty = true; skeleton = VS::get_singleton()->skeleton_create(); + set_notify_transform(true); } Skeleton2D::~Skeleton2D() { diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index 04e199a21b..f4e6e2bdbb 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -435,22 +435,22 @@ void Sprite::_bind_methods() { ADD_SIGNAL(MethodInfo("frame_changed")); ADD_SIGNAL(MethodInfo("texture_changed")); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map"); ADD_GROUP("Offset", ""); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "flip_h"), "set_flip_h", "is_flipped_h"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "flip_v"), "set_flip_v", "is_flipped_v"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "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_GROUP("Animation", ""); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "vframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_vframes", "get_vframes"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "hframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_hframes", "get_hframes"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "frame", PROPERTY_HINT_SPRITE_FRAME), "set_frame", "get_frame"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "vframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_vframes", "get_vframes"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "hframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_hframes", "get_hframes"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "frame", PROPERTY_HINT_SPRITE_FRAME), "set_frame", "get_frame"); ADD_GROUP("Region", "region_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "region_enabled"), "set_region", "is_region"); - ADD_PROPERTYNZ(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "region_filter_clip"), "set_region_filter_clip", "is_region_filter_clip_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "region_enabled"), "set_region", "is_region"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "region_filter_clip"), "set_region_filter_clip", "is_region_filter_clip_enabled"); } Sprite::Sprite() { diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 5b8d10ea85..641cb161ca 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -304,7 +304,7 @@ void TileMap::update_dirty_quadrants() { } q.occluder_instances.clear(); Ref<ShaderMaterial> prev_material; - int prev_z_index; + int prev_z_index = 0; RID prev_canvas_item; RID prev_debug_canvas_item; @@ -327,6 +327,10 @@ void TileMap::update_dirty_quadrants() { Ref<ShaderMaterial> mat = tile_set->tile_get_material(c.id); int z_index = tile_set->tile_get_z_index(c.id); + if (tile_set->tile_get_tile_mode(c.id) == TileSet::AUTO_TILE) { + z_index += tile_set->autotile_get_z_index(c.id, Vector2(c.autotile_coord_x, c.autotile_coord_y)); + } + RID canvas_item; RID debug_canvas_item; @@ -593,7 +597,7 @@ void TileMap::update_dirty_quadrants() { if (quadrant_order_dirty) { - int index = -0x80000000; //always must be drawn below children + int index = -(int64_t)0x80000000; //always must be drawn below children for (Map<PosKey, Quadrant>::Element *E = quadrant_map.front(); E; E = E->next()) { Quadrant &q = E->get(); @@ -1114,6 +1118,8 @@ void TileMap::_set_tile_data(const PoolVector<int> &p_data) { */ set_cell(x, y, v, flip_h, flip_v, transpose, Vector2(coord_x, coord_y)); } + + format = FORMAT_2; } PoolVector<int> TileMap::_get_tile_data() const { @@ -1403,7 +1409,7 @@ bool TileMap::_set(const StringName &p_name, const Variant &p_value) { bool TileMap::_get(const StringName &p_name, Variant &r_ret) const { if (p_name == "format") { - r_ret = FORMAT_2; + r_ret = format; return true; } else if (p_name == "tile_data") { r_ret = _get_tile_data(); @@ -1445,6 +1451,11 @@ Vector2 TileMap::world_to_map(const Vector2 &p_pos) const { default: {} } + // Account for precision errors on the border (GH-23250). + // 0.00005 is 5*CMP_EPSILON, results would start being unpredictible if + // cell size is > 15,000, but we can hardly have more precision anyway with + // floating point. + ret += Vector2(0.00005, 0.00005); return ret.floor(); } diff --git a/scene/2d/visibility_notifier_2d.cpp b/scene/2d/visibility_notifier_2d.cpp index 7d7c47619a..d656ba0f64 100644 --- a/scene/2d/visibility_notifier_2d.cpp +++ b/scene/2d/visibility_notifier_2d.cpp @@ -190,7 +190,7 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) { if (enabler[ENABLER_FREEZE_BODIES]) { RigidBody2D *rb2d = Object::cast_to<RigidBody2D>(p_node); - if (rb2d && ((rb2d->get_mode() == RigidBody2D::MODE_CHARACTER || (rb2d->get_mode() == RigidBody2D::MODE_RIGID && !rb2d->is_able_to_sleep())))) { + if (rb2d && ((rb2d->get_mode() == RigidBody2D::MODE_CHARACTER || rb2d->get_mode() == RigidBody2D::MODE_RIGID))) { add = true; meta = rb2d->get_mode(); diff --git a/scene/3d/area.cpp b/scene/3d/area.cpp index 40a1029201..ac77ddb7ce 100644 --- a/scene/3d/area.cpp +++ b/scene/3d/area.cpp @@ -157,7 +157,9 @@ void Area::_body_inout(int p_status, const RID &p_body, int p_instance, int p_bo Map<ObjectID, BodyState>::Element *E = body_map.find(objid); - ERR_FAIL_COND(!body_in && !E); + if (!body_in && !E) { + return; //likely removed from the tree + } locked = true; @@ -290,7 +292,7 @@ void Area::_notification(int p_what) { void Area::set_monitoring(bool p_enable) { if (locked) { - ERR_EXPLAIN("This function can't be used during the in/out signal."); + ERR_EXPLAIN("Function blocked during in/out signal. Use set_deferred(\"monitoring\",true/false)"); } ERR_FAIL_COND(locked); @@ -437,10 +439,10 @@ Array Area::get_overlapping_bodies() const { void Area::set_monitorable(bool p_enable) { - if (locked) { - ERR_EXPLAIN("This function can't be used during the in/out signal."); + if (locked || PhysicsServer::get_singleton()->is_flushing_queries()) { + ERR_EXPLAIN("Function blocked during in/out signal. Use set_deferred(\"monitorable\",true/false)"); } - ERR_FAIL_COND(locked); + ERR_FAIL_COND(locked || PhysicsServer::get_singleton()->is_flushing_queries()); if (p_enable == monitorable) return; diff --git a/scene/3d/arvr_nodes.cpp b/scene/3d/arvr_nodes.cpp index 4bff26a200..7ea62678da 100644 --- a/scene/3d/arvr_nodes.cpp +++ b/scene/3d/arvr_nodes.cpp @@ -38,14 +38,14 @@ void ARVRCamera::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - // need to find our ARVROrigin parent and let it know we're it's camera! + // need to find our ARVROrigin parent and let it know we're its camera! ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin != NULL) { origin->set_tracked_camera(this); } }; break; case NOTIFICATION_EXIT_TREE: { - // need to find our ARVROrigin parent and let it know we're no longer it's camera! + // need to find our ARVROrigin parent and let it know we're no longer its camera! ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin != NULL) { origin->clear_tracked_camera_if(this); @@ -266,6 +266,7 @@ void ARVRController::set_controller_id(int p_controller_id) { // We don't check any bounds here, this controller may not yet be active and just be a place holder until it is. // Note that setting this to 0 means this node is not bound to a controller yet. controller_id = p_controller_id; + update_configuration_warning(); }; int ARVRController::get_controller_id(void) const { @@ -446,6 +447,7 @@ void ARVRAnchor::set_anchor_id(int p_anchor_id) { // We don't check any bounds here, this anchor may not yet be active and just be a place holder until it is. // Note that setting this to 0 means this node is not bound to an anchor yet. anchor_id = p_anchor_id; + update_configuration_warning(); }; int ARVRAnchor::get_anchor_id(void) const { diff --git a/scene/3d/arvr_nodes.h b/scene/3d/arvr_nodes.h index 67fb658562..d6690676cc 100644 --- a/scene/3d/arvr_nodes.h +++ b/scene/3d/arvr_nodes.h @@ -62,7 +62,7 @@ public: }; /* - ARVRController is a helper node that automatically updates it's position based on tracker data. + ARVRController is a helper node that automatically updates its position based on tracker data. It must be a child node of our ARVROrigin node */ @@ -102,7 +102,7 @@ public: }; /* - ARVRAnchor is a helper node that automatically updates it's position based on anchor data, it represents a real world location. + ARVRAnchor is a helper node that automatically updates its position based on anchor data, it represents a real world location. It must be a child node of our ARVROrigin node */ diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index b1f90b72e7..afd87deca6 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -112,8 +112,10 @@ void AudioStreamPlayer3D::_mix_audio() { AudioFrame vol_inc = (target_volume - vol_prev) / float(buffer_size); AudioFrame vol = stream_paused_fade_in ? AudioFrame(0.f, 0.f) : current.vol[k]; - AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(current.bus_index, k); + if (!AudioServer::get_singleton()->thread_has_channel_mix_buffer(current.bus_index, k)) + continue; //may have been deleted, will be updated on process + AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(current.bus_index, k); current.filter.set_mode(AudioFilterSW::HIGHSHELF); current.filter.set_sampling_rate(AudioServer::get_singleton()->get_mix_rate()); current.filter.set_cutoff(attenuation_filter_cutoff_hz); @@ -159,6 +161,9 @@ void AudioStreamPlayer3D::_mix_audio() { if (current.reverb_bus_index >= 0) { + if (!AudioServer::get_singleton()->thread_has_channel_mix_buffer(current.reverb_bus_index, k)) + continue; //may have been deleted, will be updated on process + AudioFrame *rtarget = AudioServer::get_singleton()->thread_get_channel_mix_buffer(current.reverb_bus_index, k); if (current.reverb_bus_index == prev_outputs[i].reverb_bus_index) { @@ -290,7 +295,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { PhysicsDirectSpaceState::ShapeResult sr[MAX_INTERSECT_AREAS]; - int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask); + int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, false, true); Area *area = NULL; for (int i = 0; i < areas; i++) { @@ -448,7 +453,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { //float dist_att_db = -20 * Math::log(dist + 0.00001); //logarithmic attenuation, like in real life - float center_val[3] = { 0.5, 0.25, 0.16666 }; + float center_val[3] = { 0.5f, 0.25f, 0.16666f }; AudioFrame center_frame(center_val[vol_index_max - 1], center_val[vol_index_max - 1]); if (attenuation < 1.0) { @@ -636,6 +641,7 @@ float AudioStreamPlayer3D::get_pitch_scale() const { void AudioStreamPlayer3D::play(float p_from_pos) { if (stream_playback.is_valid()) { + active = true; setplay = p_from_pos; output_ready = false; set_physics_process_internal(true); @@ -814,7 +820,7 @@ AudioStreamPlayer3D::AttenuationModel AudioStreamPlayer3D::get_attenuation_model void AudioStreamPlayer3D::set_out_of_range_mode(OutOfRangeMode p_mode) { - ERR_FAIL_INDEX(p_mode, 2); + ERR_FAIL_INDEX((int)p_mode, 2); out_of_range_mode = p_mode; } diff --git a/scene/3d/baked_lightmap.cpp b/scene/3d/baked_lightmap.cpp index c58e318651..62589bd67e 100644 --- a/scene/3d/baked_lightmap.cpp +++ b/scene/3d/baked_lightmap.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "baked_lightmap.h" +#include "core/io/config_file.h" #include "core/io/resource_saver.h" #include "core/os/dir_access.h" #include "core/os/os.h" @@ -365,7 +366,7 @@ BakedLightmap::BakeError BakedLightmap::bake(Node *p_from_node, bool p_create_vi { bake_bounds = AABB(-extents, extents * 2.0); int subdiv = nearest_power_of_2_templated(int(bake_bounds.get_longest_axis_size() / bake_cell_size)); - bake_bounds.size[bake_bounds.get_longest_axis_size()] = subdiv * bake_cell_size; + bake_bounds.size[bake_bounds.get_longest_axis_index()] = subdiv * bake_cell_size; bake_subdiv = nearest_shift(subdiv) + 1; capture_subdiv = bake_subdiv; @@ -526,21 +527,60 @@ BakedLightmap::BakeError BakedLightmap::bake(Node *p_from_node, bool p_create_vi tex_flags |= Texture::FLAG_CONVERT_TO_LINEAR; } - Ref<ImageTexture> tex; - String image_path = save_path.plus_file(mesh_name + ".tex"); - bool set_path = true; - if (ResourceCache::has(image_path)) { - tex = Ref<Resource>((Resource *)ResourceCache::get(image_path)); - set_path = false; - } + String image_path = save_path.plus_file(mesh_name); + Ref<Texture> texture; - if (!tex.is_valid()) { - tex.instance(); - } + if (ResourceLoader::import) { + + bool srgb = false; + if (false && hdr) { + //save hdr + } else { + image_path += ".png"; + print_line("image path saving png: " + image_path); + image->save_png(image_path); + srgb = true; + } - tex->create_from_image(image, tex_flags); + if (!FileAccess::exists(image_path + ".import")) { + Ref<ConfigFile> config; + config.instance(); + config->set_value("remap", "importer", "texture"); + config->set_value("remap", "type", "StreamTexture"); + config->set_value("params", "compress/mode", 2); + config->set_value("params", "detect_3d", false); + config->set_value("params", "flags/repeat", false); + config->set_value("params", "flags/filter", true); + config->set_value("params", "flags/mipmaps", false); + config->set_value("params", "flags/srgb", srgb); + + config->save(image_path + ".import"); + } + + ResourceLoader::import(image_path); + texture = ResourceLoader::load(image_path); //if already loaded, it will be updated on refocus? + } else { - err = ResourceSaver::save(image_path, tex, ResourceSaver::FLAG_CHANGE_PATH); + image_path += ".text"; + Ref<ImageTexture> tex; + bool set_path = true; + if (ResourceCache::has(image_path)) { + tex = Ref<Resource>((Resource *)ResourceCache::get(image_path)); + set_path = false; + } + + if (!tex.is_valid()) { + tex.instance(); + } + + tex->create_from_image(image, tex_flags); + + err = ResourceSaver::save(image_path, tex, ResourceSaver::FLAG_CHANGE_PATH); + if (set_path) { + tex->set_path(image_path); + } + texture = tex; + } if (err != OK) { if (bake_end_function) { bake_end_function(); @@ -548,10 +588,7 @@ BakedLightmap::BakeError BakedLightmap::bake(Node *p_from_node, bool p_create_vi ERR_FAIL_COND_V(err != OK, BAKE_ERROR_CANT_CREATE_IMAGE); } - if (set_path) { - tex->set_path(image_path); - } - new_light_data->add_user(E->get().path, tex, E->get().instance_idx); + new_light_data->add_user(E->get().path, texture, E->get().instance_idx); } } diff --git a/scene/3d/cpu_particles.cpp b/scene/3d/cpu_particles.cpp index ec51c31674..b07848e02e 100644 --- a/scene/3d/cpu_particles.cpp +++ b/scene/3d/cpu_particles.cpp @@ -198,6 +198,35 @@ String CPUParticles::get_configuration_warning() const { String warnings; + bool mesh_found = false; + bool anim_material_found = false; + + if (get_mesh().is_valid()) { + mesh_found = true; + for (int j = 0; j < get_mesh()->get_surface_count(); j++) { + anim_material_found = Object::cast_to<ShaderMaterial>(get_mesh()->surface_get_material(j).ptr()) != NULL; + SpatialMaterial *spat = Object::cast_to<SpatialMaterial>(get_mesh()->surface_get_material(j).ptr()); + anim_material_found = anim_material_found || (spat && spat->get_billboard_mode() == SpatialMaterial::BILLBOARD_PARTICLES); + } + } + + anim_material_found = anim_material_found || Object::cast_to<ShaderMaterial>(get_material_override().ptr()) != NULL; + SpatialMaterial *spat = Object::cast_to<SpatialMaterial>(get_material_override().ptr()); + anim_material_found = anim_material_found || (spat && spat->get_billboard_mode() == SpatialMaterial::BILLBOARD_PARTICLES); + + if (!mesh_found) { + if (warnings != String()) + warnings += "\n"; + warnings += "- " + TTR("Nothing is visible because no mesh has been assigned."); + } + + if (!anim_material_found && (get_param(PARAM_ANIM_SPEED) != 0.0 || get_param(PARAM_ANIM_OFFSET) != 0.0 || + get_param_curve(PARAM_ANIM_SPEED).is_valid() || get_param_curve(PARAM_ANIM_OFFSET).is_valid())) { + if (warnings != String()) + warnings += "\n"; + warnings += "- " + TTR("CPUParticles animation requires the usage of a SpatialMaterial with \"Billboard Particles\" enabled."); + } + return warnings; } @@ -494,7 +523,7 @@ void CPUParticles::_particles_process(float p_delta) { Basis velocity_xform; if (!local_coords) { emission_xform = get_global_transform(); - velocity_xform = emission_xform.basis.inverse().transposed(); + velocity_xform = emission_xform.basis; } for (int i = 0; i < pcount; i++) { @@ -592,7 +621,7 @@ void CPUParticles::_particles_process(float p_delta) { Vector3 direction_xz = Vector3(Math::sin(angle1_rad), 0, Math::cos(angle1_rad)); Vector3 direction_yz = Vector3(0, Math::sin(angle2_rad), Math::cos(angle2_rad)); - direction_yz.z = direction_yz.z / Math::sqrt(direction_yz.z); //better uniform distribution + direction_yz.z = direction_yz.z / MAX(0.0001, Math::sqrt(ABS(direction_yz.z))); //better uniform distribution Vector3 direction = Vector3(direction_xz.x * direction_yz.z, direction_yz.y, direction_xz.z * direction_yz.z); direction.normalize(); p.velocity = direction * parameters[PARAM_INITIAL_LINEAR_VELOCITY] * Math::lerp(1.0f, float(Math::randf()), randomness[PARAM_INITIAL_LINEAR_VELOCITY]); @@ -662,7 +691,7 @@ void CPUParticles::_particles_process(float p_delta) { if (flags[FLAG_DISABLE_Z]) { p.velocity.z = 0.0; - p.velocity.z = 0.0; + p.transform.origin.z = 0.0; } } else if (!p.active) { @@ -728,15 +757,15 @@ void CPUParticles::_particles_process(float p_delta) { } Vector3 force = gravity; - Vector3 pos = p.transform.origin; + Vector3 position = p.transform.origin; if (flags[FLAG_DISABLE_Z]) { - pos.z = 0.0; + position.z = 0.0; } //apply linear acceleration force += p.velocity.length() > 0.0 ? p.velocity.normalized() * (parameters[PARAM_LINEAR_ACCEL] + tex_linear_accel) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_LINEAR_ACCEL]) : Vector3(); //apply radial acceleration Vector3 org = emission_xform.origin; - Vector3 diff = pos - org; + Vector3 diff = position - org; force += diff.length() > 0.0 ? diff.normalized() * (parameters[PARAM_RADIAL_ACCEL] + tex_radial_accel) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_RADIAL_ACCEL]) : Vector3(); //apply tangential acceleration; if (flags[FLAG_DISABLE_Z]) { @@ -781,12 +810,6 @@ void CPUParticles::_particles_process(float p_delta) { base_angle += p.custom[1] * lifetime * (parameters[PARAM_ANGULAR_VELOCITY] + tex_angular_velocity) * Math::lerp(1.0f, rand_from_seed(alt_seed) * 2.0f - 1.0f, randomness[PARAM_ANGULAR_VELOCITY]); p.custom[0] = Math::deg2rad(base_angle); //angle p.custom[2] = (parameters[PARAM_ANIM_OFFSET] + tex_anim_offset) * Math::lerp(1.0f, p.anim_offset_rand, randomness[PARAM_ANIM_OFFSET]) + p.custom[1] * (parameters[PARAM_ANIM_SPEED] + tex_anim_speed) * Math::lerp(1.0f, rand_from_seed(alt_seed), randomness[PARAM_ANIM_SPEED]); //angle - if (flags[FLAG_ANIM_LOOP]) { - p.custom[2] = Math::fmod(p.custom[2], 1.0f); //loop - - } else { - p.custom[2] = CLAMP(p.custom[2], 0.0f, 1.0); //0 to 1 only - } } //apply color //apply hue rotation @@ -977,6 +1000,8 @@ void CPUParticles::_update_particle_data_buffer() { ptr += 17; } + + can_update = true; } #ifndef NO_THREADS @@ -989,8 +1014,10 @@ void CPUParticles::_update_render_thread() { #ifndef NO_THREADS update_mutex->lock(); #endif - - VS::get_singleton()->multimesh_set_as_bulk_array(multimesh, particle_data); + if (can_update) { + VS::get_singleton()->multimesh_set_as_bulk_array(multimesh, particle_data); + can_update = false; //wait for next time + } #ifndef NO_THREADS update_mutex->unlock(); @@ -1032,7 +1059,7 @@ void CPUParticles::_notification(int p_what) { if (p_what == NOTIFICATION_INTERNAL_PROCESS) { - if (particles.size() == 0) + if (particles.size() == 0 || !is_visible_in_tree()) return; float delta = get_process_delta_time(); @@ -1061,6 +1088,8 @@ void CPUParticles::_notification(int p_what) { } } + bool processed = false; + if (time == 0 && pre_process_time > 0.0) { float frame_time; @@ -1073,6 +1102,7 @@ void CPUParticles::_notification(int p_what) { while (todo >= 0) { _particles_process(frame_time); + processed = true; todo -= frame_time; } } @@ -1091,6 +1121,7 @@ void CPUParticles::_notification(int p_what) { while (todo >= frame_time) { _particles_process(frame_time); + processed = true; todo -= decr; } @@ -1098,9 +1129,12 @@ void CPUParticles::_notification(int p_what) { } else { _particles_process(delta); + processed = true; } - _update_particle_data_buffer(); + if (processed) { + _update_particle_data_buffer(); + } } } @@ -1140,7 +1174,6 @@ void CPUParticles::convert_from_particles(Node *p_particles) { set_particle_flag(FLAG_ALIGN_Y_TO_VELOCITY, material->get_flag(ParticlesMaterial::FLAG_ALIGN_Y_TO_VELOCITY)); set_particle_flag(FLAG_ROTATE_Y, material->get_flag(ParticlesMaterial::FLAG_ROTATE_Y)); set_particle_flag(FLAG_DISABLE_Z, material->get_flag(ParticlesMaterial::FLAG_DISABLE_Z)); - set_particle_flag(FLAG_ANIM_LOOP, material->get_flag(ParticlesMaterial::FLAG_ANIM_LOOP)); set_emission_shape(EmissionShape(material->get_emission_shape())); set_emission_sphere_radius(material->get_emission_sphere_radius()); @@ -1298,7 +1331,7 @@ void CPUParticles::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "initial_velocity", PROPERTY_HINT_RANGE, "0,1000,0.01,or_greater"), "set_param", "get_param", PARAM_INITIAL_LINEAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "initial_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_INITIAL_LINEAR_VELOCITY); ADD_GROUP("Angular Velocity", "angular_"); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-360,360,0.01"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-720,720,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGULAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angular_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANGULAR_VELOCITY); /* @@ -1328,15 +1361,15 @@ void CPUParticles::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angle_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGLE); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angle_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANGLE); ADD_GROUP("Scale", ""); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale", PROPERTY_HINT_RANGE, "0,1000,0.01,or_greater"), "set_param", "get_param", PARAM_SCALE); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_SCALE); - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "scale_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_SCALE); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale_amount", PROPERTY_HINT_RANGE, "0,1000,0.01,or_greater"), "set_param", "get_param", PARAM_SCALE); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "scale_amount_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_SCALE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "scale_amount_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_SCALE); ADD_GROUP("Color", ""); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color"); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "GradientTexture"), "set_color_ramp", "get_color_ramp"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "Gradient"), "set_color_ramp", "get_color_ramp"); ADD_GROUP("Hue Variation", "hue_"); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation", PROPERTY_HINT_RANGE, "-1,1,0.1"), "set_param", "get_param", PARAM_HUE_VARIATION); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_param", "get_param", PARAM_HUE_VARIATION); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_HUE_VARIATION); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "hue_variation_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_HUE_VARIATION); ADD_GROUP("Animation", "anim_"); @@ -1346,7 +1379,6 @@ void CPUParticles::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anim_offset", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param", "get_param", PARAM_ANIM_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anim_offset_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANIM_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "anim_offset_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_param_curve", "get_param_curve", PARAM_ANIM_OFFSET); - ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "anim_loop"), "set_particle_flag", "get_particle_flag", FLAG_ANIM_LOOP); BIND_ENUM_CONSTANT(PARAM_INITIAL_LINEAR_VELOCITY); BIND_ENUM_CONSTANT(PARAM_ANGULAR_VELOCITY); @@ -1424,6 +1456,8 @@ CPUParticles::CPUParticles() { flags[i] = false; } + can_update = false; + set_color(Color(1, 1, 1, 1)); #ifndef NO_THREADS diff --git a/scene/3d/cpu_particles.h b/scene/3d/cpu_particles.h index 4e29d8d4ce..2e83924dfc 100644 --- a/scene/3d/cpu_particles.h +++ b/scene/3d/cpu_particles.h @@ -70,7 +70,6 @@ public: FLAG_ALIGN_Y_TO_VELOCITY, FLAG_ROTATE_Y, FLAG_DISABLE_Z, - FLAG_ANIM_LOOP, FLAG_MAX }; @@ -142,6 +141,8 @@ private: int fixed_fps; bool fractional_delta; + volatile bool can_update; + DrawOrder draw_order; Ref<Mesh> mesh; @@ -168,7 +169,6 @@ private: PoolVector<Color> emission_colors; int emission_point_count; - bool anim_loop; Vector3 gravity; void _particles_process(float p_delta); diff --git a/scene/3d/light.cpp b/scene/3d/light.cpp index 7e1d60ab8e..11d61315ba 100644 --- a/scene/3d/light.cpp +++ b/scene/3d/light.cpp @@ -163,11 +163,6 @@ void Light::_update_visibility() { if (!is_inside_tree()) return; - // FIXME: Since the call to VS::instance_light_set_enabled was disabled below, - // the whole logic became pointless so editor_ok triggers unused variable warnings. - // Commenting out for now but this should be fixed/reimplemented so that editor_only - // works as expected (GH-17989). - /* bool editor_ok = true; #ifdef TOOLS_ENABLED @@ -184,8 +179,8 @@ void Light::_update_visibility() { } #endif - //VS::get_singleton()->instance_light_set_enabled(get_instance(),is_visible_in_tree() && editor_ok); - */ + VS::get_singleton()->instance_set_visible(get_instance(), is_visible_in_tree() && editor_ok); + _change_notify("geometry/visible"); } diff --git a/scene/3d/listener.h b/scene/3d/listener.h index 8047971ebd..9901f7635c 100644 --- a/scene/3d/listener.h +++ b/scene/3d/listener.h @@ -71,8 +71,6 @@ public: void set_visible_layers(uint32_t p_layers); uint32_t get_visible_layers() const; - Vector<Plane> get_frustum() const; - Listener(); ~Listener(); }; diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp index 4cbf6f2de3..cf0317cd58 100644 --- a/scene/3d/mesh_instance.cpp +++ b/scene/3d/mesh_instance.cpp @@ -253,6 +253,11 @@ void MeshInstance::_notification(int p_what) { } } +int MeshInstance::get_surface_material_count() const { + + return materials.size(); +} + void MeshInstance::set_surface_material(int p_surface, const Ref<Material> &p_material) { ERR_FAIL_INDEX(p_surface, materials.size()); @@ -359,6 +364,7 @@ void MeshInstance::_bind_methods() { ClassDB::bind_method(D_METHOD("set_skeleton_path", "skeleton_path"), &MeshInstance::set_skeleton_path); ClassDB::bind_method(D_METHOD("get_skeleton_path"), &MeshInstance::get_skeleton_path); + ClassDB::bind_method(D_METHOD("get_surface_material_count"), &MeshInstance::get_surface_material_count); ClassDB::bind_method(D_METHOD("set_surface_material", "surface", "material"), &MeshInstance::set_surface_material); ClassDB::bind_method(D_METHOD("get_surface_material", "surface"), &MeshInstance::get_surface_material); diff --git a/scene/3d/mesh_instance.h b/scene/3d/mesh_instance.h index 0dfec538f9..0b5b4b9e7b 100644 --- a/scene/3d/mesh_instance.h +++ b/scene/3d/mesh_instance.h @@ -76,6 +76,7 @@ public: void set_skeleton_path(const NodePath &p_skeleton); NodePath get_skeleton_path(); + int get_surface_material_count() const; void set_surface_material(int p_surface, const Ref<Material> &p_material); Ref<Material> get_surface_material(int p_surface) const; diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp index 10b26778ef..3fff42aa78 100644 --- a/scene/3d/particles.cpp +++ b/scene/3d/particles.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "particles.h" +#include "scene/resources/particles_material.h" #include "servers/visual_server.h" @@ -226,15 +227,27 @@ String Particles::get_configuration_warning() const { String warnings; bool meshes_found = false; + bool anim_material_found = false; for (int i = 0; i < draw_passes.size(); i++) { if (draw_passes[i].is_valid()) { meshes_found = true; - break; + for (int j = 0; j < draw_passes[i]->get_surface_count(); j++) { + anim_material_found = Object::cast_to<ShaderMaterial>(draw_passes[i]->surface_get_material(j).ptr()) != NULL; + SpatialMaterial *spat = Object::cast_to<SpatialMaterial>(draw_passes[i]->surface_get_material(j).ptr()); + anim_material_found = anim_material_found || (spat && spat->get_billboard_mode() == SpatialMaterial::BILLBOARD_PARTICLES); + } + if (meshes_found && anim_material_found) break; } } + anim_material_found = anim_material_found || Object::cast_to<ShaderMaterial>(get_material_override().ptr()) != NULL; + SpatialMaterial *spat = Object::cast_to<SpatialMaterial>(get_material_override().ptr()); + anim_material_found = anim_material_found || (spat && spat->get_billboard_mode() == SpatialMaterial::BILLBOARD_PARTICLES); + if (!meshes_found) { + if (warnings != String()) + warnings += "\n"; warnings += "- " + TTR("Nothing is visible because meshes have not been assigned to draw passes."); } @@ -242,6 +255,15 @@ String Particles::get_configuration_warning() const { if (warnings != String()) warnings += "\n"; warnings += "- " + TTR("A material to process the particles is not assigned, so no behavior is imprinted."); + } else { + const ParticlesMaterial *process = Object::cast_to<ParticlesMaterial>(process_material.ptr()); + if (!anim_material_found && process && + (process->get_param(ParticlesMaterial::PARAM_ANIM_SPEED) != 0.0 || process->get_param(ParticlesMaterial::PARAM_ANIM_OFFSET) != 0.0 || + process->get_param_texture(ParticlesMaterial::PARAM_ANIM_SPEED).is_valid() || process->get_param_texture(ParticlesMaterial::PARAM_ANIM_OFFSET).is_valid())) { + if (warnings != String()) + warnings += "\n"; + warnings += "- " + TTR("Particles animation requires the usage of a SpatialMaterial with \"Billboard Particles\" enabled."); + } } return warnings; diff --git a/scene/3d/path.cpp b/scene/3d/path.cpp index e37efa0e8a..1b253d41e8 100644 --- a/scene/3d/path.cpp +++ b/scene/3d/path.cpp @@ -43,6 +43,16 @@ void Path::_curve_changed() { if (is_inside_tree()) { emit_signal("curve_changed"); } + + // update the configuration warnings of all children of type OrientedPathFollows + if (is_inside_tree()) { + for (int i = 0; i < get_child_count(); i++) { + OrientedPathFollow *child = Object::cast_to<OrientedPathFollow>(get_child(i)); + if (child) { + child->update_configuration_warning(); + } + } + } } void Path::set_curve(const Ref<Curve3D> &p_curve) { @@ -207,6 +217,18 @@ void PathFollow::_validate_property(PropertyInfo &property) const { } } +String PathFollow::get_configuration_warning() const { + + if (!is_visible_in_tree() || !is_inside_tree()) + return String(); + + if (!Object::cast_to<Path>(get_parent())) { + return TTR("PathFollow only works when set as a child of a Path node."); + } + + return String(); +} + void PathFollow::_bind_methods() { ClassDB::bind_method(D_METHOD("set_offset", "offset"), &PathFollow::set_offset); @@ -230,7 +252,7 @@ void PathFollow::_bind_methods() { ClassDB::bind_method(D_METHOD("set_loop", "loop"), &PathFollow::set_loop); ClassDB::bind_method(D_METHOD("has_loop"), &PathFollow::has_loop); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_EXP_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "h_offset"), "set_h_offset", "get_h_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_offset"), "set_v_offset", "get_v_offset"); @@ -444,6 +466,23 @@ void OrientedPathFollow::_validate_property(PropertyInfo &property) const { } } +String OrientedPathFollow::get_configuration_warning() const { + + if (!is_visible_in_tree() || !is_inside_tree()) + return String(); + + if (!Object::cast_to<Path>(get_parent())) { + return TTR("OrientedPathFollow only works when set as a child of a Path node."); + } else { + Path *path = Object::cast_to<Path>(get_parent()); + if (path->get_curve().is_valid() && !path->get_curve()->is_up_vector_enabled()) { + return TTR("OrientedPathFollow requires up vectors enabled in its parent Path."); + } + } + + return String(); +} + void OrientedPathFollow::_bind_methods() { ClassDB::bind_method(D_METHOD("set_offset", "offset"), &OrientedPathFollow::set_offset); diff --git a/scene/3d/path.h b/scene/3d/path.h index f73bf17dfe..beb37d9714 100644 --- a/scene/3d/path.h +++ b/scene/3d/path.h @@ -106,6 +106,8 @@ public: void set_cubic_interpolation(bool p_enable); bool get_cubic_interpolation() const; + String get_configuration_warning() const; + PathFollow(); }; @@ -151,6 +153,8 @@ public: void set_cubic_interpolation(bool p_enable); bool get_cubic_interpolation() const; + String get_configuration_warning() const; + OrientedPathFollow(); }; diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 0fb0869979..bcfcf33e57 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -32,7 +32,10 @@ #include "core/core_string_names.h" #include "core/engine.h" +#include "core/list.h" #include "core/method_bind_ext.gen.inc" +#include "core/object.h" +#include "core/rid.h" #include "scene/scene_string_names.h" #ifdef TOOLS_ENABLED @@ -108,6 +111,20 @@ bool PhysicsBody::get_collision_layer_bit(int p_bit) const { return get_collision_layer() & (1 << p_bit); } +Array PhysicsBody::get_collision_exceptions() { + List<RID> exceptions; + PhysicsServer::get_singleton()->body_get_collision_exceptions(get_rid(), &exceptions); + Array ret; + for (List<RID>::Element *E = exceptions.front(); E; E = E->next()) { + RID body = E->get(); + ObjectID instance_id = PhysicsServer::get_singleton()->body_get_object_instance_id(body); + Object *obj = ObjectDB::get_instance(instance_id); + PhysicsBody *physics_body = Object::cast_to<PhysicsBody>(obj); + ret.append(physics_body); + } + return ret; +} + void PhysicsBody::add_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); @@ -289,14 +306,15 @@ void StaticBody::_bind_methods() { ClassDB::bind_method(D_METHOD("_reload_physics_characteristics"), &StaticBody::_reload_physics_characteristics); + ClassDB::bind_method(D_METHOD("get_collision_exceptions"), &PhysicsBody::get_collision_exceptions); ClassDB::bind_method(D_METHOD("add_collision_exception_with", "body"), &PhysicsBody::add_collision_exception_with); ClassDB::bind_method(D_METHOD("remove_collision_exception_with", "body"), &PhysicsBody::remove_collision_exception_with); #ifndef DISABLE_DEPRECATED - ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); #endif // DISABLE_DEPRECATED - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "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"); } @@ -1006,10 +1024,10 @@ void RigidBody::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "mass", PROPERTY_HINT_EXP_RANGE, "0.01,65535,0.01"), "set_mass", "get_mass"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "weight", PROPERTY_HINT_EXP_RANGE, "0.01,65535,0.01", PROPERTY_USAGE_EDITOR), "set_weight", "get_weight"); #ifndef DISABLE_DEPRECATED - ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "friction", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_friction", "get_friction"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "bounce", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_bounce", "get_bounce"); #endif // DISABLE_DEPRECATED - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "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::REAL, "gravity_scale", PROPERTY_HINT_RANGE, "-128,128,0.01"), "set_gravity_scale", "get_gravity_scale"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "custom_integrator"), "set_use_custom_integrator", "is_using_custom_integrator"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "continuous_cd"), "set_use_continuous_collision_detection", "is_using_continuous_collision_detection"); @@ -1149,7 +1167,8 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve } } - Vector3 motion = (floor_velocity + lv) * get_physics_process_delta_time(); + // Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky + Vector3 motion = (floor_velocity + lv) * (Engine::get_singleton()->is_in_physics_frame() ? get_physics_process_delta_time() : get_process_delta_time()); on_floor = false; on_ceiling = false; @@ -1248,7 +1267,7 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve return lv; } -Vector3 KinematicBody::move_and_slide_with_snap(const Vector3 &p_linear_velocity, const Vector3 &p_snap, const Vector3 &p_floor_direction, bool p_infinite_inertia, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle) { +Vector3 KinematicBody::move_and_slide_with_snap(const Vector3 &p_linear_velocity, const Vector3 &p_snap, const Vector3 &p_floor_direction, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle, bool p_infinite_inertia) { bool was_on_floor = on_floor; @@ -1384,9 +1403,9 @@ void KinematicBody::_bind_methods() { ClassDB::bind_method(D_METHOD("move_and_collide", "rel_vec", "infinite_inertia", "test_only"), &KinematicBody::_move, DEFVAL(true), DEFVAL(false)); ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody::move_and_slide, DEFVAL(Vector3(0, 0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true)); - ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "floor_normal", "infinite_inertia", "stop_on_slope", "max_bounces", "floor_max_angle"), &KinematicBody::move_and_slide_with_snap, DEFVAL(Vector3(0, 0, 0)), DEFVAL(true), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45))); + ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody::move_and_slide_with_snap, DEFVAL(Vector3(0, 0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true)); - ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec", "infinite_inertia"), &KinematicBody::test_move); + ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec", "infinite_inertia"), &KinematicBody::test_move, DEFVAL(true)); ClassDB::bind_method(D_METHOD("is_on_floor"), &KinematicBody::is_on_floor); ClassDB::bind_method(D_METHOD("is_on_ceiling"), &KinematicBody::is_on_ceiling); @@ -1888,6 +1907,26 @@ bool PhysicalBone::SixDOFJointData::_set(const StringName &p_name, const Variant if (j.is_valid()) PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS, axis_data[axis].linear_limit_softness); + } else if ("linear_spring_enabled" == var_name) { + axis_data[axis].linear_spring_enabled = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, axis_data[axis].linear_spring_enabled); + + } else if ("linear_spring_stiffness" == var_name) { + axis_data[axis].linear_spring_stiffness = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, axis_data[axis].linear_spring_stiffness); + + } else if ("linear_spring_damping" == var_name) { + axis_data[axis].linear_spring_damping = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING, axis_data[axis].linear_spring_damping); + + } else if ("linear_equilibrium_point" == var_name) { + axis_data[axis].linear_equilibrium_point = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, axis_data[axis].linear_equilibrium_point); + } else if ("linear_restitution" == var_name) { axis_data[axis].linear_restitution = p_value; if (j.is_valid()) @@ -1933,6 +1972,26 @@ bool PhysicalBone::SixDOFJointData::_set(const StringName &p_name, const Variant if (j.is_valid()) PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_ERP, axis_data[axis].erp); + } else if ("angular_spring_enabled" == var_name) { + axis_data[axis].angular_spring_enabled = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, axis_data[axis].angular_spring_enabled); + + } else if ("angular_spring_stiffness" == var_name) { + axis_data[axis].angular_spring_stiffness = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, axis_data[axis].angular_spring_stiffness); + + } else if ("angular_spring_damping" == var_name) { + axis_data[axis].angular_spring_damping = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING, axis_data[axis].angular_spring_damping); + + } else if ("angular_equilibrium_point" == var_name) { + axis_data[axis].angular_equilibrium_point = p_value; + if (j.is_valid()) + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, axis_data[axis].angular_equilibrium_point); + } else { return false; } @@ -1971,6 +2030,14 @@ bool PhysicalBone::SixDOFJointData::_get(const StringName &p_name, Variant &r_re r_ret = axis_data[axis].linear_limit_lower; } else if ("linear_limit_softness" == var_name) { r_ret = axis_data[axis].linear_limit_softness; + } else if ("linear_spring_enabled" == var_name) { + r_ret = axis_data[axis].linear_spring_enabled; + } else if ("linear_spring_stiffness" == var_name) { + r_ret = axis_data[axis].linear_spring_stiffness; + } else if ("linear_spring_damping" == var_name) { + r_ret = axis_data[axis].linear_spring_damping; + } else if ("linear_equilibrium_point" == var_name) { + r_ret = axis_data[axis].linear_equilibrium_point; } else if ("linear_restitution" == var_name) { r_ret = axis_data[axis].linear_restitution; } else if ("linear_damping" == var_name) { @@ -1989,6 +2056,14 @@ bool PhysicalBone::SixDOFJointData::_get(const StringName &p_name, Variant &r_re r_ret = axis_data[axis].angular_damping; } else if ("erp" == var_name) { r_ret = axis_data[axis].erp; + } else if ("angular_spring_enabled" == var_name) { + r_ret = axis_data[axis].angular_spring_enabled; + } else if ("angular_spring_stiffness" == var_name) { + r_ret = axis_data[axis].angular_spring_stiffness; + } else if ("angular_spring_damping" == var_name) { + r_ret = axis_data[axis].angular_spring_damping; + } else if ("angular_equilibrium_point" == var_name) { + r_ret = axis_data[axis].angular_equilibrium_point; } else { return false; } @@ -2003,6 +2078,10 @@ void PhysicalBone::SixDOFJointData::_get_property_list(List<PropertyInfo> *p_lis p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_limit_upper")); p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_limit_lower")); p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_limit_softness", PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/linear_spring_enabled")); + p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_spring_stiffness")); + p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_spring_damping")); + p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_equilibrium_point")); p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01")); p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_damping", PROPERTY_HINT_RANGE, "0.01,16,0.01")); p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/angular_limit_enabled")); @@ -2012,6 +2091,10 @@ void PhysicalBone::SixDOFJointData::_get_property_list(List<PropertyInfo> *p_lis p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01")); p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_damping", PROPERTY_HINT_RANGE, "0.01,16,0.01")); p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/erp")); + p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/angular_spring_enabled")); + p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_spring_stiffness")); + p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_spring_damping")); + p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_equilibrium_point")); } } @@ -2275,6 +2358,10 @@ void PhysicalBone::_reload_joint() { PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_UPPER_LIMIT, g6dofjd->axis_data[axis].linear_limit_upper); PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_LOWER_LIMIT, g6dofjd->axis_data[axis].linear_limit_lower); PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS, g6dofjd->axis_data[axis].linear_limit_softness); + PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, g6dofjd->axis_data[axis].linear_spring_enabled); + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, g6dofjd->axis_data[axis].linear_spring_stiffness); + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING, g6dofjd->axis_data[axis].linear_spring_damping); + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, g6dofjd->axis_data[axis].linear_equilibrium_point); PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_RESTITUTION, g6dofjd->axis_data[axis].linear_restitution); PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_DAMPING, g6dofjd->axis_data[axis].linear_damping); PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, g6dofjd->axis_data[axis].angular_limit_enabled); @@ -2284,6 +2371,10 @@ void PhysicalBone::_reload_joint() { PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_RESTITUTION, g6dofjd->axis_data[axis].angular_restitution); PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_DAMPING, g6dofjd->axis_data[axis].angular_damping); PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_ERP, g6dofjd->axis_data[axis].erp); + PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, g6dofjd->axis_data[axis].angular_spring_enabled); + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, g6dofjd->axis_data[axis].angular_spring_stiffness); + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING, g6dofjd->axis_data[axis].angular_spring_damping); + PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, g6dofjd->axis_data[axis].angular_equilibrium_point); } } break; @@ -2326,7 +2417,8 @@ void PhysicalBone::set_joint_type(JointType p_joint_type) { if (p_joint_type == get_joint_type()) return; - memdelete(joint_data); + if (joint_data) + memdelete(joint_data); joint_data = NULL; switch (p_joint_type) { case JOINT_TYPE_PIN: @@ -2526,7 +2618,8 @@ PhysicalBone::PhysicalBone() : } PhysicalBone::~PhysicalBone() { - memdelete(joint_data); + if (joint_data) + memdelete(joint_data); } void PhysicalBone::update_bone_id() { diff --git a/scene/3d/physics_body.h b/scene/3d/physics_body.h index ed9f41197b..5474290c07 100644 --- a/scene/3d/physics_body.h +++ b/scene/3d/physics_body.h @@ -69,6 +69,7 @@ public: void set_collision_mask_bit(int p_bit, bool p_value); bool get_collision_mask_bit(int p_bit) const; + Array get_collision_exceptions(); void add_collision_exception_with(Node *p_node); //must be physicsbody void remove_collision_exception_with(Node *p_node); @@ -328,7 +329,7 @@ public: float get_safe_margin() const; Vector3 move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction = Vector3(0, 0, 0), bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45), bool p_infinite_inertia = true); - Vector3 move_and_slide_with_snap(const Vector3 &p_linear_velocity, const Vector3 &p_snap, const Vector3 &p_floor_direction = Vector3(0, 0, 0), bool p_infinite_inertia = true, bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45)); + Vector3 move_and_slide_with_snap(const Vector3 &p_linear_velocity, const Vector3 &p_snap, const Vector3 &p_floor_direction = Vector3(0, 0, 0), bool p_stop_on_slope = false, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45), bool p_infinite_inertia = true); bool is_on_floor() const; bool is_on_wall() const; bool is_on_ceiling() const; @@ -493,6 +494,10 @@ public: real_t linear_limit_softness; real_t linear_restitution; real_t linear_damping; + bool linear_spring_enabled; + real_t linear_spring_stiffness; + real_t linear_spring_damping; + real_t linear_equilibrium_point; bool angular_limit_enabled; real_t angular_limit_upper; real_t angular_limit_lower; @@ -500,6 +505,10 @@ public: real_t angular_restitution; real_t angular_damping; real_t erp; + bool angular_spring_enabled; + real_t angular_spring_stiffness; + real_t angular_spring_damping; + real_t angular_equilibrium_point; SixDOFAxisData() : linear_limit_enabled(true), @@ -508,13 +517,21 @@ public: linear_limit_softness(0.7), linear_restitution(0.5), linear_damping(1.), + linear_spring_enabled(false), + linear_spring_stiffness(0), + linear_spring_damping(0), + linear_equilibrium_point(0), angular_limit_enabled(true), angular_limit_upper(0), angular_limit_lower(0), angular_limit_softness(0.5), angular_restitution(0), angular_damping(1.), - erp(0.5) {} + erp(0.5), + angular_spring_enabled(false), + angular_spring_stiffness(0), + angular_spring_damping(0.), + angular_equilibrium_point(0) {} }; virtual JointType get_joint_type() { return JOINT_TYPE_6DOF; } diff --git a/scene/3d/physics_joint.cpp b/scene/3d/physics_joint.cpp index a30fc0ac3e..8fd86c940c 100644 --- a/scene/3d/physics_joint.cpp +++ b/scene/3d/physics_joint.cpp @@ -707,6 +707,9 @@ void Generic6DOFJoint::_bind_methods() { ClassDB::bind_method(D_METHOD("set_flag_z", "flag", "value"), &Generic6DOFJoint::set_flag_z); ClassDB::bind_method(D_METHOD("get_flag_z", "flag"), &Generic6DOFJoint::get_flag_z); + ClassDB::bind_method(D_METHOD("set_precision", "precision"), &Generic6DOFJoint::set_precision); + ClassDB::bind_method(D_METHOD("get_precision"), &Generic6DOFJoint::get_precision); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_limit_x/upper_distance"), "set_param_x", "get_param_x", PARAM_LINEAR_UPPER_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_limit_x/lower_distance"), "set_param_x", "get_param_x", PARAM_LINEAR_LOWER_LIMIT); @@ -716,6 +719,11 @@ void Generic6DOFJoint::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_motor_x/target_velocity"), "set_param_x", "get_param_x", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "linear_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_STIFFNESS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_spring_x/damping"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_spring_x/equilibrium_point"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_limit_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_ANGULAR_LIMIT); ADD_PROPERTY(PropertyInfo(Variant::REAL, "angular_limit_x/upper_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_hi_limit_x", "_get_angular_hi_limit_x"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "angular_limit_x/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_x", "_get_angular_lo_limit_x"); @@ -727,6 +735,10 @@ void Generic6DOFJoint::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_motor_x/target_velocity"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "angular_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_STIFFNESS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_spring_x/damping"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_spring_x/equilibrium_point"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_limit_y/upper_distance"), "set_param_y", "get_param_y", PARAM_LINEAR_UPPER_LIMIT); @@ -737,6 +749,10 @@ void Generic6DOFJoint::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_motor_y/target_velocity"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "linear_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_STIFFNESS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_spring_y/damping"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "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::REAL, "angular_limit_y/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_y", "_get_angular_lo_limit_y"); @@ -748,6 +764,10 @@ void Generic6DOFJoint::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_motor_y/target_velocity"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "angular_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_STIFFNESS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_spring_y/damping"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_limit_z/upper_distance"), "set_param_z", "get_param_z", PARAM_LINEAR_UPPER_LIMIT); @@ -758,6 +778,10 @@ void Generic6DOFJoint::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_motor_z/target_velocity"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "linear_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_STIFFNESS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "linear_spring_z/damping"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "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::REAL, "angular_limit_z/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_z", "_get_angular_lo_limit_z"); @@ -769,6 +793,12 @@ void Generic6DOFJoint::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_motor_z/target_velocity"), "set_param_z", "get_param_z", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "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::REAL, "angular_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_STIFFNESS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_spring_z/damping"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_spring_z/equilibrium_point"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT); + + ADD_PROPERTY(PropertyInfo(Variant::INT, "precision", PROPERTY_HINT_RANGE, "1,99999,1"), "set_precision", "get_precision"); BIND_ENUM_CONSTANT(PARAM_LINEAR_LOWER_LIMIT); BIND_ENUM_CONSTANT(PARAM_LINEAR_UPPER_LIMIT); @@ -790,6 +820,8 @@ void Generic6DOFJoint::_bind_methods() { BIND_ENUM_CONSTANT(FLAG_ENABLE_LINEAR_LIMIT); BIND_ENUM_CONSTANT(FLAG_ENABLE_ANGULAR_LIMIT); + BIND_ENUM_CONSTANT(FLAG_ENABLE_LINEAR_SPRING); + BIND_ENUM_CONSTANT(FLAG_ENABLE_ANGULAR_SPRING); BIND_ENUM_CONSTANT(FLAG_ENABLE_MOTOR); BIND_ENUM_CONSTANT(FLAG_ENABLE_LINEAR_MOTOR); BIND_ENUM_CONSTANT(FLAG_MAX); @@ -880,6 +912,14 @@ bool Generic6DOFJoint::get_flag_z(Flag p_flag) const { return flags_z[p_flag]; } +void Generic6DOFJoint::set_precision(int p_precision) { + precision = p_precision; + + PhysicsServer::get_singleton()->generic_6dof_joint_set_precision( + get_joint(), + precision); +} + RID Generic6DOFJoint::_configure_joint(PhysicsBody *body_a, PhysicsBody *body_b) { Transform gt = get_global_transform(); @@ -914,7 +954,8 @@ RID Generic6DOFJoint::_configure_joint(PhysicsBody *body_a, PhysicsBody *body_b) return j; } -Generic6DOFJoint::Generic6DOFJoint() { +Generic6DOFJoint::Generic6DOFJoint() : + precision(1) { set_param_x(PARAM_LINEAR_LOWER_LIMIT, 0); set_param_x(PARAM_LINEAR_UPPER_LIMIT, 0); @@ -923,6 +964,9 @@ Generic6DOFJoint::Generic6DOFJoint() { set_param_x(PARAM_LINEAR_DAMPING, 1.0); set_param_x(PARAM_LINEAR_MOTOR_TARGET_VELOCITY, 0); set_param_x(PARAM_LINEAR_MOTOR_FORCE_LIMIT, 0); + set_param_x(PARAM_LINEAR_SPRING_STIFFNESS, 0.01); + set_param_x(PARAM_LINEAR_SPRING_DAMPING, 0.01); + set_param_x(PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT, 0.0); set_param_x(PARAM_ANGULAR_LOWER_LIMIT, 0); set_param_x(PARAM_ANGULAR_UPPER_LIMIT, 0); set_param_x(PARAM_ANGULAR_LIMIT_SOFTNESS, 0.5f); @@ -932,9 +976,14 @@ Generic6DOFJoint::Generic6DOFJoint() { set_param_x(PARAM_ANGULAR_ERP, 0.5); set_param_x(PARAM_ANGULAR_MOTOR_TARGET_VELOCITY, 0); set_param_x(PARAM_ANGULAR_MOTOR_FORCE_LIMIT, 300); + set_param_x(PARAM_ANGULAR_SPRING_STIFFNESS, 0); + set_param_x(PARAM_ANGULAR_SPRING_DAMPING, 0); + set_param_x(PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT, 0); set_flag_x(FLAG_ENABLE_ANGULAR_LIMIT, true); set_flag_x(FLAG_ENABLE_LINEAR_LIMIT, true); + set_flag_x(FLAG_ENABLE_ANGULAR_SPRING, false); + set_flag_x(FLAG_ENABLE_LINEAR_SPRING, false); set_flag_x(FLAG_ENABLE_MOTOR, false); set_flag_x(FLAG_ENABLE_LINEAR_MOTOR, false); @@ -945,6 +994,9 @@ Generic6DOFJoint::Generic6DOFJoint() { set_param_y(PARAM_LINEAR_DAMPING, 1.0); set_param_y(PARAM_LINEAR_MOTOR_TARGET_VELOCITY, 0); set_param_y(PARAM_LINEAR_MOTOR_FORCE_LIMIT, 0); + set_param_y(PARAM_LINEAR_SPRING_STIFFNESS, 0.01); + set_param_y(PARAM_LINEAR_SPRING_DAMPING, 0.01); + set_param_y(PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT, 0.0); set_param_y(PARAM_ANGULAR_LOWER_LIMIT, 0); set_param_y(PARAM_ANGULAR_UPPER_LIMIT, 0); set_param_y(PARAM_ANGULAR_LIMIT_SOFTNESS, 0.5f); @@ -954,9 +1006,14 @@ Generic6DOFJoint::Generic6DOFJoint() { set_param_y(PARAM_ANGULAR_ERP, 0.5); set_param_y(PARAM_ANGULAR_MOTOR_TARGET_VELOCITY, 0); set_param_y(PARAM_ANGULAR_MOTOR_FORCE_LIMIT, 300); + set_param_y(PARAM_ANGULAR_SPRING_STIFFNESS, 0); + set_param_y(PARAM_ANGULAR_SPRING_DAMPING, 0); + set_param_y(PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT, 0); set_flag_y(FLAG_ENABLE_ANGULAR_LIMIT, true); set_flag_y(FLAG_ENABLE_LINEAR_LIMIT, true); + set_flag_y(FLAG_ENABLE_ANGULAR_SPRING, false); + set_flag_y(FLAG_ENABLE_LINEAR_SPRING, false); set_flag_y(FLAG_ENABLE_MOTOR, false); set_flag_y(FLAG_ENABLE_LINEAR_MOTOR, false); @@ -967,6 +1024,9 @@ Generic6DOFJoint::Generic6DOFJoint() { set_param_z(PARAM_LINEAR_DAMPING, 1.0); set_param_z(PARAM_LINEAR_MOTOR_TARGET_VELOCITY, 0); set_param_z(PARAM_LINEAR_MOTOR_FORCE_LIMIT, 0); + set_param_z(PARAM_LINEAR_SPRING_STIFFNESS, 0.01); + set_param_z(PARAM_LINEAR_SPRING_DAMPING, 0.01); + set_param_z(PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT, 0.0); set_param_z(PARAM_ANGULAR_LOWER_LIMIT, 0); set_param_z(PARAM_ANGULAR_UPPER_LIMIT, 0); set_param_z(PARAM_ANGULAR_LIMIT_SOFTNESS, 0.5f); @@ -976,9 +1036,14 @@ Generic6DOFJoint::Generic6DOFJoint() { set_param_z(PARAM_ANGULAR_ERP, 0.5); set_param_z(PARAM_ANGULAR_MOTOR_TARGET_VELOCITY, 0); set_param_z(PARAM_ANGULAR_MOTOR_FORCE_LIMIT, 300); + set_param_z(PARAM_ANGULAR_SPRING_STIFFNESS, 0); + set_param_z(PARAM_ANGULAR_SPRING_DAMPING, 0); + set_param_z(PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT, 0); set_flag_z(FLAG_ENABLE_ANGULAR_LIMIT, true); set_flag_z(FLAG_ENABLE_LINEAR_LIMIT, true); + set_flag_z(FLAG_ENABLE_ANGULAR_SPRING, false); + set_flag_z(FLAG_ENABLE_LINEAR_SPRING, false); set_flag_z(FLAG_ENABLE_MOTOR, false); set_flag_z(FLAG_ENABLE_LINEAR_MOTOR, false); } diff --git a/scene/3d/physics_joint.h b/scene/3d/physics_joint.h index 37870d6f30..753795da90 100644 --- a/scene/3d/physics_joint.h +++ b/scene/3d/physics_joint.h @@ -251,6 +251,9 @@ public: PARAM_LINEAR_DAMPING = PhysicsServer::G6DOF_JOINT_LINEAR_DAMPING, PARAM_LINEAR_MOTOR_TARGET_VELOCITY = PhysicsServer::G6DOF_JOINT_LINEAR_MOTOR_TARGET_VELOCITY, PARAM_LINEAR_MOTOR_FORCE_LIMIT = PhysicsServer::G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT, + PARAM_LINEAR_SPRING_STIFFNESS = PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, + PARAM_LINEAR_SPRING_DAMPING = PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING, + PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT = PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, PARAM_ANGULAR_LOWER_LIMIT = PhysicsServer::G6DOF_JOINT_ANGULAR_LOWER_LIMIT, PARAM_ANGULAR_UPPER_LIMIT = PhysicsServer::G6DOF_JOINT_ANGULAR_UPPER_LIMIT, PARAM_ANGULAR_LIMIT_SOFTNESS = PhysicsServer::G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS, @@ -260,12 +263,17 @@ public: PARAM_ANGULAR_ERP = PhysicsServer::G6DOF_JOINT_ANGULAR_ERP, PARAM_ANGULAR_MOTOR_TARGET_VELOCITY = PhysicsServer::G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY, PARAM_ANGULAR_MOTOR_FORCE_LIMIT = PhysicsServer::G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT, + PARAM_ANGULAR_SPRING_STIFFNESS = PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, + PARAM_ANGULAR_SPRING_DAMPING = PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING, + PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT = PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, PARAM_MAX = PhysicsServer::G6DOF_JOINT_MAX, }; enum Flag { FLAG_ENABLE_LINEAR_LIMIT = PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT, FLAG_ENABLE_ANGULAR_LIMIT = PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, + FLAG_ENABLE_LINEAR_SPRING = PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, + FLAG_ENABLE_ANGULAR_SPRING = PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, FLAG_ENABLE_MOTOR = PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_MOTOR, FLAG_ENABLE_LINEAR_MOTOR = PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR, FLAG_MAX = PhysicsServer::G6DOF_JOINT_FLAG_MAX @@ -297,6 +305,8 @@ protected: float params_z[PARAM_MAX]; bool flags_z[FLAG_MAX]; + int precision; + virtual RID _configure_joint(PhysicsBody *body_a, PhysicsBody *body_b); static void _bind_methods(); @@ -319,6 +329,11 @@ public: void set_flag_z(Flag p_flag, bool p_enabled); bool get_flag_z(Flag p_flag) const; + void set_precision(int p_precision); + int get_precision() const { + return precision; + } + Generic6DOFJoint(); }; diff --git a/scene/3d/soft_body.cpp b/scene/3d/soft_body.cpp index 4ebc941ebc..835a874323 100644 --- a/scene/3d/soft_body.cpp +++ b/scene/3d/soft_body.cpp @@ -29,8 +29,12 @@ /*************************************************************************/ #include "soft_body.h" +#include "core/list.h" +#include "core/object.h" #include "core/os/os.h" +#include "core/rid.h" #include "scene/3d/collision_object.h" +#include "scene/3d/physics_body.h" #include "scene/3d/skeleton.h" #include "servers/physics_server.h" @@ -335,6 +339,7 @@ void SoftBody::_bind_methods() { ClassDB::bind_method(D_METHOD("set_parent_collision_ignore", "parent_collision_ignore"), &SoftBody::set_parent_collision_ignore); ClassDB::bind_method(D_METHOD("get_parent_collision_ignore"), &SoftBody::get_parent_collision_ignore); + ClassDB::bind_method(D_METHOD("get_collision_exceptions"), &SoftBody::get_collision_exceptions); ClassDB::bind_method(D_METHOD("add_collision_exception_with", "body"), &SoftBody::add_collision_exception_with); ClassDB::bind_method(D_METHOD("remove_collision_exception_with", "body"), &SoftBody::remove_collision_exception_with); @@ -396,7 +401,7 @@ String SoftBody::get_configuration_warning() const { } Transform t = get_transform(); - if ((ABS(t.basis.get_axis(0).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(1).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(0).length() - 1.0) > 0.05)) { + if ((ABS(t.basis.get_axis(0).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(1).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(2).length() - 1.0) > 0.05)) { if (!warning.empty()) warning += "\n\n"; @@ -547,6 +552,20 @@ PoolVector<SoftBody::PinnedPoint> SoftBody::get_pinned_points_indices() { return pinned_points; } +Array SoftBody::get_collision_exceptions() { + List<RID> exceptions; + PhysicsServer::get_singleton()->soft_body_get_collision_exceptions(physics_rid, &exceptions); + Array ret; + for (List<RID>::Element *E = exceptions.front(); E; E = E->next()) { + RID body = E->get(); + ObjectID instance_id = PhysicsServer::get_singleton()->body_get_object_instance_id(body); + Object *obj = ObjectDB::get_instance(instance_id); + PhysicsBody *physics_body = Object::cast_to<PhysicsBody>(obj); + ret.append(physics_body); + } + return ret; +} + void SoftBody::add_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); CollisionObject *collision_object = Object::cast_to<CollisionObject>(p_node); diff --git a/scene/3d/soft_body.h b/scene/3d/soft_body.h index ee3d8d87cf..b1e699e839 100644 --- a/scene/3d/soft_body.h +++ b/scene/3d/soft_body.h @@ -166,6 +166,7 @@ public: void set_drag_coefficient(real_t p_drag_coefficient); real_t get_drag_coefficient(); + Array get_collision_exceptions(); void add_collision_exception_with(Node *p_node); void remove_collision_exception_with(Node *p_node); diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index fcc908cdc6..dc09392713 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -800,15 +800,15 @@ void Spatial::_bind_methods() { //ADD_PROPERTY( PropertyInfo(Variant::TRANSFORM,"transform/global",PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR ), "set_global_transform", "get_global_transform") ; ADD_GROUP("Transform", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::TRANSFORM, "global_transform", PROPERTY_HINT_NONE, "", 0), "set_global_transform", "get_global_transform"); + ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "global_transform", PROPERTY_HINT_NONE, "", 0), "set_global_transform", "get_global_transform"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "translation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_translation", "get_translation"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "rotation_degrees", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_rotation_degrees", "get_rotation_degrees"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "rotation", PROPERTY_HINT_NONE, "", 0), "set_rotation", "get_rotation"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_scale", "get_scale"); ADD_GROUP("Matrix", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::TRANSFORM, "transform", PROPERTY_HINT_NONE, ""), "set_transform", "get_transform"); + ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "transform", PROPERTY_HINT_NONE, ""), "set_transform", "get_transform"); ADD_GROUP("Visibility", ""); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gizmo", PROPERTY_HINT_RESOURCE_TYPE, "SpatialGizmo", 0), "set_gizmo", "get_gizmo"); ADD_SIGNAL(MethodInfo("visibility_changed")); diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 774ee49af2..5bde224ce3 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -388,7 +388,7 @@ void Sprite3D::_draw() { return; Size2i s; - Rect2i src_rect; + Rect2 src_rect; if (region) { @@ -396,18 +396,18 @@ void Sprite3D::_draw() { src_rect = region_rect; } else { s = texture->get_size(); - s = s / Size2i(hframes, vframes); + s = s / Size2(hframes, vframes); src_rect.size = s; src_rect.position.x += (frame % hframes) * s.x; src_rect.position.y += (frame / hframes) * s.y; } - Point2i ofs = get_offset(); + Point2 ofs = get_offset(); if (is_centered()) ofs -= s / 2; - Rect2i dst_rect(ofs, s); + Rect2 dst_rect(ofs, s); Rect2 final_rect; Rect2 final_src_rect; @@ -461,6 +461,13 @@ void Sprite3D::_draw() { int axis = get_axis(); normal[axis] = 1.0; + Plane tangent; + if (axis == Vector3::AXIS_X) { + tangent = Plane(0, 0, -1, -1); + } else { + tangent = Plane(1, 0, 0, -1); + } + RID mat = SpatialMaterial::get_material_rid_for_2d(get_draw_flag(FLAG_SHADED), get_draw_flag(FLAG_TRANSPARENT), get_draw_flag(FLAG_DOUBLE_SIDED), get_alpha_cut_mode() == ALPHA_CUT_DISCARD, get_alpha_cut_mode() == ALPHA_CUT_OPAQUE_PREPASS); VS::get_singleton()->immediate_set_material(immediate, mat); @@ -487,6 +494,7 @@ void Sprite3D::_draw() { for (int i = 0; i < 4; i++) { VS::get_singleton()->immediate_normal(immediate, normal); + VS::get_singleton()->immediate_tangent(immediate, tangent); VS::get_singleton()->immediate_color(immediate, color); VS::get_singleton()->immediate_uv(immediate, uvs[i]); @@ -612,7 +620,7 @@ Rect2 Sprite3D::get_item_rect() const { s = s / Point2(hframes, vframes); } - Point2i ofs = get_offset(); + Point2 ofs = get_offset(); if (is_centered()) ofs -= s / 2; @@ -699,15 +707,15 @@ void AnimatedSprite3D::_draw() { return; Size2i s = tsize; - Rect2i src_rect; + Rect2 src_rect; src_rect.size = s; - Point2i ofs = get_offset(); + Point2 ofs = get_offset(); if (is_centered()) ofs -= s / 2; - Rect2i dst_rect(ofs, s); + Rect2 dst_rect(ofs, s); Rect2 final_rect; Rect2 final_src_rect; @@ -761,6 +769,13 @@ void AnimatedSprite3D::_draw() { int axis = get_axis(); normal[axis] = 1.0; + Plane tangent; + if (axis == Vector3::AXIS_X) { + tangent = Plane(0, 0, -1, -1); + } else { + tangent = Plane(1, 0, 0, -1); + } + RID mat = SpatialMaterial::get_material_rid_for_2d(get_draw_flag(FLAG_SHADED), get_draw_flag(FLAG_TRANSPARENT), get_draw_flag(FLAG_DOUBLE_SIDED), get_alpha_cut_mode() == ALPHA_CUT_DISCARD, get_alpha_cut_mode() == ALPHA_CUT_OPAQUE_PREPASS); VS::get_singleton()->immediate_set_material(immediate, mat); @@ -788,6 +803,7 @@ void AnimatedSprite3D::_draw() { for (int i = 0; i < 4; i++) { VS::get_singleton()->immediate_normal(immediate, normal); + VS::get_singleton()->immediate_tangent(immediate, tangent); VS::get_singleton()->immediate_color(immediate, color); VS::get_singleton()->immediate_uv(immediate, uvs[i]); @@ -1078,10 +1094,10 @@ void AnimatedSprite3D::_bind_methods() { ADD_SIGNAL(MethodInfo("frame_changed")); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "animation"), "set_animation", "get_animation"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "frame", PROPERTY_HINT_SPRITE_FRAME), "set_frame", "get_frame"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "playing"), "_set_playing", "_is_playing"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "frame", PROPERTY_HINT_SPRITE_FRAME), "set_frame", "get_frame"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing"), "_set_playing", "_is_playing"); } AnimatedSprite3D::AnimatedSprite3D() { diff --git a/scene/3d/visibility_notifier.cpp b/scene/3d/visibility_notifier.cpp index c69387d082..9a0832b27a 100644 --- a/scene/3d/visibility_notifier.cpp +++ b/scene/3d/visibility_notifier.cpp @@ -153,7 +153,7 @@ void VisibilityEnabler::_find_nodes(Node *p_node) { if (enabler[ENABLER_FREEZE_BODIES]) { RigidBody *rb = Object::cast_to<RigidBody>(p_node); - if (rb && ((rb->get_mode() == RigidBody::MODE_CHARACTER || (rb->get_mode() == RigidBody::MODE_RIGID && !rb->is_able_to_sleep())))) { + if (rb && ((rb->get_mode() == RigidBody::MODE_CHARACTER || rb->get_mode() == RigidBody::MODE_RIGID))) { add = true; meta = rb->get_mode(); diff --git a/scene/3d/voxel_light_baker.cpp b/scene/3d/voxel_light_baker.cpp index 68359eac52..0eccbbc8f9 100644 --- a/scene/3d/voxel_light_baker.cpp +++ b/scene/3d/voxel_light_baker.cpp @@ -261,7 +261,7 @@ static _FORCE_INLINE_ void get_uv_and_normal(const Vector3 &p_pos, const Vector3 void VoxelLightBaker::_plot_face(int p_idx, int p_level, int p_x, int p_y, int p_z, const Vector3 *p_vtx, const Vector3 *p_normal, const Vector2 *p_uv, const MaterialCache &p_material, const AABB &p_aabb) { if (p_level == cell_subdiv - 1) { - //plot the face by guessing it's albedo and emission value + //plot the face by guessing its albedo and emission value //find best axis to map to, for scanning values int closest_axis = 0; @@ -1587,10 +1587,10 @@ Vector3 VoxelLightBaker::_compute_pixel_light_at_pos(const Vector3 &p_pos, const Vector3 bitangent = tangent.cross(p_normal).normalized(); Basis normal_xform = Basis(tangent, bitangent, p_normal).transposed(); - const Vector3 *cone_dirs; - const float *cone_weights; - int cone_dir_count; - float cone_aperture; + const Vector3 *cone_dirs = NULL; + const float *cone_weights = NULL; + int cone_dir_count = 0; + float cone_aperture = 0; switch (bake_quality) { case BAKE_QUALITY_LOW: { @@ -1619,7 +1619,7 @@ Vector3 VoxelLightBaker::_compute_pixel_light_at_pos(const Vector3 &p_pos, const Vector3(-0.700629, -0.509037, 0.5), Vector3(0.267617, -0.823639, 0.5) }; - static const float weights[6] = { 0.25, 0.15, 0.15, 0.15, 0.15, 0.15 }; + static const float weights[6] = { 0.25f, 0.15f, 0.15f, 0.15f, 0.15f, 0.15f }; // cone_dirs = dirs; cone_dir_count = 6; @@ -1641,7 +1641,7 @@ Vector3 VoxelLightBaker::_compute_pixel_light_at_pos(const Vector3 &p_pos, const Vector3(0.19124006749743122, 0.39355745585016605, 0.8991883926788214), Vector3(0.19124006749743122, -0.39355745585016605, 0.8991883926788214), }; - static const float weights[10] = { 0.08571, 0.08571, 0.08571, 0.08571, 0.08571, 0.08571, 0.08571, 0.133333, 0.133333, 0.13333 }; + static const float weights[10] = { 0.08571f, 0.08571f, 0.08571f, 0.08571f, 0.08571f, 0.08571f, 0.08571f, 0.133333f, 0.133333f, 0.13333f }; cone_dirs = dirs; cone_dir_count = 10; cone_aperture = 0.404; // tan(angle) 45 degrees @@ -1875,7 +1875,7 @@ Error VoxelLightBaker::make_lightmap(const Transform &p_xform, Ref<Mesh> &p_mesh if (bake_mode == BAKE_MODE_RAY_TRACE) { //blur //gauss kernel, 7 step sigma 2 - static const float gauss_kernel[4] = { 0.214607, 0.189879, 0.131514, 0.071303 }; + static const float gauss_kernel[4] = { 0.214607f, 0.189879f, 0.131514f, 0.071303f }; //horizontal pass for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { diff --git a/scene/animation/animation_blend_space_2d.cpp b/scene/animation/animation_blend_space_2d.cpp index f5f899a6cd..866b85c4c7 100644 --- a/scene/animation/animation_blend_space_2d.cpp +++ b/scene/animation/animation_blend_space_2d.cpp @@ -33,9 +33,17 @@ void AnimationNodeBlendSpace2D::get_parameter_list(List<PropertyInfo> *r_list) const { r_list->push_back(PropertyInfo(Variant::VECTOR2, blend_position)); + r_list->push_back(PropertyInfo(Variant::INT, closest, PROPERTY_HINT_NONE, "", 0)); + r_list->push_back(PropertyInfo(Variant::REAL, length_internal, PROPERTY_HINT_NONE, "", 0)); } Variant AnimationNodeBlendSpace2D::get_parameter_default_value(const StringName &p_parameter) const { - return Vector2(); + if (p_parameter == closest) { + return -1; + } else if (p_parameter == length_internal) { + return 0; + } else { + return Vector2(); + } } void AnimationNodeBlendSpace2D::get_child_nodes(List<ChildNode> *r_child_nodes) { @@ -412,84 +420,124 @@ float AnimationNodeBlendSpace2D::process(float p_time, bool p_seek) { _update_triangles(); Vector2 blend_pos = get_parameter(blend_position); + int closest = get_parameter(this->closest); + float length_internal = get_parameter(this->length_internal); + float mind = 0; //time of min distance point - if (triangles.size() == 0) - return 0; + if (blend_mode == BLEND_MODE_INTERPOLATED) { - Vector2 best_point; - bool first = true; - int blend_triangle = -1; - float blend_weights[3] = { 0, 0, 0 }; + if (triangles.size() == 0) + return 0; - for (int i = 0; i < triangles.size(); i++) { - Vector2 points[3]; - for (int j = 0; j < 3; j++) { - points[j] = get_blend_point_position(get_triangle_point(i, j)); - } + Vector2 best_point; + bool first = true; + int blend_triangle = -1; + float blend_weights[3] = { 0, 0, 0 }; - if (Geometry::is_point_in_triangle(blend_pos, points[0], points[1], points[2])) { + for (int i = 0; i < triangles.size(); i++) { + Vector2 points[3]; + for (int j = 0; j < 3; j++) { + points[j] = get_blend_point_position(get_triangle_point(i, j)); + } - blend_triangle = i; - _blend_triangle(blend_pos, points, blend_weights); - break; - } + if (Geometry::is_point_in_triangle(blend_pos, points[0], points[1], points[2])) { - for (int j = 0; j < 3; j++) { - Vector2 s[2] = { - points[j], - points[(j + 1) % 3] - }; - Vector2 closest = Geometry::get_closest_point_to_segment_2d(blend_pos, s); - if (first || closest.distance_to(blend_pos) < best_point.distance_to(blend_pos)) { - best_point = closest; blend_triangle = i; - first = false; - float d = s[0].distance_to(s[1]); - if (d == 0.0) { - blend_weights[j] = 1.0; - blend_weights[(j + 1) % 3] = 0.0; - blend_weights[(j + 2) % 3] = 0.0; - } else { - float c = s[0].distance_to(closest) / d; - - blend_weights[j] = 1.0 - c; - blend_weights[(j + 1) % 3] = c; - blend_weights[(j + 2) % 3] = 0.0; + _blend_triangle(blend_pos, points, blend_weights); + break; + } + + for (int j = 0; j < 3; j++) { + Vector2 s[2] = { + points[j], + points[(j + 1) % 3] + }; + Vector2 closest = Geometry::get_closest_point_to_segment_2d(blend_pos, s); + if (first || closest.distance_to(blend_pos) < best_point.distance_to(blend_pos)) { + best_point = closest; + blend_triangle = i; + first = false; + float d = s[0].distance_to(s[1]); + if (d == 0.0) { + blend_weights[j] = 1.0; + blend_weights[(j + 1) % 3] = 0.0; + blend_weights[(j + 2) % 3] = 0.0; + } else { + float c = s[0].distance_to(closest) / d; + + blend_weights[j] = 1.0 - c; + blend_weights[(j + 1) % 3] = c; + blend_weights[(j + 2) % 3] = 0.0; + } } } } - } - ERR_FAIL_COND_V(blend_triangle == -1, 0); //should never reach here + ERR_FAIL_COND_V(blend_triangle == -1, 0); //should never reach here - int triangle_points[3]; - for (int j = 0; j < 3; j++) { - triangle_points[j] = get_triangle_point(blend_triangle, j); - } + int triangle_points[3]; + for (int j = 0; j < 3; j++) { + triangle_points[j] = get_triangle_point(blend_triangle, j); + } - first = true; - float mind; - for (int i = 0; i < blend_points_used; i++) { + first = true; - bool found = false; - for (int j = 0; j < 3; j++) { - if (i == triangle_points[j]) { - //blend with the given weight - float t = blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, blend_weights[j], FILTER_IGNORE, false); - if (first || t < mind) { - mind = t; - first = false; + for (int i = 0; i < blend_points_used; i++) { + + bool found = false; + for (int j = 0; j < 3; j++) { + if (i == triangle_points[j]) { + //blend with the given weight + float t = blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, blend_weights[j], FILTER_IGNORE, false); + if (first || t < mind) { + mind = t; + first = false; + } + found = true; + break; } - found = true; - break; + } + + if (!found) { + //ignore + blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, 0, FILTER_IGNORE, false); + } + } + } else { + + int new_closest = -1; + float new_closest_dist = 1e20; + + for (int i = 0; i < blend_points_used; i++) { + + float d = blend_points[i].position.distance_squared_to(blend_pos); + if (d < new_closest_dist) { + + new_closest = i; + new_closest_dist = d; } } - if (!found) { - //ignore - blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, 0, FILTER_IGNORE, false); + if (new_closest != closest) { + + float from = 0; + if (blend_mode == BLEND_MODE_DISCRETE_CARRY && closest != -1) { + //see how much animation remains + from = blend_node(blend_points[closest].name, blend_points[closest].node, p_time, true, 0.0, FILTER_IGNORE, false) - length_internal; + } + + mind = blend_node(blend_points[new_closest].name, blend_points[new_closest].node, from, true, 1.0, FILTER_IGNORE, false) + from; + length_internal = from + mind; + + closest = new_closest; + + } else { + mind = blend_node(blend_points[closest].name, blend_points[closest].node, p_time, p_seek, 1.0, FILTER_IGNORE, false); } } + + set_parameter(this->closest, closest); + set_parameter(this->length_internal, length_internal); return mind; } @@ -527,6 +575,14 @@ void AnimationNodeBlendSpace2D::_tree_changed() { emit_signal("tree_changed"); } +void AnimationNodeBlendSpace2D::set_blend_mode(BlendMode p_blend_mode) { + blend_mode = p_blend_mode; +} + +AnimationNodeBlendSpace2D::BlendMode AnimationNodeBlendSpace2D::get_blend_mode() const { + return blend_mode; +} + void AnimationNodeBlendSpace2D::_bind_methods() { ClassDB::bind_method(D_METHOD("add_blend_point", "node", "pos", "at_index"), &AnimationNodeBlendSpace2D::add_blend_point, DEFVAL(-1)); @@ -565,6 +621,9 @@ void AnimationNodeBlendSpace2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_auto_triangles", "enable"), &AnimationNodeBlendSpace2D::set_auto_triangles); ClassDB::bind_method(D_METHOD("get_auto_triangles"), &AnimationNodeBlendSpace2D::get_auto_triangles); + ClassDB::bind_method(D_METHOD("set_blend_mode", "mode"), &AnimationNodeBlendSpace2D::set_blend_mode); + ClassDB::bind_method(D_METHOD("get_blend_mode"), &AnimationNodeBlendSpace2D::get_blend_mode); + ClassDB::bind_method(D_METHOD("_tree_changed"), &AnimationNodeBlendSpace2D::_tree_changed); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "auto_triangles", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_auto_triangles", "get_auto_triangles"); @@ -581,6 +640,11 @@ void AnimationNodeBlendSpace2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "snap", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_snap", "get_snap"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "x_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_x_label", "get_x_label"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "y_label", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_y_label", "get_y_label"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_mode", PROPERTY_HINT_ENUM, "Interpolated,Discrete,Carry", PROPERTY_USAGE_NOEDITOR), "set_blend_mode", "get_blend_mode"); + + BIND_ENUM_CONSTANT(BLEND_MODE_INTERPOLATED); + BIND_ENUM_CONSTANT(BLEND_MODE_DISCRETE); + BIND_ENUM_CONSTANT(BLEND_MODE_DISCRETE_CARRY); } AnimationNodeBlendSpace2D::AnimationNodeBlendSpace2D() { @@ -597,6 +661,9 @@ AnimationNodeBlendSpace2D::AnimationNodeBlendSpace2D() { y_label = "y"; trianges_dirty = false; blend_position = "blend_position"; + closest = "closest"; + length_internal = "length_internal"; + blend_mode = BLEND_MODE_INTERPOLATED; } AnimationNodeBlendSpace2D::~AnimationNodeBlendSpace2D() { diff --git a/scene/animation/animation_blend_space_2d.h b/scene/animation/animation_blend_space_2d.h index 2c684687de..60671f1816 100644 --- a/scene/animation/animation_blend_space_2d.h +++ b/scene/animation/animation_blend_space_2d.h @@ -35,7 +35,14 @@ class AnimationNodeBlendSpace2D : public AnimationRootNode { GDCLASS(AnimationNodeBlendSpace2D, AnimationRootNode) +public: + enum BlendMode { + BLEND_MODE_INTERPOLATED, + BLEND_MODE_DISCRETE, + BLEND_MODE_DISCRETE_CARRY, + }; +protected: enum { MAX_BLEND_POINTS = 64 }; @@ -56,11 +63,14 @@ class AnimationNodeBlendSpace2D : public AnimationRootNode { Vector<BlendTriangle> triangles; StringName blend_position; + StringName closest; + StringName length_internal; Vector2 max_space; Vector2 min_space; Vector2 snap; String x_label; String y_label; + BlendMode blend_mode; void _add_blend_point(int p_index, const Ref<AnimationRootNode> &p_node); void _set_triangles(const Vector<int> &p_triangles); @@ -122,10 +132,15 @@ public: void set_auto_triangles(bool p_enable); bool get_auto_triangles() const; + void set_blend_mode(BlendMode p_blend_mode); + BlendMode get_blend_mode() const; + virtual Ref<AnimationNode> get_child_by_name(const StringName &p_name); AnimationNodeBlendSpace2D(); ~AnimationNodeBlendSpace2D(); }; +VARIANT_ENUM_CAST(AnimationNodeBlendSpace2D::BlendMode) + #endif // ANIMATION_BLEND_SPACE_2D_H diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp index b85d4e541e..5b413737a9 100644 --- a/scene/animation/animation_blend_tree.cpp +++ b/scene/animation/animation_blend_tree.cpp @@ -40,12 +40,11 @@ StringName AnimationNodeAnimation::get_animation() const { return animation; } -float AnimationNodeAnimation::get_playback_time() const { - return time; -} - Vector<String> (*AnimationNodeAnimation::get_editable_animation_list)() = NULL; +void AnimationNodeAnimation::get_parameter_list(List<PropertyInfo> *r_list) const { + r_list->push_back(PropertyInfo(Variant::REAL, time, PROPERTY_HINT_NONE, "", 0)); +} void AnimationNodeAnimation::_validate_property(PropertyInfo &property) const { if (property.name == "animation" && get_editable_animation_list) { @@ -70,6 +69,8 @@ float AnimationNodeAnimation::process(float p_time, bool p_seek) { AnimationPlayer *ap = state->player; ERR_FAIL_COND_V(!ap, 0); + float time = get_parameter(this->time); + if (!ap->has_animation(animation)) { AnimationNodeBlendTree *tree = Object::cast_to<AnimationNodeBlendTree>(parent); @@ -86,6 +87,8 @@ float AnimationNodeAnimation::process(float p_time, bool p_seek) { Ref<Animation> anim = ap->get_animation(animation); + float step; + if (p_seek) { time = p_time; step = 0; @@ -109,6 +112,8 @@ float AnimationNodeAnimation::process(float p_time, bool p_seek) { blend_animation(animation, time, step, p_seek, 1.0); + set_parameter(this->time, time); + return anim_size - time; } @@ -120,16 +125,13 @@ void AnimationNodeAnimation::_bind_methods() { ClassDB::bind_method(D_METHOD("set_animation", "name"), &AnimationNodeAnimation::set_animation); ClassDB::bind_method(D_METHOD("get_animation"), &AnimationNodeAnimation::get_animation); - ClassDB::bind_method(D_METHOD("get_playback_time"), &AnimationNodeAnimation::get_playback_time); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "animation"), "set_animation", "get_animation"); } AnimationNodeAnimation::AnimationNodeAnimation() { last_version = 0; skip = false; - time = 0; - step = 0; + time = "time"; } //////////////////////////////////////////////////////// @@ -266,7 +268,6 @@ float AnimationNodeOneShot::process(float p_time, bool p_seek) { if (do_start) { remaining = os_rem; - do_start = false; } if (!p_seek) { @@ -699,7 +700,7 @@ String AnimationNodeTransition::get_input_caption(int p_input) const { if (tree.is_valid() && current >= 0) { prev = current; - prev_xfading = xfade; + prev_xfading = xfade; time = 0; current = p_current; switched = true; @@ -770,8 +771,6 @@ float AnimationNodeTransition::process(float p_time, bool p_seek) { rem = blend_input(current, p_time, p_seek, 1.0 - blend, FILTER_IGNORE, false); } - switched = false; - if (p_seek) { // don't seek prev animation blend_input(prev, 0, false, blend, FILTER_IGNORE, false); time = p_time; diff --git a/scene/animation/animation_blend_tree.h b/scene/animation/animation_blend_tree.h index 4ca11e464b..5adb7fd71a 100644 --- a/scene/animation/animation_blend_tree.h +++ b/scene/animation/animation_blend_tree.h @@ -38,10 +38,9 @@ class AnimationNodeAnimation : public AnimationRootNode { GDCLASS(AnimationNodeAnimation, AnimationRootNode); StringName animation; + StringName time; uint64_t last_version; - float time; - float step; bool skip; protected: @@ -50,6 +49,8 @@ protected: static void _bind_methods(); public: + void get_parameter_list(List<PropertyInfo> *r_list) const; + static Vector<String> (*get_editable_animation_list)(); virtual String get_caption() const; @@ -58,8 +59,6 @@ public: void set_animation(const StringName &p_name); StringName get_animation() const; - float get_playback_time() const; - AnimationNodeAnimation(); }; diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp index 5923ad7657..a7af3f687b 100644 --- a/scene/animation/animation_node_state_machine.cpp +++ b/scene/animation/animation_node_state_machine.cpp @@ -345,7 +345,6 @@ float AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *sm, len_current = sm->blend_node(current, sm->states[current].node, 0, true, 1.0, AnimationNode::FILTER_IGNORE, false); pos_current = 0; loops_current = 0; - play_start = false; } if (!sm->states.has(current)) { diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 102f05a146..7f9953ab43 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -1120,6 +1120,15 @@ void AnimationPlayer::queue(const StringName &p_name) { queued.push_back(p_name); } +PoolVector<String> AnimationPlayer::get_queue() { + PoolVector<String> ret; + for (List<StringName>::Element *E = queued.front(); E; E = E->next()) { + ret.push_back(E->get()); + } + + return ret; +} + void AnimationPlayer::clear_queue() { queued.clear(); } @@ -1348,6 +1357,9 @@ void AnimationPlayer::_animation_changed() { clear_caches(); emit_signal("caches_cleared"); + if (is_playing()) { + playback.seeked = true; //need to restart stuff, like audio + } } void AnimationPlayer::_stop_playing_caches() { @@ -1600,6 +1612,7 @@ void AnimationPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_assigned_animation", "anim"), &AnimationPlayer::set_assigned_animation); ClassDB::bind_method(D_METHOD("get_assigned_animation"), &AnimationPlayer::get_assigned_animation); ClassDB::bind_method(D_METHOD("queue", "name"), &AnimationPlayer::queue); + ClassDB::bind_method(D_METHOD("get_queue"), &AnimationPlayer::get_queue); ClassDB::bind_method(D_METHOD("clear_queue"), &AnimationPlayer::clear_queue); ClassDB::bind_method(D_METHOD("set_active", "active"), &AnimationPlayer::set_active); diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index f50b2454ec..b3bf8b1e22 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -312,6 +312,7 @@ public: void play(const StringName &p_name = StringName(), float p_custom_blend = -1, float p_custom_scale = 1.0, bool p_from_end = false); void play_backwards(const StringName &p_name = StringName(), float p_custom_blend = -1); void queue(const StringName &p_name); + PoolVector<String> get_queue(); void clear_queue(); void stop(bool p_reset = true); bool is_playing() const; diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index eb00f91bb3..2c8cbbdbd1 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -37,9 +37,20 @@ #include "servers/audio/audio_stream.h" void AnimationNode::get_parameter_list(List<PropertyInfo> *r_list) const { + if (get_script_instance()) { + Array parameters = get_script_instance()->call("get_parameter_list"); + for (int i = 0; i < parameters.size(); i++) { + Dictionary d = parameters[i]; + ERR_CONTINUE(d.empty()); + r_list->push_back(PropertyInfo::from_dict(d)); + } + } } Variant AnimationNode::get_parameter_default_value(const StringName &p_parameter) const { + if (get_script_instance()) { + return get_script_instance()->call("get_parameter_default_value"); + } return Variant(); } @@ -62,6 +73,18 @@ Variant AnimationNode::get_parameter(const StringName &p_name) const { } void AnimationNode::get_child_nodes(List<ChildNode> *r_child_nodes) { + + if (get_script_instance()) { + Dictionary cn = get_script_instance()->call("get_child_nodes"); + List<Variant> keys; + cn.get_key_list(&keys); + for (List<Variant>::Element *E = keys.front(); E; E = E->next()) { + ChildNode child; + child.name = E->get(); + child.node = cn[E->get()]; + r_child_nodes->push_back(child); + } + } } void AnimationNode::blend_animation(const StringName &p_animation, float p_time, float p_delta, bool p_seeked, float p_blend) { @@ -373,6 +396,9 @@ void AnimationNode::_validate_property(PropertyInfo &property) const { } Ref<AnimationNode> AnimationNode::get_child_by_name(const StringName &p_name) { + if (get_script_instance()) { + return get_script_instance()->call("get_child_by_name"); + } return Ref<AnimationNode>(); } @@ -403,6 +429,14 @@ void AnimationNode::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_filter_enabled", "is_filter_enabled"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "filters", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_filters", "_get_filters"); + BIND_VMETHOD(MethodInfo(Variant::DICTIONARY, "get_child_nodes")); + BIND_VMETHOD(MethodInfo(Variant::ARRAY, "get_parameter_list")); + BIND_VMETHOD(MethodInfo(Variant::OBJECT, "get_child_by_name", PropertyInfo(Variant::STRING, "name"))); + { + MethodInfo mi = MethodInfo(Variant::NIL, "get_parameter_default_value", PropertyInfo(Variant::STRING, "name")); + mi.return_val.usage = PROPERTY_USAGE_NIL_IS_VARIANT; + BIND_VMETHOD(mi); + } BIND_VMETHOD(MethodInfo("process", PropertyInfo(Variant::REAL, "time"), PropertyInfo(Variant::BOOL, "seek"))); BIND_VMETHOD(MethodInfo(Variant::STRING, "get_caption")); BIND_VMETHOD(MethodInfo(Variant::STRING, "has_filter")); diff --git a/scene/animation/skeleton_ik.cpp b/scene/animation/skeleton_ik.cpp index 83f45afac8..3119e29586 100644 --- a/scene/animation/skeleton_ik.cpp +++ b/scene/animation/skeleton_ik.cpp @@ -280,7 +280,7 @@ void FabrikInverseKinematic::make_goal(Task *p_task, const Transform &p_inverse_ } } -void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool p_use_magnet, const Vector3 &p_magnet_position) { +void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool override_tip_basis, bool p_use_magnet, const Vector3 &p_magnet_position) { if (blending_delta <= 0.01f) { return; // Skip solving @@ -314,7 +314,10 @@ void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool p_u } } else { // Set target orientation to tip - new_bone_pose.basis = p_task->chain.tips[0].end_effector->goal_transform.basis; + if (override_tip_basis) + new_bone_pose.basis = p_task->chain.tips[0].end_effector->goal_transform.basis; + else + new_bone_pose.basis = new_bone_pose.basis * p_task->chain.tips[0].end_effector->goal_transform.basis; } p_task->skeleton->set_bone_global_pose(ci->bone, new_bone_pose); @@ -366,6 +369,9 @@ void SkeletonIK::_bind_methods() { ClassDB::bind_method(D_METHOD("set_target_node", "node"), &SkeletonIK::set_target_node); ClassDB::bind_method(D_METHOD("get_target_node"), &SkeletonIK::get_target_node); + ClassDB::bind_method(D_METHOD("set_override_tip_basis", "override"), &SkeletonIK::set_override_tip_basis); + ClassDB::bind_method(D_METHOD("is_override_tip_basis"), &SkeletonIK::is_override_tip_basis); + ClassDB::bind_method(D_METHOD("set_use_magnet", "use"), &SkeletonIK::set_use_magnet); ClassDB::bind_method(D_METHOD("is_using_magnet"), &SkeletonIK::is_using_magnet); @@ -388,6 +394,7 @@ void SkeletonIK::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::STRING, "tip_bone"), "set_tip_bone", "get_tip_bone"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "interpolation", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_interpolation", "get_interpolation"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "target"), "set_target_transform", "get_target_transform"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "override_tip_basis"), "set_override_tip_basis", "is_override_tip_basis"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_magnet"), "set_use_magnet", "is_using_magnet"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "magnet"), "set_magnet_position", "get_magnet_position"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "target_node"), "set_target_node", "get_target_node"); @@ -418,6 +425,7 @@ void SkeletonIK::_notification(int p_what) { SkeletonIK::SkeletonIK() : Node(), interpolation(1), + override_tip_basis(true), use_magnet(false), min_distance(0.01), max_iterations(10), @@ -478,6 +486,14 @@ NodePath SkeletonIK::get_target_node() { return target_node_path_override; } +void SkeletonIK::set_override_tip_basis(bool p_override) { + override_tip_basis = p_override; +} + +bool SkeletonIK::is_override_tip_basis() const { + return override_tip_basis; +} + void SkeletonIK::set_use_magnet(bool p_use) { use_magnet = p_use; } @@ -555,7 +571,7 @@ void SkeletonIK::reload_goal() { void SkeletonIK::_solve_chain() { if (!task) return; - FabrikInverseKinematic::solve(task, interpolation, use_magnet, magnet_position); + FabrikInverseKinematic::solve(task, interpolation, override_tip_basis, use_magnet, magnet_position); } #endif // _3D_DISABLED diff --git a/scene/animation/skeleton_ik.h b/scene/animation/skeleton_ik.h index 202d6959bb..b9628c479c 100644 --- a/scene/animation/skeleton_ik.h +++ b/scene/animation/skeleton_ik.h @@ -138,7 +138,7 @@ public: // The goal of chain should be always in local space static void set_goal(Task *p_task, const Transform &p_goal); static void make_goal(Task *p_task, const Transform &p_inverse_transf, real_t blending_delta); - static void solve(Task *p_task, real_t blending_delta, bool p_use_magnet, const Vector3 &p_magnet_position); + static void solve(Task *p_task, real_t blending_delta, bool override_tip_basis, bool p_use_magnet, const Vector3 &p_magnet_position); }; class SkeletonIK : public Node { @@ -149,6 +149,7 @@ class SkeletonIK : public Node { real_t interpolation; Transform target; NodePath target_node_path_override; + bool override_tip_basis; bool use_magnet; Vector3 magnet_position; @@ -185,6 +186,9 @@ public: void set_target_node(const NodePath &p_node); NodePath get_target_node(); + void set_override_tip_basis(bool p_override); + bool is_override_tip_basis() const; + void set_use_magnet(bool p_use); bool is_using_magnet() const; diff --git a/scene/audio/audio_player.cpp b/scene/audio/audio_player.cpp index 64af7efb16..1d9d048fe1 100644 --- a/scene/audio/audio_player.cpp +++ b/scene/audio/audio_player.cpp @@ -219,6 +219,7 @@ void AudioStreamPlayer::seek(float p_seconds) { void AudioStreamPlayer::stop() { if (stream_playback.is_valid()) { + stream_playback->stop(); active = false; set_process_internal(false); } diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index 71fb97c2c6..1ac19774f7 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -368,7 +368,7 @@ BaseButton::DrawMode BaseButton::get_draw_mode() const { return DRAW_DISABLED; }; - if (status.press_attempt == false && status.hovering) { + if (!status.press_attempt && status.hovering) { if (status.pressed) return DRAW_HOVER_PRESSED; @@ -406,6 +406,16 @@ bool BaseButton::is_toggle_mode() const { return toggle_mode; } +void BaseButton::set_shortcut_in_tooltip(bool p_on) { + + shortcut_in_tooltip = p_on; +} + +bool BaseButton::is_shortcut_in_tooltip_enabled() const { + + return shortcut_in_tooltip; +} + void BaseButton::set_action_mode(ActionMode p_mode) { action_mode = p_mode; @@ -471,7 +481,7 @@ void BaseButton::_unhandled_input(Ref<InputEvent> p_event) { String BaseButton::get_tooltip(const Point2 &p_pos) const { String tooltip = Control::get_tooltip(p_pos); - if (shortcut.is_valid() && shortcut->is_valid()) { + if (shortcut_in_tooltip && shortcut.is_valid() && shortcut->is_valid()) { String text = shortcut->get_name() + " (" + shortcut->get_as_text() + ")"; if (shortcut->get_name().nocasecmp_to(tooltip) != 0) { text += "\n" + tooltip; @@ -510,6 +520,8 @@ void BaseButton::_bind_methods() { ClassDB::bind_method(D_METHOD("is_hovered"), &BaseButton::is_hovered); ClassDB::bind_method(D_METHOD("set_toggle_mode", "enabled"), &BaseButton::set_toggle_mode); ClassDB::bind_method(D_METHOD("is_toggle_mode"), &BaseButton::is_toggle_mode); + ClassDB::bind_method(D_METHOD("set_shortcut_in_tooltip", "enabled"), &BaseButton::set_shortcut_in_tooltip); + ClassDB::bind_method(D_METHOD("is_shortcut_in_tooltip_enabled"), &BaseButton::is_shortcut_in_tooltip_enabled); ClassDB::bind_method(D_METHOD("set_disabled", "disabled"), &BaseButton::set_disabled); ClassDB::bind_method(D_METHOD("is_disabled"), &BaseButton::is_disabled); ClassDB::bind_method(D_METHOD("set_action_mode", "mode"), &BaseButton::set_action_mode); @@ -533,11 +545,12 @@ void BaseButton::_bind_methods() { ADD_SIGNAL(MethodInfo("button_up")); ADD_SIGNAL(MethodInfo("button_down")); ADD_SIGNAL(MethodInfo("toggled", PropertyInfo(Variant::BOOL, "button_pressed"))); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "toggle_mode"), "set_toggle_mode", "is_toggle_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "pressed"), "set_pressed", "is_pressed"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "action_mode", PROPERTY_HINT_ENUM, "Button Press,Button Release"), "set_action_mode", "get_action_mode"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "button_mask", PROPERTY_HINT_FLAGS, "Mouse Left, Mouse Right, Mouse Middle"), "set_button_mask", "get_button_mask"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_in_tooltip"), "set_shortcut_in_tooltip", "is_shortcut_in_tooltip_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "pressed"), "set_pressed", "is_pressed"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "action_mode", PROPERTY_HINT_ENUM, "Button Press,Button Release"), "set_action_mode", "get_action_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "button_mask", PROPERTY_HINT_FLAGS, "Mouse Left, Mouse Right, Mouse Middle"), "set_button_mask", "get_button_mask"); ADD_PROPERTY(PropertyInfo(Variant::INT, "enabled_focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_enabled_focus_mode", "get_enabled_focus_mode"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shortcut", PROPERTY_HINT_RESOURCE_TYPE, "ShortCut"), "set_shortcut", "get_shortcut"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "group", PROPERTY_HINT_RESOURCE_TYPE, "ButtonGroup"), "set_button_group", "get_button_group"); @@ -555,6 +568,7 @@ void BaseButton::_bind_methods() { BaseButton::BaseButton() { toggle_mode = false; + shortcut_in_tooltip = true; status.pressed = false; status.press_attempt = false; status.hovering = false; diff --git a/scene/gui/base_button.h b/scene/gui/base_button.h index 176d9fc213..a131e719ad 100644 --- a/scene/gui/base_button.h +++ b/scene/gui/base_button.h @@ -51,6 +51,7 @@ public: private: int button_mask; bool toggle_mode; + bool shortcut_in_tooltip; FocusMode enabled_focus_mode; Ref<ShortCut> shortcut; @@ -100,6 +101,9 @@ public: void set_toggle_mode(bool p_on); bool is_toggle_mode() const; + void set_shortcut_in_tooltip(bool p_on); + bool is_shortcut_in_tooltip_enabled() const; + void set_disabled(bool p_disabled); bool is_disabled() const; diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp index 2d17fb1391..621153b6de 100644 --- a/scene/gui/button.cpp +++ b/scene/gui/button.cpp @@ -274,10 +274,10 @@ void Button::_bind_methods() { BIND_ENUM_CONSTANT(ALIGN_CENTER); BIND_ENUM_CONSTANT(ALIGN_RIGHT); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_button_icon", "get_button_icon"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_button_icon", "get_button_icon"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flat"), "set_flat", "is_flat"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "get_clip_text"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "get_clip_text"); ADD_PROPERTY(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_text_align", "get_text_align"); } diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 03eee9c6d8..19c6cde111 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -159,7 +159,10 @@ void ColorPicker::_html_entered(const String &p_html) { if (updating) return; + float last_alpha = color.a; color = Color::html(p_html); + if (!is_editing_alpha()) + color.a = last_alpha; if (!is_inside_tree()) return; @@ -250,6 +253,24 @@ void ColorPicker::add_preset(const Color &p_color) { bt_add_preset->hide(); } +void ColorPicker::erase_preset(const Color &p_color) { + + if (presets.find(p_color)) { + presets.erase(presets.find(p_color)); + preset->update(); + } +} + +PoolColorArray ColorPicker::get_presets() const { + + PoolColorArray arr; + arr.resize(presets.size()); + for (int i = 0; i < presets.size(); i++) { + arr.set(i, presets[i]); + } + return arr; +} + void ColorPicker::set_raw_mode(bool p_enabled) { if (raw_mode_enabled == p_enabled) @@ -443,7 +464,9 @@ void ColorPicker::_preset_input(const Ref<InputEvent> &p_event) { set_pick_color(presets[index]); } else if (bev->is_pressed() && bev->get_button_index() == BUTTON_RIGHT) { int index = bev->get_position().x / (preset->get_size().x / presets.size()); - presets.erase(presets[index]); + Color clicked_preset = presets[index]; + presets.erase(clicked_preset); + emit_signal("preset_removed", clicked_preset); preset->update(); bt_add_preset->show(); } @@ -498,6 +521,7 @@ void ColorPicker::_screen_input(const Ref<InputEvent> &p_event) { void ColorPicker::_add_preset_pressed() { add_preset(color); + emit_signal("preset_added", color); } void ColorPicker::_screen_pick_pressed() { @@ -550,6 +574,8 @@ void ColorPicker::_bind_methods() { ClassDB::bind_method(D_METHOD("set_edit_alpha", "show"), &ColorPicker::set_edit_alpha); ClassDB::bind_method(D_METHOD("is_editing_alpha"), &ColorPicker::is_editing_alpha); ClassDB::bind_method(D_METHOD("add_preset", "color"), &ColorPicker::add_preset); + ClassDB::bind_method(D_METHOD("erase_preset", "color"), &ColorPicker::erase_preset); + ClassDB::bind_method(D_METHOD("get_presets"), &ColorPicker::get_presets); ClassDB::bind_method(D_METHOD("_value_changed"), &ColorPicker::_value_changed); ClassDB::bind_method(D_METHOD("_html_entered"), &ColorPicker::_html_entered); ClassDB::bind_method(D_METHOD("_text_type_toggled"), &ColorPicker::_text_type_toggled); @@ -572,6 +598,8 @@ void ColorPicker::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "deferred_mode"), "set_deferred_mode", "is_deferred_mode"); ADD_SIGNAL(MethodInfo("color_changed", PropertyInfo(Variant::COLOR, "color"))); + ADD_SIGNAL(MethodInfo("preset_added", PropertyInfo(Variant::COLOR, "color"))); + ADD_SIGNAL(MethodInfo("preset_removed", PropertyInfo(Variant::COLOR, "color"))); } ColorPicker::ColorPicker() : diff --git a/scene/gui/color_picker.h b/scene/gui/color_picker.h index 0166da7118..e32c830434 100644 --- a/scene/gui/color_picker.h +++ b/scene/gui/color_picker.h @@ -105,6 +105,9 @@ public: Color get_pick_color() const; void add_preset(const Color &p_color); + void erase_preset(const Color &p_color); + PoolColorArray get_presets() const; + void set_raw_mode(bool p_enabled); bool is_raw_mode() const; diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index dc18895298..79e1d35b94 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -328,13 +328,15 @@ bool Control::_get(const StringName &p_name, Variant &r_ret) const { } void Control::_get_property_list(List<PropertyInfo> *p_list) const { - Ref<Theme> theme; + Ref<Theme> theme = Theme::get_default(); + /* Using the default theme since the properties below are meant for editor only if (data.theme.is_valid()) { theme = data.theme; } else { theme = Theme::get_default(); - } + + }*/ { List<StringName> names; @@ -769,7 +771,7 @@ void Control::force_drag(const Variant &p_data, Control *p_control) { void Control::set_drag_preview(Control *p_control) { ERR_FAIL_COND(!is_inside_tree()); - ERR_FAIL_COND(get_viewport()->gui_is_dragging()); + ERR_FAIL_COND(!get_viewport()->gui_is_dragging()); get_viewport()->_gui_set_drag_preview(this, p_control); } @@ -1079,7 +1081,7 @@ bool Control::has_constant_override(const StringName &p_name) const { bool Control::has_icon(const StringName &p_name, const StringName &p_type) const { if (p_type == StringName() || p_type == "") { - if (has_icon_override(p_name) == true) + if (has_icon_override(p_name)) return true; } @@ -1113,7 +1115,7 @@ bool Control::has_icon(const StringName &p_name, const StringName &p_type) const bool Control::has_shader(const StringName &p_name, const StringName &p_type) const { if (p_type == StringName() || p_type == "") { - if (has_shader_override(p_name) == true) + if (has_shader_override(p_name)) return true; } @@ -1146,7 +1148,7 @@ bool Control::has_shader(const StringName &p_name, const StringName &p_type) con bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) const { if (p_type == StringName() || p_type == "") { - if (has_stylebox_override(p_name) == true) + if (has_stylebox_override(p_name)) return true; } @@ -1179,7 +1181,7 @@ bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) c bool Control::has_font(const StringName &p_name, const StringName &p_type) const { if (p_type == StringName() || p_type == "") { - if (has_font_override(p_name) == true) + if (has_font_override(p_name)) return true; } @@ -1213,7 +1215,7 @@ bool Control::has_font(const StringName &p_name, const StringName &p_type) const bool Control::has_color(const StringName &p_name, const StringName &p_type) const { if (p_type == StringName() || p_type == "") { - if (has_color_override(p_name) == true) + if (has_color_override(p_name)) return true; } @@ -1247,7 +1249,7 @@ bool Control::has_color(const StringName &p_name, const StringName &p_type) cons bool Control::has_constant(const StringName &p_name, const StringName &p_type) const { if (p_type == StringName() || p_type == "") { - if (has_constant_override(p_name) == true) + if (has_constant_override(p_name)) return true; } @@ -2235,13 +2237,13 @@ String Control::_get_tooltip() const { void Control::set_focus_neighbour(Margin p_margin, const NodePath &p_neighbour) { - ERR_FAIL_INDEX(p_margin, 4); + ERR_FAIL_INDEX((int)p_margin, 4); data.focus_neighbour[p_margin] = p_neighbour; } NodePath Control::get_focus_neighbour(Margin p_margin) const { - ERR_FAIL_INDEX_V(p_margin, 4, NodePath()); + ERR_FAIL_INDEX_V((int)p_margin, 4, NodePath()); return data.focus_neighbour[p_margin]; } @@ -2844,36 +2846,36 @@ void Control::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anchor_bottom", PROPERTY_HINT_RANGE, "0,1,0.01"), "_set_anchor", "get_anchor", MARGIN_BOTTOM); ADD_GROUP("Margin", "margin_"); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "margin_left", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_LEFT); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "margin_top", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_TOP); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "margin_right", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_RIGHT); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "margin_bottom", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "margin_left", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "margin_top", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "margin_right", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "margin_bottom", PROPERTY_HINT_RANGE, "-4096,4096"), "set_margin", "get_margin", MARGIN_BOTTOM); ADD_GROUP("Grow Direction", "grow_"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "grow_horizontal", PROPERTY_HINT_ENUM, "Begin,End,Both"), "set_h_grow_direction", "get_h_grow_direction"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "grow_vertical", PROPERTY_HINT_ENUM, "Begin,End,Both"), "set_v_grow_direction", "get_v_grow_direction"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "grow_horizontal", PROPERTY_HINT_ENUM, "Begin,End,Both"), "set_h_grow_direction", "get_h_grow_direction"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "grow_vertical", PROPERTY_HINT_ENUM, "Begin,End,Both"), "set_v_grow_direction", "get_v_grow_direction"); ADD_GROUP("Rect", "rect_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "rect_position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_position", "get_position"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "rect_global_position", PROPERTY_HINT_NONE, "", 0), "set_global_position", "get_global_position"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "rect_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_size", "get_size"); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "rect_min_size"), "set_custom_minimum_size", "get_custom_minimum_size"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "rect_rotation", PROPERTY_HINT_RANGE, "-1080,1080,0.01"), "set_rotation_degrees", "get_rotation_degrees"); - ADD_PROPERTYNO(PropertyInfo(Variant::VECTOR2, "rect_scale"), "set_scale", "get_scale"); - ADD_PROPERTYNO(PropertyInfo(Variant::VECTOR2, "rect_pivot_offset"), "set_pivot_offset", "get_pivot_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_global_position", PROPERTY_HINT_NONE, "", 0), "set_global_position", "get_global_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_min_size"), "set_custom_minimum_size", "get_custom_minimum_size"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "rect_rotation", PROPERTY_HINT_RANGE, "-1080,1080,0.01"), "set_rotation_degrees", "get_rotation_degrees"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_scale"), "set_scale", "get_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_pivot_offset"), "set_pivot_offset", "get_pivot_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rect_clip_content"), "set_clip_contents", "is_clipping_contents"); ADD_GROUP("Hint", "hint_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "hint_tooltip", PROPERTY_HINT_MULTILINE_TEXT), "set_tooltip", "_get_tooltip"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "hint_tooltip", PROPERTY_HINT_MULTILINE_TEXT), "set_tooltip", "_get_tooltip"); ADD_GROUP("Focus", "focus_"); - ADD_PROPERTYINZ(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_left", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_LEFT); - ADD_PROPERTYINZ(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_top", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_TOP); - ADD_PROPERTYINZ(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_right", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_RIGHT); - ADD_PROPERTYINZ(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_bottom", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_BOTTOM); - ADD_PROPERTYNZ(PropertyInfo(Variant::NODE_PATH, "focus_next", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_next", "get_focus_next"); - ADD_PROPERTYNZ(PropertyInfo(Variant::NODE_PATH, "focus_previous", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_previous", "get_focus_previous"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode"); + ADD_PROPERTYI(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_left", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_top", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_right", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::NODE_PATH, "focus_neighbour_bottom", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_neighbour", "get_focus_neighbour", MARGIN_BOTTOM); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "focus_next", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_next", "get_focus_next"); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "focus_previous", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Control"), "set_focus_previous", "get_focus_previous"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode"); ADD_GROUP("Mouse", "mouse_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "mouse_filter", PROPERTY_HINT_ENUM, "Stop,Pass,Ignore"), "set_mouse_filter", "get_mouse_filter"); @@ -2882,9 +2884,9 @@ void Control::_bind_methods() { ADD_GROUP("Size Flags", "size_flags_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "size_flags_horizontal", PROPERTY_HINT_FLAGS, "Fill,Expand,Shrink Center,Shrink End"), "set_h_size_flags", "get_h_size_flags"); ADD_PROPERTY(PropertyInfo(Variant::INT, "size_flags_vertical", PROPERTY_HINT_FLAGS, "Fill,Expand,Shrink Center,Shrink End"), "set_v_size_flags", "get_v_size_flags"); - ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "size_flags_stretch_ratio", PROPERTY_HINT_RANGE, "0,128,0.01"), "set_stretch_ratio", "get_stretch_ratio"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "size_flags_stretch_ratio", PROPERTY_HINT_RANGE, "0,128,0.01"), "set_stretch_ratio", "get_stretch_ratio"); ADD_GROUP("Theme", ""); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "theme", PROPERTY_HINT_RESOURCE_TYPE, "Theme"), "set_theme", "get_theme"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "theme", PROPERTY_HINT_RESOURCE_TYPE, "Theme"), "set_theme", "get_theme"); ADD_GROUP("", ""); BIND_ENUM_CONSTANT(FOCUS_NONE); diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index e3a21eb10d..50511f6bbd 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -535,7 +535,7 @@ void AcceptDialog::_bind_methods() { ADD_SIGNAL(MethodInfo("custom_action", PropertyInfo(Variant::STRING, "action"))); ADD_GROUP("Dialog", "dialog"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "dialog_text", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "dialog_text", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "dialog_hide_on_ok"), "set_hide_on_ok", "get_hide_on_ok"); } diff --git a/scene/gui/gradient_edit.cpp b/scene/gui/gradient_edit.cpp index 19ffe681ef..c13964d196 100644 --- a/scene/gui/gradient_edit.cpp +++ b/scene/gui/gradient_edit.cpp @@ -236,23 +236,23 @@ void GradientEdit::_gui_input(const Ref<InputEvent> &p_event) { //Snap to nearest point if holding shift if (mm->get_shift()) { - float snap_treshhold = 0.03; - float smallest_ofs = snap_treshhold; - bool founded = false; - int nearest_point; + float snap_threshold = 0.03; + float smallest_ofs = snap_threshold; + bool found = false; + int nearest_point = 0; for (int i = 0; i < points.size(); ++i) { if (i != grabbed) { float temp_ofs = ABS(points[i].offset - newofs); if (temp_ofs < smallest_ofs) { smallest_ofs = temp_ofs; nearest_point = i; - if (founded) + if (found) break; - founded = true; + found = true; } } } - if (founded) { + if (found) { if (points[nearest_point].offset < newofs) newofs = points[nearest_point].offset + 0.00001; else diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 0ffaac20f6..eee3213fe7 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -406,7 +406,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { connecting_color = Object::cast_to<GraphNode>(to)->get_connection_input_color(E->get().to_port); connecting_target = false; connecting_to = pos; - just_disconected = true; + just_disconnected = true; emit_signal("disconnection_request", E->get().from, E->get().from_port, E->get().to, E->get().to_port); to = get_node(String(connecting_from)); //maybe it was erased @@ -427,7 +427,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { connecting_color = gn->get_connection_output_color(j); connecting_target = false; connecting_to = pos; - just_disconected = false; + just_disconnected = false; return; } } @@ -453,7 +453,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { connecting_color = Object::cast_to<GraphNode>(fr)->get_connection_output_color(E->get().from_port); connecting_target = false; connecting_to = pos; - just_disconected = true; + just_disconnected = true; emit_signal("disconnection_request", E->get().from, E->get().from_port, E->get().to, E->get().to_port); fr = get_node(String(connecting_from)); //maybe it was erased @@ -474,7 +474,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { connecting_color = gn->get_connection_input_color(j); connecting_target = false; connecting_to = pos; - just_disconected = true; + just_disconnected = true; return; } @@ -544,7 +544,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { } emit_signal("connection_request", from, from_slot, to, to_slot); - } else if (!just_disconected) { + } else if (!just_disconnected) { String from = connecting_from; int from_slot = connecting_index; Vector2 ofs = Vector2(mb->get_position().x, mb->get_position().y); @@ -1042,7 +1042,7 @@ void GraphEdit::set_connection_activity(const StringName &p_from, int p_from_por if (E->get().from == p_from && E->get().from_port == p_from_port && E->get().to == p_to && E->get().to_port == p_to_port) { - if (ABS(E->get().activity != p_activity)) { + if (ABS(E->get().activity - p_activity) < CMP_EPSILON) { //update only if changed top_layer->update(); connections_layer->update(); @@ -1339,21 +1339,25 @@ GraphEdit::GraphEdit() { zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); + zoom_minus->set_tooltip(RTR("Zoom Out")); zoom_minus->connect("pressed", this, "_zoom_minus"); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(ToolButton); zoom_hb->add_child(zoom_reset); + zoom_reset->set_tooltip(RTR("Zoom Reset")); zoom_reset->connect("pressed", this, "_zoom_reset"); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); + zoom_plus->set_tooltip(RTR("Zoom In")); zoom_plus->connect("pressed", this, "_zoom_plus"); zoom_plus->set_focus_mode(FOCUS_NONE); snap_button = memnew(ToolButton); snap_button->set_toggle_mode(true); + snap_button->set_tooltip(RTR("Enable snap and show grid.")); snap_button->connect("pressed", this, "_snap_toggled"); snap_button->set_pressed(true); snap_button->set_focus_mode(FOCUS_NONE); @@ -1368,6 +1372,6 @@ GraphEdit::GraphEdit() { zoom_hb->add_child(snap_amount); setting_scroll_ofs = false; - just_disconected = false; + just_disconnected = false; set_clip_contents(true); } diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h index 31a449eb59..71165e3dc9 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -94,7 +94,7 @@ private: Vector2 connecting_to; String connecting_target_to; int connecting_target_index; - bool just_disconected; + bool just_disconnected; bool dragging; bool just_selected; diff --git a/scene/gui/grid_container.cpp b/scene/gui/grid_container.cpp index 278e4123d7..bb1d1d7695 100644 --- a/scene/gui/grid_container.cpp +++ b/scene/gui/grid_container.cpp @@ -184,8 +184,6 @@ void GridContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_columns", "columns"), &GridContainer::set_columns); ClassDB::bind_method(D_METHOD("get_columns"), &GridContainer::get_columns); - ClassDB::bind_method(D_METHOD("get_child_control_at_cell", "row", "column"), - &GridContainer::get_child_control_at_cell); ADD_PROPERTY(PropertyInfo(Variant::INT, "columns", PROPERTY_HINT_RANGE, "1,1024,1"), "set_columns", "get_columns"); } @@ -241,21 +239,6 @@ Size2 GridContainer::get_minimum_size() const { return ms; } -Control *GridContainer::get_child_control_at_cell(int row, int column) { - Control *c; - int grid_index = row * columns + column; - for (int i = 0; i < get_child_count(); i++) { - c = Object::cast_to<Control>(get_child(i)); - if (!c || !c->is_visible_in_tree()) - continue; - - if (grid_index == i) { - break; - } - } - return c; -} - GridContainer::GridContainer() { set_mouse_filter(MOUSE_FILTER_PASS); diff --git a/scene/gui/grid_container.h b/scene/gui/grid_container.h index 7e3470dc89..243d06f034 100644 --- a/scene/gui/grid_container.h +++ b/scene/gui/grid_container.h @@ -47,7 +47,6 @@ public: void set_columns(int p_columns); int get_columns() const; virtual Size2 get_minimum_size() const; - Control *get_child_control_at_cell(int row, int column); GridContainer(); }; diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 0d5fbee9ee..1669d62082 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -36,6 +36,7 @@ void ItemList::add_item(const String &p_item, const Ref<Texture> &p_texture, boo Item item; item.icon = p_texture; + item.icon_transposed = false; item.icon_region = Rect2i(); item.icon_modulate = Color(1, 1, 1, 1); item.text = p_item; @@ -54,6 +55,7 @@ void ItemList::add_icon_item(const Ref<Texture> &p_item, bool p_selectable) { Item item; item.icon = p_item; + item.icon_transposed = false; item.icon_region = Rect2i(); item.icon_modulate = Color(1, 1, 1, 1); //item.text=p_item; @@ -124,6 +126,22 @@ Ref<Texture> ItemList::get_item_icon(int p_idx) const { return items[p_idx].icon; } +void ItemList::set_item_icon_transposed(int p_idx, const bool p_transposed) { + + ERR_FAIL_INDEX(p_idx, items.size()); + + items.write[p_idx].icon_transposed = p_transposed; + update(); + shape_changed = true; +} + +bool ItemList::is_item_icon_transposed(int p_idx) const { + + ERR_FAIL_INDEX_V(p_idx, items.size(), false); + + return items[p_idx].icon_transposed; +} + void ItemList::set_item_icon_region(int p_idx, const Rect2 &p_region) { ERR_FAIL_INDEX(p_idx, items.size()); @@ -416,6 +434,7 @@ void ItemList::set_icon_mode(IconMode p_mode) { update(); shape_changed = true; } + ItemList::IconMode ItemList::get_icon_mode() const { return icon_mode; @@ -435,10 +454,18 @@ Size2 ItemList::Item::get_icon_size() const { if (icon.is_null()) return Size2(); - if (icon_region.has_no_area()) - return icon->get_size(); - return icon_region.size; + Size2 size_result = Size2(icon_region.size).abs(); + if (icon_region.size.x == 0 || icon_region.size.y == 0) + size_result = icon->get_size(); + + if (icon_transposed) { + Size2 size_tmp = size_result; + size_result.x = size_tmp.y; + size_result.y = size_tmp.x; + } + + return size_result; } void ItemList::_gui_input(const Ref<InputEvent> &p_event) { @@ -1067,10 +1094,15 @@ void ItemList::_notification(int p_what) { if (items[i].disabled) modulate.a *= 0.5; - if (items[i].icon_region.has_no_area()) - draw_texture_rect(items[i].icon, draw_rect, false, modulate); - else - draw_texture_rect_region(items[i].icon, draw_rect, items[i].icon_region, modulate); + // If the icon is transposed, we have to swith the size so that it is drawn correctly + if (items[i].icon_transposed) { + Size2 size_tmp = draw_rect.size; + draw_rect.size.x = size_tmp.y; + draw_rect.size.y = size_tmp.x; + } + + Rect2 region = (items[i].icon_region.size.x == 0 || items[i].icon_region.size.y == 0) ? Rect2(Vector2(), items[i].icon->get_size()) : Rect2(items[i].icon_region); + draw_texture_rect_region(items[i].icon, draw_rect, region, modulate, items[i].icon_transposed); } if (items[i].tag_icon.is_valid()) { @@ -1405,6 +1437,9 @@ void ItemList::_bind_methods() { ClassDB::bind_method(D_METHOD("set_item_icon", "idx", "icon"), &ItemList::set_item_icon); ClassDB::bind_method(D_METHOD("get_item_icon", "idx"), &ItemList::get_item_icon); + ClassDB::bind_method(D_METHOD("set_item_icon_transposed", "idx", "rect"), &ItemList::set_item_icon_transposed); + ClassDB::bind_method(D_METHOD("is_item_icon_transposed", "idx"), &ItemList::is_item_icon_transposed); + ClassDB::bind_method(D_METHOD("set_item_icon_region", "idx", "rect"), &ItemList::set_item_icon_region); ClassDB::bind_method(D_METHOD("get_item_icon_region", "idx"), &ItemList::get_item_icon_region); @@ -1498,17 +1533,17 @@ void ItemList::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "select_mode", PROPERTY_HINT_ENUM, "Single,Multi"), "set_select_mode", "get_select_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_reselect"), "set_allow_reselect", "get_allow_reselect"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "allow_rmb_select"), "set_allow_rmb_select", "get_allow_rmb_select"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "max_text_lines"), "set_max_text_lines", "get_max_text_lines"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "auto_height"), "set_auto_height", "has_auto_height"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_rmb_select"), "set_allow_rmb_select", "get_allow_rmb_select"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_text_lines"), "set_max_text_lines", "get_max_text_lines"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "auto_height"), "set_auto_height", "has_auto_height"); ADD_GROUP("Columns", ""); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "max_columns"), "set_max_columns", "get_max_columns"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "same_column_width"), "set_same_column_width", "is_same_column_width"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "fixed_column_width"), "set_fixed_column_width", "get_fixed_column_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_columns"), "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"), "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_PROPERTYNO(PropertyInfo(Variant::REAL, "icon_scale"), "set_icon_scale", "get_icon_scale"); - ADD_PROPERTYNO(PropertyInfo(Variant::VECTOR2, "fixed_icon_size"), "set_fixed_icon_size", "get_fixed_icon_size"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "icon_scale"), "set_icon_scale", "get_icon_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "fixed_icon_size"), "set_fixed_icon_size", "get_fixed_icon_size"); BIND_ENUM_CONSTANT(ICON_MODE_TOP); BIND_ENUM_CONSTANT(ICON_MODE_LEFT); @@ -1524,6 +1559,7 @@ void ItemList::_bind_methods() { ADD_SIGNAL(MethodInfo("nothing_selected")); GLOBAL_DEF("gui/timers/incremental_search_max_interval_msec", 2000); + ProjectSettings::get_singleton()->set_custom_property_info("gui/timers/incremental_search_max_interval_msec", PropertyInfo(Variant::INT, "gui/timers/incremental_search_max_interval_msec", PROPERTY_HINT_RANGE, "0,10000,1,or_greater")); // No negative numbers } ItemList::ItemList() { diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h index 58771c1777..acd17986eb 100644 --- a/scene/gui/item_list.h +++ b/scene/gui/item_list.h @@ -53,6 +53,7 @@ private: struct Item { Ref<Texture> icon; + bool icon_transposed; Rect2i icon_region; Color icon_modulate; Ref<Texture> tag_icon; @@ -133,6 +134,9 @@ public: void set_item_icon(int p_idx, const Ref<Texture> &p_icon); Ref<Texture> get_item_icon(int p_idx) const; + void set_item_icon_transposed(int p_idx, const bool transposed); + bool is_item_icon_transposed(int p_idx) const; + void set_item_icon_region(int p_idx, const Rect2 &p_region); Rect2 get_item_icon_region(int p_idx) const; diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 91dab27930..a7f88514e0 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -393,7 +393,7 @@ void Label::regenerate_word_cache() { WordCache *last = NULL; - for (int i = 0; i < xl_text.size() + 1; i++) { + for (int i = 0; i <= xl_text.length(); i++) { CharType current = i < xl_text.length() ? xl_text[i] : ' '; //always a space at the end, so the algo works @@ -429,12 +429,11 @@ void Label::regenerate_word_cache() { if (current == '\n') { insert_newline = true; - } else { + } else if (current != ' ') { total_char_cache++; } if (i < xl_text.length() && xl_text[i] == ' ') { - total_char_cache--; // do not count spaces if (line_width > 0 || last == NULL || last->char_pos != WordCache::CHAR_WRAPLINE) { space_count++; line_width += space_width; @@ -511,7 +510,7 @@ void Label::regenerate_word_cache() { void Label::set_align(Align p_align) { - ERR_FAIL_INDEX(p_align, 4); + ERR_FAIL_INDEX((int)p_align, 4); align = p_align; update(); } @@ -523,7 +522,7 @@ Label::Align Label::get_align() const { void Label::set_valign(VAlign p_align) { - ERR_FAIL_INDEX(p_align, 4); + ERR_FAIL_INDEX((int)p_align, 4); valign = p_align; update(); } @@ -665,12 +664,12 @@ void Label::_bind_methods() { BIND_ENUM_CONSTANT(VALIGN_BOTTOM); BIND_ENUM_CONSTANT(VALIGN_FILL); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "valign", PROPERTY_HINT_ENUM, "Top,Center,Bottom,Fill"), "set_valign", "get_valign"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "autowrap"), "set_autowrap", "has_autowrap"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "is_clipping_text"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "uppercase"), "set_uppercase", "is_uppercase"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "valign", PROPERTY_HINT_ENUM, "Top,Center,Bottom,Fill"), "set_valign", "get_valign"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autowrap"), "set_autowrap", "has_autowrap"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "is_clipping_text"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uppercase"), "set_uppercase", "is_uppercase"); ADD_PROPERTY(PropertyInfo(Variant::INT, "visible_characters", PROPERTY_HINT_RANGE, "-1,128000,1", PROPERTY_USAGE_EDITOR), "set_visible_characters", "get_visible_characters"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "percent_visible", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_percent_visible", "get_percent_visible"); ADD_PROPERTY(PropertyInfo(Variant::INT, "lines_skipped", PROPERTY_HINT_RANGE, "0,999,1"), "set_lines_skipped", "get_lines_skipped"); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 9c43d5b308..299c304c5f 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -527,7 +527,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { void LineEdit::set_align(Align p_align) { - ERR_FAIL_INDEX(p_align, 4); + ERR_FAIL_INDEX((int)p_align, 4); align = p_align; update(); } @@ -1573,22 +1573,22 @@ void LineEdit::_bind_methods() { BIND_ENUM_CONSTANT(MENU_REDO); BIND_ENUM_CONSTANT(MENU_MAX); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "text"), "set_text", "get_text"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "max_length"), "set_max_length", "get_max_length"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "secret"), "set_secret", "is_secret"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "secret_character"), "set_secret_character", "get_secret_character"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "expand_to_text_length"), "set_expand_to_text_length", "get_expand_to_text_length"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text"), "set_text", "get_text"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_length"), "set_max_length", "get_max_length"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "secret"), "set_secret", "is_secret"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "secret_character"), "set_secret_character", "get_secret_character"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand_to_text_length"), "set_expand_to_text_length", "get_expand_to_text_length"); ADD_PROPERTY(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "context_menu_enabled"), "set_context_menu_enabled", "is_context_menu_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clear_button_enabled"), "set_clear_button_enabled", "is_clear_button_enabled"); ADD_GROUP("Placeholder", "placeholder_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "placeholder_text"), "set_placeholder", "get_placeholder"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "placeholder_alpha", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_placeholder_alpha", "get_placeholder_alpha"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "placeholder_text"), "set_placeholder", "get_placeholder"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "placeholder_alpha", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_placeholder_alpha", "get_placeholder_alpha"); ADD_GROUP("Caret", "caret_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_blink"), "cursor_set_blink_enabled", "cursor_get_blink_enabled"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.01"), "cursor_set_blink_speed", "cursor_get_blink_speed"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.01"), "cursor_set_blink_speed", "cursor_get_blink_speed"); ADD_PROPERTY(PropertyInfo(Variant::INT, "caret_position"), "set_cursor_position", "get_cursor_position"); } @@ -1608,6 +1608,8 @@ LineEdit::LineEdit() { text_changed_dirty = false; placeholder_alpha = 0.6; clear_button_enabled = false; + clear_button_status.press_attempt = false; + clear_button_status.pressing_inside = false; deselect(); set_focus_mode(FOCUS_ALL); diff --git a/scene/gui/link_button.cpp b/scene/gui/link_button.cpp index d38a067fef..a603487cf1 100644 --- a/scene/gui/link_button.cpp +++ b/scene/gui/link_button.cpp @@ -75,6 +75,7 @@ void LinkButton::_notification(int p_what) { color = get_color("font_color"); do_underline = underline_mode == UNDERLINE_MODE_ALWAYS; } break; + case DRAW_HOVER_PRESSED: case DRAW_PRESSED: { if (has_color("font_color_pressed")) @@ -91,7 +92,6 @@ void LinkButton::_notification(int p_what) { do_underline = underline_mode != UNDERLINE_MODE_NEVER; } break; - case DRAW_HOVER_PRESSED: break; // Not used in this class case DRAW_DISABLED: { color = get_color("font_color_disabled"); @@ -134,8 +134,8 @@ void LinkButton::_bind_methods() { BIND_ENUM_CONSTANT(UNDERLINE_MODE_ON_HOVER); BIND_ENUM_CONSTANT(UNDERLINE_MODE_NEVER); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "text"), "set_text", "get_text"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "underline", PROPERTY_HINT_ENUM, "Always,On Hover,Never"), "set_underline_mode", "get_underline_mode"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text"), "set_text", "get_text"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "underline", PROPERTY_HINT_ENUM, "Always,On Hover,Never"), "set_underline_mode", "get_underline_mode"); } LinkButton::LinkButton() { diff --git a/scene/gui/nine_patch_rect.cpp b/scene/gui/nine_patch_rect.cpp index b8f6ffe6d2..802dc0db4f 100644 --- a/scene/gui/nine_patch_rect.cpp +++ b/scene/gui/nine_patch_rect.cpp @@ -70,18 +70,18 @@ void NinePatchRect::_bind_methods() { ADD_SIGNAL(MethodInfo("texture_changed")); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "is_draw_center_enabled"); - ADD_PROPERTYNZ(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "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_GROUP("Patch Margin", "patch_margin_"); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "patch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_LEFT); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "patch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_TOP); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "patch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_RIGHT); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "patch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", MARGIN_BOTTOM); ADD_GROUP("Axis Stretch", "axis_stretch_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "axis_stretch_horizontal", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_h_axis_stretch_mode", "get_h_axis_stretch_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "axis_stretch_vertical", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_v_axis_stretch_mode", "get_v_axis_stretch_mode"); + 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"); BIND_ENUM_CONSTANT(AXIS_STRETCH_MODE_STRETCH); BIND_ENUM_CONSTANT(AXIS_STRETCH_MODE_TILE); @@ -110,7 +110,7 @@ Ref<Texture> NinePatchRect::get_texture() const { void NinePatchRect::set_patch_margin(Margin p_margin, int p_size) { - ERR_FAIL_INDEX(p_margin, 4); + ERR_FAIL_INDEX((int)p_margin, 4); margin[p_margin] = p_size; update(); minimum_size_changed(); @@ -132,7 +132,7 @@ void NinePatchRect::set_patch_margin(Margin p_margin, int p_size) { int NinePatchRect::get_patch_margin(Margin p_margin) const { - ERR_FAIL_INDEX_V(p_margin, 4, 0); + ERR_FAIL_INDEX_V((int)p_margin, 4, 0); return margin[p_margin]; } diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 3239641c2f..f621522102 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -557,6 +557,21 @@ void PopupMenu::_notification(int p_what) { mouse_over = -1; update(); } + + for (int i = 0; i < items.size(); i++) { + if (items[i].submenu == "") + continue; + + Node *n = get_node(items[i].submenu); + if (!n) + continue; + + PopupMenu *pm = Object::cast_to<PopupMenu>(n); + if (!pm || !pm->is_visible()) + continue; + + pm->hide(); + } } break; } } @@ -1012,8 +1027,7 @@ bool PopupMenu::activate_item_by_event(const Ref<InputEvent> &p_event, bool p_fo code |= KEY_MASK_SHIFT; } - int il = items.size(); - for (int i = 0; i < il; i++) { + for (int i = 0; i < items.size(); i++) { if (is_item_disabled(i) || items[i].shortcut_is_disabled) continue; @@ -1381,9 +1395,9 @@ void PopupMenu::_bind_methods() { ClassDB::bind_method(D_METHOD("_submenu_timeout"), &PopupMenu::_submenu_timeout); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "hide_on_item_selection"), "set_hide_on_item_selection", "is_hide_on_item_selection"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "hide_on_checkable_item_selection"), "set_hide_on_checkable_item_selection", "is_hide_on_checkable_item_selection"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "hide_on_state_item_selection"), "set_hide_on_state_item_selection", "is_hide_on_state_item_selection"); + 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::REAL, "submenu_popup_delay"), "set_submenu_popup_delay", "get_submenu_popup_delay"); ADD_SIGNAL(MethodInfo("id_pressed", PropertyInfo(Variant::INT, "ID"))); @@ -1411,6 +1425,7 @@ PopupMenu::PopupMenu() { set_hide_on_item_selection(true); set_hide_on_checkable_item_selection(true); set_hide_on_multistate_item_selection(false); + set_hide_on_window_lose_focus(true); submenu_timer = memnew(Timer); submenu_timer->set_wait_time(0.3); diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index bb36852cf9..490013d813 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -220,13 +220,14 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & case ALIGN_LEFT: l.offset_caches.push_back(0); break; \ case ALIGN_CENTER: l.offset_caches.push_back(((p_width - margin) - used) / 2); break; \ case ALIGN_RIGHT: l.offset_caches.push_back(((p_width - margin) - used)); break; \ - case ALIGN_FILL: l.offset_caches.push_back((p_width - margin) - used /*+spaces_size*/); break; \ + case ALIGN_FILL: l.offset_caches.push_back(line_wrapped ? ((p_width - margin) - used) : 0); break; \ } \ l.height_caches.push_back(line_height); \ l.ascent_caches.push_back(line_ascent); \ l.descent_caches.push_back(line_descent); \ l.space_caches.push_back(spaces); \ } \ + line_wrapped = false; \ y += line_height + get_constant(SceneStringNames::get_singleton()->line_separation); \ line_height = 0; \ line_ascent = 0; \ @@ -254,6 +255,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & l.minimum_width = MAX(l.minimum_width, m_width); \ } \ if (wofs + m_width > p_width) { \ + line_wrapped = true; \ if (p_mode == PROCESS_CACHE) { \ if (spaces > 0) \ spaces -= 1; \ @@ -298,6 +300,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & int rchar = 0; int lh = 0; bool line_is_blank = true; + bool line_wrapped = false; int fh = 0; while (it) { @@ -762,19 +765,17 @@ void RichTextLabel::_update_scroll() { if (exceeds) { scroll_visible = true; - main->first_invalid_line = 0; scroll_w = vscroll->get_combined_minimum_size().width; vscroll->show(); vscroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -scroll_w); - _validate_line_caches(main); - } else { - scroll_visible = false; - vscroll->hide(); scroll_w = 0; - _validate_line_caches(main); + vscroll->hide(); } + + main->first_invalid_line = 0; //invalidate ALL + _validate_line_caches(main); } } diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp index 07380f45cc..0e68476439 100644 --- a/scene/gui/scroll_bar.cpp +++ b/scene/gui/scroll_bar.cpp @@ -330,6 +330,8 @@ void ScrollBar::_notification(int p_what) { if (Math::abs(vel) >= dist) { set_value(target_scroll); + scrolling = false; + set_physics_process_internal(false); } else { set_value(get_value() + vel); } diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 26da16569a..9c22a049b8 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -246,7 +246,7 @@ void ScrollContainer::_notification(int p_what) { size.y -= h_scroll->get_minimum_size().y; if (v_scroll->is_visible_in_tree() && v_scroll->get_parent() == this) //scrolls may have been moved out for reasons - size.x -= h_scroll->get_minimum_size().x; + size.x -= v_scroll->get_minimum_size().x; for (int i = 0; i < get_child_count(); i++) { diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index f766c0722d..ace22dddff 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -276,7 +276,7 @@ void SpinBox::_bind_methods() { ClassDB::bind_method(D_METHOD("_line_edit_input"), &SpinBox::_line_edit_input); ClassDB::bind_method(D_METHOD("_range_click_timeout"), &SpinBox::_range_click_timeout); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "prefix"), "set_prefix", "get_prefix"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "suffix"), "set_suffix", "get_suffix"); diff --git a/scene/gui/split_container.cpp b/scene/gui/split_container.cpp index c38c411333..c3265d3ed5 100644 --- a/scene/gui/split_container.cpp +++ b/scene/gui/split_container.cpp @@ -62,39 +62,28 @@ void SplitContainer::_resort() { // If we have only one element if (!first || !second) { if (first) { - fit_child_in_rect(_getch(0), Rect2(Point2(), get_size())); + fit_child_in_rect(first, Rect2(Point2(), get_size())); } else if (second) { - fit_child_in_rect(_getch(1), Rect2(Point2(), get_size())); + fit_child_in_rect(second, Rect2(Point2(), get_size())); } return; } // Determine expanded children - bool first_expanded = false; - bool second_expanded = false; - if (vertical) { - first_expanded = first->get_v_size_flags() & SIZE_EXPAND; - second_expanded = second->get_v_size_flags() & SIZE_EXPAND; - } else { - first_expanded = first->get_h_size_flags() & SIZE_EXPAND; - second_expanded = second->get_h_size_flags() & SIZE_EXPAND; - } + bool first_expanded = (vertical ? first->get_v_size_flags() : first->get_h_size_flags()) & SIZE_EXPAND; + bool second_expanded = (vertical ? second->get_v_size_flags() : second->get_h_size_flags()) & SIZE_EXPAND; // Determine the separation between items Ref<Texture> g = get_icon("grabber"); int sep = get_constant("separation"); - if (dragger_visibility == DRAGGER_HIDDEN_COLLAPSED) { - sep = 0; - } else { - sep = MAX(sep, vertical ? g->get_height() : g->get_width()); - } + sep = (dragger_visibility != DRAGGER_HIDDEN_COLLAPSED) ? MAX(sep, vertical ? g->get_height() : g->get_width()) : 0; // Compute the minimum size Size2 ms_first = first->get_combined_minimum_size(); Size2 ms_second = second->get_combined_minimum_size(); + // Compute the separator position without the split offset float ratio = first->get_stretch_ratio() / (first->get_stretch_ratio() + second->get_stretch_ratio()); - int no_offset_middle_sep = 0; if (first_expanded && second_expanded) { no_offset_middle_sep = get_size()[axis] * ratio - sep / 2; @@ -104,12 +93,16 @@ void SplitContainer::_resort() { no_offset_middle_sep = ms_first[axis]; } + // Compute the final middle separation middle_sep = no_offset_middle_sep; - middle_sep += (collapsed) ? 0 : split_offset; - middle_sep = MIN(middle_sep, get_size()[axis] - ms_second[axis] - sep); - middle_sep = MAX(middle_sep, ms_first[axis]); if (!collapsed) { - split_offset = middle_sep - no_offset_middle_sep; + int clamped_split_offset = CLAMP(split_offset, ms_first[axis] - no_offset_middle_sep, (get_size()[axis] - ms_second[axis] - sep) - no_offset_middle_sep); + middle_sep += clamped_split_offset; + if (should_clamp_split_offset) { + split_offset = clamped_split_offset; + _change_notify("split_offset"); + should_clamp_split_offset = false; + } } if (vertical) { @@ -123,7 +116,6 @@ void SplitContainer::_resort() { } update(); - _change_notify("split_offset"); } Size2 SplitContainer::get_minimum_size() const { @@ -131,8 +123,8 @@ Size2 SplitContainer::get_minimum_size() const { /* Calculate MINIMUM SIZE */ Size2i minimum; - int sep = get_constant("separation"); Ref<Texture> g = get_icon("grabber"); + int sep = get_constant("separation"); sep = (dragger_visibility != DRAGGER_HIDDEN_COLLAPSED) ? MAX(sep, vertical ? g->get_height() : g->get_width()) : 0; for (int i = 0; i < 2; i++) { @@ -248,6 +240,7 @@ void SplitContainer::_gui_input(const Ref<InputEvent> &p_event) { if (mm.is_valid() && dragging) { split_offset = drag_ofs + ((vertical ? mm->get_position().y : mm->get_position().x) - drag_from); + should_clamp_split_offset = true; queue_sort(); emit_signal("dragged", get_split_offset()); } @@ -282,6 +275,7 @@ void SplitContainer::set_split_offset(int p_offset) { return; split_offset = p_offset; + queue_sort(); } @@ -290,6 +284,12 @@ int SplitContainer::get_split_offset() const { return split_offset; } +void SplitContainer::clamp_split_offset() { + should_clamp_split_offset = true; + + queue_sort(); +} + void SplitContainer::set_collapsed(bool p_collapsed) { if (collapsed == p_collapsed) @@ -319,8 +319,10 @@ bool SplitContainer::is_collapsed() const { void SplitContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &SplitContainer::_gui_input); + ClassDB::bind_method(D_METHOD("set_split_offset", "offset"), &SplitContainer::set_split_offset); ClassDB::bind_method(D_METHOD("get_split_offset"), &SplitContainer::get_split_offset); + ClassDB::bind_method(D_METHOD("clamp_split_offset"), &SplitContainer::clamp_split_offset); ClassDB::bind_method(D_METHOD("set_collapsed", "collapsed"), &SplitContainer::set_collapsed); ClassDB::bind_method(D_METHOD("is_collapsed"), &SplitContainer::is_collapsed); @@ -343,6 +345,7 @@ SplitContainer::SplitContainer(bool p_vertical) { mouse_inside = false; split_offset = 0; + should_clamp_split_offset = false; middle_sep = 0; vertical = p_vertical; dragging = false; diff --git a/scene/gui/split_container.h b/scene/gui/split_container.h index 321f7fd3b7..f8b3343aa8 100644 --- a/scene/gui/split_container.h +++ b/scene/gui/split_container.h @@ -45,9 +45,10 @@ public: }; private: - bool vertical; + bool should_clamp_split_offset; int split_offset; int middle_sep; + bool vertical; bool dragging; int drag_from; int drag_ofs; @@ -67,6 +68,7 @@ protected: public: void set_split_offset(int p_offset); int get_split_offset() const; + void clamp_split_offset(); void set_collapsed(bool p_collapsed); bool is_collapsed() const; diff --git a/scene/gui/tabs.cpp b/scene/gui/tabs.cpp index c56b7d0f26..4fe4271368 100644 --- a/scene/gui/tabs.cpp +++ b/scene/gui/tabs.cpp @@ -53,7 +53,7 @@ Size2 Tabs::get_minimum_size() const { ms.width += get_constant("hseparation"); } - ms.width += font->get_string_size(tabs[i].text).width; + ms.width += Math::ceil(font->get_string_size(tabs[i].text).width); if (tabs[i].disabled) ms.width += tab_disabled->get_minimum_size().width; @@ -106,41 +106,8 @@ void Tabs::_gui_input(const Ref<InputEvent> &p_event) { } } - // test hovering to display right or close button - int hover_now = -1; - int hover_buttons = -1; - for (int i = 0; i < tabs.size(); i++) { - - if (i < offset) - continue; - - Rect2 rect = get_tab_rect(i); - if (rect.has_point(pos)) { - hover_now = i; - } - if (tabs[i].rb_rect.has_point(pos)) { - rb_hover = i; - cb_hover = -1; - hover_buttons = i; - break; - } else if (!tabs[i].disabled && tabs[i].cb_rect.has_point(pos)) { - cb_hover = i; - rb_hover = -1; - hover_buttons = i; - break; - } - } - if (hover != hover_now) { - hover = hover_now; - emit_signal("tab_hover", hover); - } - - if (hover_buttons == -1) { // no hover - rb_hover = hover_buttons; - cb_hover = hover_buttons; - } + _update_hover(); update(); - return; } @@ -522,6 +489,48 @@ Ref<Texture> Tabs::get_tab_right_button(int p_tab) const { return tabs[p_tab].right_button; } +void Tabs::_update_hover() { + + if (!is_inside_tree()) { + return; + } + + const Point2 &pos = get_local_mouse_position(); + // test hovering to display right or close button + int hover_now = -1; + int hover_buttons = -1; + for (int i = 0; i < tabs.size(); i++) { + + if (i < offset) + continue; + + Rect2 rect = get_tab_rect(i); + if (rect.has_point(pos)) { + hover_now = i; + } + if (tabs[i].rb_rect.has_point(pos)) { + rb_hover = i; + cb_hover = -1; + hover_buttons = i; + break; + } else if (!tabs[i].disabled && tabs[i].cb_rect.has_point(pos)) { + cb_hover = i; + rb_hover = -1; + hover_buttons = i; + break; + } + } + if (hover != hover_now) { + hover = hover_now; + emit_signal("tab_hover", hover); + } + + if (hover_buttons == -1) { // no hover + rb_hover = hover_buttons; + cb_hover = hover_buttons; + } +} + void Tabs::_update_cache() { Ref<StyleBox> tab_disabled = get_stylebox("tab_disabled"); Ref<StyleBox> tab_bg = get_stylebox("tab_bg"); @@ -538,7 +547,7 @@ void Tabs::_update_cache() { for (int i = 0; i < tabs.size(); i++) { tabs.write[i].ofs_cache = mw; tabs.write[i].size_cache = get_tab_width(i); - tabs.write[i].size_text = font->get_string_size(tabs[i].text).width; + tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].text).width); mw += tabs[i].size_cache; if (tabs[i].size_cache <= min_width || i == current) { size_fixed += tabs[i].size_cache; @@ -597,6 +606,7 @@ void Tabs::add_tab(const String &p_str, const Ref<Texture> &p_icon) { tabs.push_back(t); _update_cache(); + call_deferred("_update_hover"); update(); minimum_size_changed(); } @@ -604,6 +614,7 @@ void Tabs::add_tab(const String &p_str, const Ref<Texture> &p_icon) { void Tabs::clear_tabs() { tabs.clear(); current = 0; + call_deferred("_update_hover"); update(); } @@ -614,6 +625,7 @@ void Tabs::remove_tab(int p_idx) { if (current >= p_idx) current--; _update_cache(); + call_deferred("_update_hover"); update(); minimum_size_changed(); @@ -791,7 +803,7 @@ int Tabs::get_tab_width(int p_idx) const { x += get_constant("hseparation"); } - x += font->get_string_size(tabs[p_idx].text).width; + x += Math::ceil(font->get_string_size(tabs[p_idx].text).width); if (tabs[p_idx].disabled) x += tab_disabled->get_minimum_size().width; @@ -931,6 +943,7 @@ bool Tabs::get_select_with_rmb() const { void Tabs::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &Tabs::_gui_input); + ClassDB::bind_method(D_METHOD("_update_hover"), &Tabs::_update_hover); ClassDB::bind_method(D_METHOD("get_tab_count"), &Tabs::get_tab_count); ClassDB::bind_method(D_METHOD("set_current_tab", "tab_idx"), &Tabs::set_current_tab); ClassDB::bind_method(D_METHOD("get_current_tab"), &Tabs::get_current_tab); @@ -970,7 +983,7 @@ void Tabs::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "current_tab", PROPERTY_HINT_RANGE, "-1,4096,1", PROPERTY_USAGE_EDITOR), "set_current_tab", "get_current_tab"); ADD_PROPERTY(PropertyInfo(Variant::INT, "tab_align", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_tab_align", "get_tab_align"); - ADD_PROPERTYNZ(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, "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::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"); diff --git a/scene/gui/tabs.h b/scene/gui/tabs.h index e204f4364b..a98744b804 100644 --- a/scene/gui/tabs.h +++ b/scene/gui/tabs.h @@ -97,6 +97,8 @@ private: int get_tab_width(int p_idx) const; void _ensure_no_over_offset(); + + void _update_hover(); void _update_cache(); protected: diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index c390c60a8c..c339cf6374 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -334,15 +334,12 @@ void TextEdit::_update_scrollbars() { h_scroll->set_begin(Point2(0, size.height - hmin.height)); h_scroll->set_end(Point2(size.width - vmin.width, size.height)); - int hscroll_rows = ((hmin.height - 1) / get_row_height()) + 1; int visible_rows = get_visible_rows(); - int total_rows = get_total_visible_rows(); if (scroll_past_end_of_file_enabled) { total_rows += visible_rows - 1; } - int vscroll_pixels = v_scroll->get_combined_minimum_size().width; int visible_width = size.width - cache.style_normal->get_minimum_size().width; int total_width = text.get_max_width(true) + vmin.x; @@ -367,12 +364,12 @@ void TextEdit::_update_scrollbars() { } else { - if (total_rows > visible_rows && total_width <= visible_width - vscroll_pixels) { + if (total_rows > visible_rows && total_width <= visible_width) { //thanks yessopie for this clever bit of logic use_hscroll = false; } - if (total_rows <= visible_rows - hscroll_rows && total_width > visible_width) { + if (total_rows <= visible_rows && total_width > visible_width) { //thanks yessopie for this clever bit of logic use_vscroll = false; } @@ -1432,9 +1429,6 @@ void TextEdit::_notification(int p_what) { if (OS::get_singleton()->has_virtual_keyboard()) OS::get_singleton()->show_virtual_keyboard(get_text(), get_global_rect()); - if (raised_from_completion) { - VisualServer::get_singleton()->canvas_item_set_z_index(get_canvas_item(), 1); - } } break; case NOTIFICATION_FOCUS_EXIT: { @@ -1446,9 +1440,6 @@ void TextEdit::_notification(int p_what) { if (OS::get_singleton()->has_virtual_keyboard()) OS::get_singleton()->hide_virtual_keyboard(); - if (raised_from_completion) { - VisualServer::get_singleton()->canvas_item_set_z_index(get_canvas_item(), 0); - } } break; } } @@ -2334,9 +2325,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { // no need to indent if we are going upwards. if (auto_indent && !(k->get_command() && k->get_shift())) { - // indent once again if previous line will end with ':' or '{' + // indent once again if previous line will end with ':' or '{' and the line is not a comment // (i.e. colon/brace precedes current cursor position) - if (cursor.column > 0 && (text[cursor.line][cursor.column - 1] == ':' || text[cursor.line][cursor.column - 1] == '{')) { + if (cursor.column > 0 && (text[cursor.line][cursor.column - 1] == ':' || text[cursor.line][cursor.column - 1] == '{') && !is_line_comment(cursor.line)) { if (indent_using_spaces) { ins += space_indent; } else { @@ -3260,7 +3251,7 @@ void TextEdit::_scroll_down(real_t p_delta) { } if (smooth_scroll_enabled) { - int max_v_scroll = v_scroll->get_max() - v_scroll->get_page(); + int max_v_scroll = round(v_scroll->get_max() - v_scroll->get_page()); if (target_v_scroll > max_v_scroll) { target_v_scroll = max_v_scroll; v_scroll->set_value(target_v_scroll); @@ -4273,6 +4264,7 @@ void TextEdit::_clear() { cursor.line_ofs = 0; cursor.wrap_ofs = 0; cursor.last_fit_x = 0; + selection.active = false; } void TextEdit::clear() { @@ -5669,16 +5661,12 @@ void TextEdit::_confirm_completion() { void TextEdit::_cancel_code_hint() { - VisualServer::get_singleton()->canvas_item_set_z_index(get_canvas_item(), 0); - raised_from_completion = false; completion_hint = ""; update(); } void TextEdit::_cancel_completion() { - VisualServer::get_singleton()->canvas_item_set_z_index(get_canvas_item(), 0); - raised_from_completion = false; if (!completion_active) return; @@ -5770,6 +5758,7 @@ void TextEdit::_update_completion_candidates() { completion_base = s; Vector<float> sim_cache; bool single_quote = s.begins_with("'"); + Vector<String> completion_options_casei; for (int i = 0; i < completion_strings.size(); i++) { if (single_quote && completion_strings[i].is_quoted()) { @@ -5778,9 +5767,13 @@ void TextEdit::_update_completion_candidates() { if (completion_strings[i].begins_with(s)) { completion_options.push_back(completion_strings[i]); + } else if (completion_strings[i].to_lower().begins_with(s.to_lower())) { + completion_options_casei.push_back(completion_strings[i]); } } + completion_options.append_array(completion_options_casei); + if (completion_options.size() == 0) { for (int i = 0; i < completion_strings.size(); i++) { if (s.is_subsequence_of(completion_strings[i])) { @@ -5836,8 +5829,6 @@ void TextEdit::query_code_comple() { void TextEdit::set_code_hint(const String &p_hint) { - VisualServer::get_singleton()->canvas_item_set_z_index(get_canvas_item(), 1); - raised_from_completion = true; completion_hint = p_hint; completion_hint_offset = -0xFFFF; update(); @@ -5845,8 +5836,6 @@ void TextEdit::set_code_hint(const String &p_hint) { void TextEdit::code_complete(const Vector<String> &p_strings, bool p_forced) { - VisualServer::get_singleton()->canvas_item_set_z_index(get_canvas_item(), 1); - raised_from_completion = true; completion_strings = p_strings; completion_active = true; completion_forced = p_forced; @@ -6056,7 +6045,10 @@ void TextEdit::menu_option(int p_option) { case MENU_UNDO: { undo(); } break; - }; + case MENU_REDO: { + redo(); + } + } } void TextEdit::set_select_identifiers_on_hover(bool p_enable) { @@ -6217,7 +6209,7 @@ void TextEdit::_bind_methods() { ADD_GROUP("Caret", "caret_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_block_mode"), "cursor_set_block_mode", "cursor_is_block_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_blink"), "cursor_set_blink_enabled", "cursor_get_blink_enabled"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.01"), "cursor_set_blink_speed", "cursor_get_blink_speed"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.01"), "cursor_set_blink_speed", "cursor_get_blink_speed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_moving_by_right_click"), "set_right_click_moves_caret", "is_right_click_moving_caret"); ADD_SIGNAL(MethodInfo("cursor_changed")); @@ -6232,9 +6224,11 @@ void TextEdit::_bind_methods() { BIND_ENUM_CONSTANT(MENU_CLEAR); BIND_ENUM_CONSTANT(MENU_SELECT_ALL); BIND_ENUM_CONSTANT(MENU_UNDO); + BIND_ENUM_CONSTANT(MENU_REDO); BIND_ENUM_CONSTANT(MENU_MAX); GLOBAL_DEF("gui/timers/text_edit_idle_detect_sec", 3); + ProjectSettings::get_singleton()->set_custom_property_info("gui/timers/text_edit_idle_detect_sec", PropertyInfo(Variant::REAL, "gui/timers/text_edit_idle_detect_sec", PROPERTY_HINT_RANGE, "0,10,0.01,or_greater")); // No negative numbers } TextEdit::TextEdit() { @@ -6348,8 +6342,6 @@ TextEdit::TextEdit() { target_v_scroll = 0; v_scroll_speed = 80; - raised_from_completion = false; - context_menu_enabled = true; menu = memnew(PopupMenu); add_child(menu); @@ -6361,6 +6353,7 @@ TextEdit::TextEdit() { menu->add_item(RTR("Clear"), MENU_CLEAR); menu->add_separator(); menu->add_item(RTR("Undo"), MENU_UNDO, KEY_MASK_CMD | KEY_Z); + menu->add_item(RTR("Redo"), MENU_REDO, KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Z); menu->connect("id_pressed", this, "menu_option"); } diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index f0c18ad047..b1a0b60442 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -306,8 +306,6 @@ private: float target_v_scroll; float v_scroll_speed; - bool raised_from_completion; - String highlighted_word; uint64_t last_dblclk; @@ -446,6 +444,7 @@ public: MENU_CLEAR, MENU_SELECT_ALL, MENU_UNDO, + MENU_REDO, MENU_MAX }; diff --git a/scene/gui/texture_button.cpp b/scene/gui/texture_button.cpp index 413f9dbbe6..4a8d87902b 100644 --- a/scene/gui/texture_button.cpp +++ b/scene/gui/texture_button.cpp @@ -128,6 +128,7 @@ void TextureButton::_notification(int p_what) { if (normal.is_valid()) texdraw = normal; } break; + case DRAW_HOVER_PRESSED: case DRAW_PRESSED: { if (pressed.is_null()) { @@ -150,7 +151,6 @@ void TextureButton::_notification(int p_what) { } else texdraw = hover; } break; - case DRAW_HOVER_PRESSED: break; // Not used in this class case DRAW_DISABLED: { if (disabled.is_null()) { @@ -247,14 +247,14 @@ void TextureButton::_bind_methods() { ClassDB::bind_method(D_METHOD("get_stretch_mode"), &TextureButton::get_stretch_mode); ADD_GROUP("Textures", "texture_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_normal", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_texture", "get_normal_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_pressed", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_pressed_texture", "get_pressed_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_hover", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_hover_texture", "get_hover_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_disabled", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_disabled_texture", "get_disabled_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_focused", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_focused_texture", "get_focused_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_click_mask", PROPERTY_HINT_RESOURCE_TYPE, "BitMap"), "set_click_mask", "get_click_mask"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "expand", PROPERTY_HINT_RESOURCE_TYPE, "bool"), "set_expand", "get_expand"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "stretch_mode", PROPERTY_HINT_ENUM, "Scale,Tile,Keep,Keep Centered,Keep Aspect,Keep Aspect Centered,Keep Aspect Covered"), "set_stretch_mode", "get_stretch_mode"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_normal", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_texture", "get_normal_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_pressed", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_pressed_texture", "get_pressed_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_hover", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_hover_texture", "get_hover_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_disabled", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_disabled_texture", "get_disabled_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_focused", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_focused_texture", "get_focused_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_click_mask", PROPERTY_HINT_RESOURCE_TYPE, "BitMap"), "set_click_mask", "get_click_mask"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand", PROPERTY_HINT_RESOURCE_TYPE, "bool"), "set_expand", "get_expand"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "stretch_mode", PROPERTY_HINT_ENUM, "Scale,Tile,Keep,Keep Centered,Keep Aspect,Keep Aspect Centered,Keep Aspect Covered"), "set_stretch_mode", "get_stretch_mode"); BIND_ENUM_CONSTANT(STRETCH_SCALE); BIND_ENUM_CONSTANT(STRETCH_TILE); diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp index d28b4065fb..a37659e521 100644 --- a/scene/gui/texture_progress.cpp +++ b/scene/gui/texture_progress.cpp @@ -59,14 +59,14 @@ Ref<Texture> TextureProgress::get_over_texture() const { } void TextureProgress::set_stretch_margin(Margin p_margin, int p_size) { - ERR_FAIL_INDEX(p_margin, 4); + ERR_FAIL_INDEX((int)p_margin, 4); stretch_margin[p_margin] = p_size; update(); minimum_size_changed(); } int TextureProgress::get_stretch_margin(Margin p_margin) const { - ERR_FAIL_INDEX_V(p_margin, 4, 0); + ERR_FAIL_INDEX_V((int)p_margin, 4, 0); return stretch_margin[p_margin]; } @@ -148,9 +148,9 @@ Point2 TextureProgress::unit_val_to_uv(float val) { float angle = (val * Math_TAU) - Math_PI * 0.5; Point2 dir = Vector2(Math::cos(angle), Math::sin(angle)); float t1 = 1.0; - float cp; - float cq; - float cr; + float cp = 0; + float cq = 0; + float cr = 0; float edgeLeft = 0.0; float edgeRight = 1.0; float edgeBottom = 0.0; @@ -486,21 +486,21 @@ void TextureProgress::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_under", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_under_texture", "get_under_texture"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_over", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_over_texture", "get_over_texture"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_progress", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_progress_texture", "get_progress_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "fill_mode", PROPERTY_HINT_ENUM, "Left to Right,Right to Left,Top to Bottom,Bottom to Top,Clockwise,Counter Clockwise,Bilinear (Left and Right),Bilinear (Top and Bottom), Clockwise and Counter Clockwise"), "set_fill_mode", "get_fill_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "fill_mode", PROPERTY_HINT_ENUM, "Left to Right,Right to Left,Top to Bottom,Bottom to Top,Clockwise,Counter Clockwise,Bilinear (Left and Right),Bilinear (Top and Bottom), Clockwise and Counter Clockwise"), "set_fill_mode", "get_fill_mode"); ADD_GROUP("Tint", "tint_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "tint_under"), "set_tint_under", "get_tint_under"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "tint_over"), "set_tint_over", "get_tint_over"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "tint_progress"), "set_tint_progress", "get_tint_progress"); ADD_GROUP("Radial Fill", "radial_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "radial_initial_angle", PROPERTY_HINT_RANGE, "0.0,360.0,0.1,slider"), "set_radial_initial_angle", "get_radial_initial_angle"); - ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "radial_fill_degrees", PROPERTY_HINT_RANGE, "0.0,360.0,0.1,slider"), "set_fill_degrees", "get_fill_degrees"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "radial_initial_angle", PROPERTY_HINT_RANGE, "0.0,360.0,0.1,slider"), "set_radial_initial_angle", "get_radial_initial_angle"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "radial_fill_degrees", PROPERTY_HINT_RANGE, "0.0,360.0,0.1,slider"), "set_fill_degrees", "get_fill_degrees"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "radial_center_offset"), "set_radial_center_offset", "get_radial_center_offset"); ADD_GROUP("Stretch", "stretch_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "nine_patch_stretch"), "set_nine_patch_stretch", "get_nine_patch_stretch"); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "stretch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_LEFT); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "stretch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_TOP); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "stretch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_RIGHT); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "stretch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", MARGIN_BOTTOM); BIND_ENUM_CONSTANT(FILL_LEFT_TO_RIGHT); BIND_ENUM_CONSTANT(FILL_RIGHT_TO_LEFT); diff --git a/scene/gui/texture_rect.cpp b/scene/gui/texture_rect.cpp index f4285525f6..4371baf08c 100644 --- a/scene/gui/texture_rect.cpp +++ b/scene/gui/texture_rect.cpp @@ -109,9 +109,9 @@ void TextureRect::_bind_methods() { ClassDB::bind_method(D_METHOD("set_stretch_mode", "stretch_mode"), &TextureRect::set_stretch_mode); ClassDB::bind_method(D_METHOD("get_stretch_mode"), &TextureRect::get_stretch_mode); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "expand"), "set_expand", "has_expand"); - ADD_PROPERTYNO(PropertyInfo(Variant::INT, "stretch_mode", PROPERTY_HINT_ENUM, "Scale On Expand (Compat),Scale,Tile,Keep,Keep Centered,Keep Aspect,Keep Aspect Centered,Keep Aspect Covered"), "set_stretch_mode", "get_stretch_mode"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand"), "set_expand", "has_expand"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "stretch_mode", PROPERTY_HINT_ENUM, "Scale On Expand (Compat),Scale,Tile,Keep,Keep Centered,Keep Aspect,Keep Aspect Centered,Keep Aspect Covered"), "set_stretch_mode", "get_stretch_mode"); BIND_ENUM_CONSTANT(STRETCH_SCALE_ON_EXPAND); BIND_ENUM_CONSTANT(STRETCH_SCALE); diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 3a540d187b..f441364c44 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -901,6 +901,7 @@ void Tree::update_cache() { cache.item_margin = get_constant("item_margin"); cache.button_margin = get_constant("button_margin"); cache.guide_width = get_constant("guide_width"); + cache.draw_guides = get_constant("draw_guides"); cache.draw_relationship_lines = get_constant("draw_relationship_lines"); cache.relationship_line_color = get_color("relationship_line_color"); cache.scroll_border = get_constant("scroll_border"); @@ -1132,7 +1133,9 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 cell_rect.size.x += cache.hseparation; } - VisualServer::get_singleton()->canvas_item_add_line(ci, Point2i(cell_rect.position.x, cell_rect.position.y + cell_rect.size.height), cell_rect.position + cell_rect.size, cache.guide_color, 1); + if (cache.draw_guides) { + VisualServer::get_singleton()->canvas_item_add_line(ci, Point2i(cell_rect.position.x, cell_rect.position.y + cell_rect.size.height), cell_rect.position + cell_rect.size, cache.guide_color, 1); + } if (i == 0) { @@ -1416,7 +1419,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 while (c) { - if (cache.draw_relationship_lines == 1 && (c->get_parent() != root || !hide_root)) { + if (cache.draw_relationship_lines == 1 && (!hide_root || c->parent != root)) { int root_ofs = children_pos.x + ((p_item->disable_folding || hide_folding) ? cache.hseparation : cache.item_margin); int parent_ofs = p_pos.x + ((p_item->disable_folding || hide_folding) ? cache.hseparation : cache.item_margin); Point2i root_pos = Point2i(root_ofs, children_pos.y + label_h / 2) - cache.offset + p_draw_ofs; @@ -2183,6 +2186,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { Ref<InputEventKey> k = p_event; + bool is_command = k.is_valid() && k->get_command(); if (p_event->is_action("ui_right") && p_event->is_pressed()) { if (!cursor_can_exit_tree) accept_event(); @@ -2219,13 +2223,13 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { _go_left(); } - } else if (p_event->is_action("ui_up") && p_event->is_pressed() && !k->get_command()) { + } else if (p_event->is_action("ui_up") && p_event->is_pressed() && !is_command) { if (!cursor_can_exit_tree) accept_event(); _go_up(); - } else if (p_event->is_action("ui_down") && p_event->is_pressed() && !k->get_command()) { + } else if (p_event->is_action("ui_down") && p_event->is_pressed() && !is_command) { if (!cursor_can_exit_tree) accept_event(); @@ -2518,7 +2522,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { pressing_for_editor = false; } - if (cache.click_type == Cache::CLICK_BUTTON) { + if (cache.click_type == Cache::CLICK_BUTTON && cache.click_item != NULL) { // make sure in case of wrong reference after reconstructing whole TreeItems cache.click_item = get_item_at_position(cache.click_pos); emit_signal("button_pressed", cache.click_item, cache.click_column, cache.click_id); @@ -2933,7 +2937,7 @@ void Tree::_notification(int p_what) { if (show_column_titles) { - //title butons + //title buttons int ofs = cache.bg->get_margin(MARGIN_LEFT); for (int i = 0; i < columns.size(); i++) { diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 34138acb85..886ce66e2c 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -434,6 +434,7 @@ private: int button_margin; Point2 offset; int draw_relationship_lines; + int draw_guides; int scroll_border; int scroll_speed; diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index 39e7c73390..812ca0042b 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -90,53 +90,32 @@ void VideoPlayer::_mix_audio() { AudioFrame vol = AudioFrame(volume, volume); - // Copy to server's audio buffer - switch (AudioServer::get_singleton()->get_speaker_mode()) { + int cc = AudioServer::get_singleton()->get_channel_count(); - case AudioServer::SPEAKER_MODE_STEREO: { - AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 0); + if (cc == 1) { + AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 0); + ERR_FAIL_COND(!target); - for (int j = 0; j < buffer_size; j++) { + for (int j = 0; j < buffer_size; j++) { - target[j] += buffer[j] * vol; - } - - } break; - case AudioServer::SPEAKER_SURROUND_31: { - - // FIXME: Implement - } break; - case AudioServer::SPEAKER_SURROUND_51: { - - AudioFrame *targets[2] = { - AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 1), - AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 2), - }; - - for (int j = 0; j < buffer_size; j++) { + target[j] += buffer[j] * vol; + } - AudioFrame frame = buffer[j] * vol; - targets[0][j] = frame; - targets[1][j] = frame; - } - } break; - case AudioServer::SPEAKER_SURROUND_71: { + } else { + AudioFrame *targets[4]; - AudioFrame *targets[3] = { - AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 1), - AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 2), - AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 3) - }; + for (int k = 0; k < cc; k++) { + targets[k] = AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, k); + ERR_FAIL_COND(!targets[k]); + } - for (int j = 0; j < buffer_size; j++) { + for (int j = 0; j < buffer_size; j++) { - AudioFrame frame = buffer[j] * vol; - targets[0][j] += frame; - targets[1][j] += frame; - targets[2][j] += frame; + AudioFrame frame = buffer[j] * vol; + for (int k = 0; k < cc; k++) { + targets[k][j] += frame; } - - } break; + } } } diff --git a/scene/gui/viewport_container.cpp b/scene/gui/viewport_container.cpp index ac5e6020eb..8e0d1cdd38 100644 --- a/scene/gui/viewport_container.cpp +++ b/scene/gui/viewport_container.cpp @@ -121,6 +121,8 @@ void ViewportContainer::_notification(int p_what) { c->set_update_mode(Viewport::UPDATE_ALWAYS); else c->set_update_mode(Viewport::UPDATE_DISABLED); + + c->set_handle_input_locally(false); //do not handle input locally here } } @@ -165,8 +167,34 @@ void ViewportContainer::_input(const Ref<InputEvent> &p_event) { } } +void ViewportContainer::_unhandled_input(const Ref<InputEvent> &p_event) { + + if (Engine::get_singleton()->is_editor_hint()) + return; + + Transform2D xform = get_global_transform(); + + if (stretch) { + Transform2D scale_xf; + scale_xf.scale(Vector2(shrink, shrink)); + xform *= scale_xf; + } + + Ref<InputEvent> ev = p_event->xformed_by(xform.affine_inverse()); + + for (int i = 0; i < get_child_count(); i++) { + + Viewport *c = Object::cast_to<Viewport>(get_child(i)); + if (!c || c->is_input_disabled()) + continue; + + c->unhandled_input(ev); + } +} + void ViewportContainer::_bind_methods() { + ClassDB::bind_method(D_METHOD("_unhandled_input", "event"), &ViewportContainer::_unhandled_input); ClassDB::bind_method(D_METHOD("_input", "event"), &ViewportContainer::_input); ClassDB::bind_method(D_METHOD("set_stretch", "enable"), &ViewportContainer::set_stretch); ClassDB::bind_method(D_METHOD("is_stretch_enabled"), &ViewportContainer::is_stretch_enabled); diff --git a/scene/gui/viewport_container.h b/scene/gui/viewport_container.h index 45c4cd03a1..60aec25959 100644 --- a/scene/gui/viewport_container.h +++ b/scene/gui/viewport_container.h @@ -49,6 +49,7 @@ public: bool is_stretch_enabled() const; void _input(const Ref<InputEvent> &p_event); + void _unhandled_input(const Ref<InputEvent> &p_event); void set_stretch_shrink(int p_shrink); int get_stretch_shrink() const; diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp index a2e890e7a7..89bc8c1226 100644 --- a/scene/main/canvas_layer.cpp +++ b/scene/main/canvas_layer.cpp @@ -35,7 +35,7 @@ void CanvasLayer::set_layer(int p_xform) { layer = p_xform; if (viewport.is_valid()) - VisualServer::get_singleton()->viewport_set_canvas_layer(viewport, canvas, layer); + VisualServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_position_in_parent()); } int CanvasLayer::get_layer() const { @@ -146,19 +146,28 @@ void CanvasLayer::_notification(int p_what) { vp = Node::get_viewport(); } ERR_FAIL_COND(!vp); + + vp->_canvas_layer_add(this); viewport = vp->get_viewport_rid(); VisualServer::get_singleton()->viewport_attach_canvas(viewport, canvas); - VisualServer::get_singleton()->viewport_set_canvas_layer(viewport, canvas, layer); + VisualServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_position_in_parent()); VisualServer::get_singleton()->viewport_set_canvas_transform(viewport, canvas, transform); } break; case NOTIFICATION_EXIT_TREE: { + vp->_canvas_layer_remove(this); VisualServer::get_singleton()->viewport_remove_canvas(viewport, canvas); viewport = RID(); } break; + case NOTIFICATION_MOVED_IN_PARENT: { + + if (is_inside_tree()) + VisualServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_position_in_parent()); + + } break; } } @@ -179,6 +188,7 @@ RID CanvasLayer::get_viewport() const { void CanvasLayer::set_custom_viewport(Node *p_viewport) { ERR_FAIL_NULL(p_viewport); if (is_inside_tree()) { + vp->_canvas_layer_remove(this); VisualServer::get_singleton()->viewport_remove_canvas(viewport, canvas); viewport = RID(); } @@ -198,10 +208,11 @@ void CanvasLayer::set_custom_viewport(Node *p_viewport) { else vp = Node::get_viewport(); + vp->_canvas_layer_add(this); viewport = vp->get_viewport_rid(); VisualServer::get_singleton()->viewport_attach_canvas(viewport, canvas); - VisualServer::get_singleton()->viewport_set_canvas_layer(viewport, canvas, layer); + VisualServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_position_in_parent()); VisualServer::get_singleton()->viewport_set_canvas_transform(viewport, canvas, transform); } } diff --git a/scene/main/node.cpp b/scene/main/node.cpp index d3282c6ada..ea50e7289d 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -157,7 +157,7 @@ void Node::_notification(int p_notification) { // kill children as cleanly as possible while (data.children.size()) { - Node *child = data.children[0]; + Node *child = data.children[data.children.size() - 1]; //begin from the end because its faster and more consistent with creation remove_child(child); memdelete(child); } @@ -1008,6 +1008,32 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { } } +// Return s + 1 as if it were an integer +String increase_numeric_string(const String &s) { + + String res = s; + bool carry = res.length() > 0; + + for (int i = res.length() - 1; i >= 0; i--) { + if (!carry) { + break; + } + CharType n = s[i]; + if (n == '9') { // keep carry as true: 9 + 1 + res[i] = '0'; + } else { + res[i] = s[i] + 1; + carry = false; + } + } + + if (carry) { + res = "1" + res; + } + + return res; +} + String Node::_generate_serial_child_name(Node *p_child) { String name = p_child->data.name; @@ -1040,42 +1066,38 @@ String Node::_generate_serial_child_name(Node *p_child) { } String nnsep = _get_name_num_separator(); - int num = 0; - bool explicit_zero = false; - if (nums.length() > 0 && name.substr(name.length() - nnsep.length() - nums.length(), nnsep.length()) == nnsep) { - // Base name + Separator + Number - num = nums.to_int(); - name = name.substr(0, name.length() - nnsep.length() - nums.length()); // Keep base name - if (num == 0) { - explicit_zero = true; + int name_last_index = name.length() - nnsep.length() - nums.length(); + + // Assign the base name + separator to name if we have numbers preceded by a separator + if (nums.length() > 0 && name.substr(name_last_index, nnsep.length()) == nnsep) { + name = name.substr(0, name_last_index + nnsep.length()).strip_edges(); + } else { + nums = ""; + } + + Vector<String> children_names; + + for (int i = 0; i < data.children.size(); i++) { + String child_name = data.children[i]->data.name; + if (data.children[i] == p_child) + continue; + if (child_name.begins_with(name)) { + children_names.push_back(child_name); } } - int num_places = nums.length(); for (;;) { - String attempt = (name + (num > 0 || explicit_zero ? nnsep + itos(num).pad_zeros(num_places) : "")).strip_edges(); - bool found = false; - for (int i = 0; i < data.children.size(); i++) { - if (data.children[i] == p_child) - continue; - if (data.children[i]->data.name == attempt) { - found = true; - break; - } - } - if (!found) { + String attempt = name + nums; + + if (children_names.find(attempt) == -1) { return attempt; } else { - if (num == 0) { - if (explicit_zero) { - // Name ended in separator + 0; user expects to get to separator + 1 - num = 1; - } else { - // Name was undecorated so skip to 2 for a more natural result - num = 2; - } + if (nums.length() == 0) { + // Name was undecorated so skip to 2 for a more natural result + nums = "2"; + name += nnsep; // Add separator because nums.length() > 0 was false } else { - num++; + nums = increase_numeric_string(nums); } } } @@ -1182,13 +1204,24 @@ void Node::remove_child(Node *p_child) { ERR_FAIL_COND(data.blocked > 0); } + int child_count = data.children.size(); + Node **children = data.children.ptrw(); int idx = -1; - for (int i = 0; i < data.children.size(); i++) { - if (data.children[i] == p_child) { + if (p_child->data.pos >= 0 && p_child->data.pos < child_count) { + if (children[p_child->data.pos] == p_child) { + idx = p_child->data.pos; + } + } + + if (idx == -1) { //maybe removed while unparenting or something and index was not updated, so just in case the above fails, try this. + for (int i = 0; i < child_count; i++) { - idx = i; - break; + if (children[i] == p_child) { + + idx = i; + break; + } } } @@ -1205,9 +1238,14 @@ void Node::remove_child(Node *p_child) { data.children.remove(idx); - for (int i = idx; i < data.children.size(); i++) { + //update pointer and size + child_count = data.children.size(); + children = data.children.ptrw(); - data.children[i]->data.pos = i; + for (int i = idx; i < child_count; i++) { + + children[i]->data.pos = i; + children[i]->notification(NOTIFICATION_MOVED_IN_PARENT); } p_child->data.parent = NULL; @@ -1835,7 +1873,7 @@ void Node::set_editable_instance(Node *p_node, bool p_editable) { } } -bool Node::is_editable_instance(Node *p_node) const { +bool Node::is_editable_instance(const Node *p_node) const { if (!p_node) return false; //easier, null is never editable :) @@ -2182,15 +2220,17 @@ void Node::_duplicate_signals(const Node *p_original, Node *p_copy) const { continue; } NodePath ptarget = p_original->get_path_to(target); - Node *copytarget = p_copy->get_node(ptarget); - // Cannot find a path to the duplicate target, so it seems it's not part - // of the duplicated and not yet parented hierarchy, so at least try to connect + Node *copytarget = target; + + // Atempt to find a path to the duplicate target, if it seems it's not part + // of the duplicated and not yet parented hierarchy then at least try to connect // to the same target as the original - if (!copytarget) - copytarget = target; - if (copy && copytarget) { + if (p_copy->has_node(ptarget)) + copytarget = p_copy->get_node(ptarget); + + if (copy && copytarget && !copy->is_connected(E->get().signal, copytarget, E->get().method)) { copy->connect(E->get().signal, copytarget, E->get().method, E->get().binds, E->get().flags); } } @@ -2486,6 +2526,7 @@ void Node::_set_tree(SceneTree *p_tree) { tree_changed_b->tree_changed(); } +#ifdef DEBUG_ENABLED static void _Node_debug_sn(Object *p_obj) { Node *n = Object::cast_to<Node>(p_obj); @@ -2507,6 +2548,7 @@ static void _Node_debug_sn(Object *p_obj) { path = String(p->get_name()) + "/" + p->get_path_to(n); print_line(itos(p_obj->get_instance_id()) + " - Stray Node: " + path + " (Type: " + n->get_class() + ")"); } +#endif // DEBUG_ENABLED void Node::_print_stray_nodes() { @@ -2516,7 +2558,6 @@ void Node::_print_stray_nodes() { void Node::print_stray_nodes() { #ifdef DEBUG_ENABLED - ObjectDB::debug_objects(_Node_debug_sn); #endif } @@ -2721,7 +2762,7 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_import_path", "import_path"), &Node::set_import_path); ClassDB::bind_method(D_METHOD("_get_import_path"), &Node::get_import_path); - ADD_PROPERTYNZ(PropertyInfo(Variant::NODE_PATH, "_import_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_import_path", "_get_import_path"); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "_import_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_import_path", "_get_import_path"); { MethodInfo mi; @@ -2779,18 +2820,18 @@ void Node::_bind_methods() { ADD_SIGNAL(MethodInfo("tree_exiting")); ADD_SIGNAL(MethodInfo("tree_exited")); - //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/process" ),"set_process","is_processing") ; - //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/physics_process" ), "set_physics_process","is_physics_processing") ; - //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/input" ), "set_process_input","is_processing_input" ) ; - //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/unhandled_input" ), "set_process_unhandled_input","is_processing_unhandled_input" ) ; + //ADD_PROPERTY( PropertyInfo( Variant::BOOL, "process/process" ),"set_process","is_processing") ; + //ADD_PROPERTY( PropertyInfo( Variant::BOOL, "process/physics_process" ), "set_physics_process","is_physics_processing") ; + //ADD_PROPERTY( PropertyInfo( Variant::BOOL, "process/input" ), "set_process_input","is_processing_input" ) ; + //ADD_PROPERTY( PropertyInfo( Variant::BOOL, "process/unhandled_input" ), "set_process_unhandled_input","is_processing_unhandled_input" ) ; ADD_GROUP("Pause", "pause_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "pause_mode", PROPERTY_HINT_ENUM, "Inherit,Stop,Process"), "set_pause_mode", "get_pause_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "editor/display_folded", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_display_folded", "is_displayed_folded"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "name", PROPERTY_HINT_NONE, "", 0), "set_name", "get_name"); - ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "filename", PROPERTY_HINT_NONE, "", 0), "set_filename", "get_filename"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "owner", PROPERTY_HINT_RESOURCE_TYPE, "Node", 0), "set_owner", "get_owner"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "multiplayer", PROPERTY_HINT_RESOURCE_TYPE, "MultiplayerAPI", 0), "", "get_multiplayer"); - ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "custom_multiplayer", PROPERTY_HINT_RESOURCE_TYPE, "MultiplayerAPI", 0), "set_custom_multiplayer", "get_custom_multiplayer"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "pause_mode", PROPERTY_HINT_ENUM, "Inherit,Stop,Process"), "set_pause_mode", "get_pause_mode"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor/display_folded", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "set_display_folded", "is_displayed_folded"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "name", PROPERTY_HINT_NONE, "", 0), "set_name", "get_name"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "filename", PROPERTY_HINT_NONE, "", 0), "set_filename", "get_filename"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "owner", PROPERTY_HINT_RESOURCE_TYPE, "Node", 0), "set_owner", "get_owner"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "multiplayer", PROPERTY_HINT_RESOURCE_TYPE, "MultiplayerAPI", 0), "", "get_multiplayer"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "custom_multiplayer", PROPERTY_HINT_RESOURCE_TYPE, "MultiplayerAPI", 0), "set_custom_multiplayer", "get_custom_multiplayer"); BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta"))); BIND_VMETHOD(MethodInfo("_physics_process", PropertyInfo(Variant::REAL, "delta"))); diff --git a/scene/main/node.h b/scene/main/node.h index a7baebc9c2..78db12dda9 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -303,7 +303,7 @@ public: String get_filename() const; void set_editable_instance(Node *p_node, bool p_editable); - bool is_editable_instance(Node *p_node) const; + bool is_editable_instance(const Node *p_node) const; void set_editable_instances(const HashMap<NodePath, int> &p_editable_instances); HashMap<NodePath, int> get_editable_instances() const; diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index fdbe3b57f0..3f664bab10 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -535,10 +535,15 @@ bool SceneTree::idle(float p_time) { //go through timers + List<Ref<SceneTreeTimer> >::Element *L = timers.back(); //last element + for (List<Ref<SceneTreeTimer> >::Element *E = timers.front(); E;) { List<Ref<SceneTreeTimer> >::Element *N = E->next(); if (pause && !E->get()->is_pause_mode_process()) { + if (E == L) { + break; //break on last, so if new timers were added during list traversal, ignore them. + } E = N; continue; } @@ -550,6 +555,9 @@ bool SceneTree::idle(float p_time) { E->get()->emit_signal("timeout"); timers.erase(E); } + if (E == L) { + break; //break on last, so if new timers were added during list traversal, ignore them. + } E = N; } @@ -1944,6 +1952,7 @@ SceneTree::SceneTree() { debug_navigation_color = GLOBAL_DEF("debug/shapes/navigation/geometry_color", Color(0.1, 1.0, 0.7, 0.4)); debug_navigation_disabled_color = GLOBAL_DEF("debug/shapes/navigation/disabled_geometry_color", Color(1.0, 0.7, 0.1, 0.4)); collision_debug_contacts = GLOBAL_DEF("debug/shapes/collision/max_contacts_displayed", 10000); + ProjectSettings::get_singleton()->set_custom_property_info("debug/shapes/collision/max_contacts_displayed", PropertyInfo(Variant::INT, "debug/shapes/collision/max_contacts_displayed", PROPERTY_HINT_RANGE, "0,20000,1")); // No negative tree_version = 1; physics_process_time = 1; @@ -1964,6 +1973,7 @@ SceneTree::SceneTree() { root = memnew(Viewport); root->set_name("root"); + root->set_handle_input_locally(false); if (!root->get_world().is_valid()) root->set_world(Ref<World>(memnew(World))); @@ -1977,7 +1987,9 @@ SceneTree::SceneTree() { current_scene = NULL; int ref_atlas_size = GLOBAL_DEF("rendering/quality/reflections/atlas_size", 2048); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/reflections/atlas_size", PropertyInfo(Variant::INT, "rendering/quality/reflections/atlas_size", PROPERTY_HINT_RANGE, "0,8192,or_greater")); //next_power_of_2 will return a 0 as min value int ref_atlas_subdiv = GLOBAL_DEF("rendering/quality/reflections/atlas_subdiv", 8); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/reflections/atlas_subdiv", PropertyInfo(Variant::INT, "rendering/quality/reflections/atlas_subdiv", PROPERTY_HINT_RANGE, "0,32,or_greater")); //next_power_of_2 will return a 0 as min value int msaa_mode = GLOBAL_DEF("rendering/quality/filters/msaa", 0); ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/filters/msaa", PropertyInfo(Variant::INT, "rendering/quality/filters/msaa", PROPERTY_HINT_ENUM, "Disabled,2x,4x,8x,16x")); root->set_msaa(Viewport::MSAA(msaa_mode)); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index bb379ff4af..3e27c86c67 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -45,6 +45,7 @@ #include "scene/gui/panel.h" #include "scene/gui/panel_container.h" #include "scene/gui/popup_menu.h" +#include "scene/main/canvas_layer.h" #include "scene/main/timer.h" #include "scene/resources/mesh.h" #include "scene/scene_string_names.h" @@ -188,7 +189,7 @@ Viewport::GUI::GUI() { dragging = false; mouse_focus = NULL; mouse_click_grabber = NULL; - mouse_focus_button = -1; + mouse_focus_mask = 0; key_focus = NULL; mouse_over = NULL; @@ -231,6 +232,25 @@ void Viewport::update_worlds() { find_world()->_update(get_tree()->get_frame()); } +void Viewport::_collision_object_input_event(CollisionObject *p_object, Camera *p_camera, const Ref<InputEvent> &p_input_event, const Vector3 &p_pos, const Vector3 &p_normal, int p_shape, bool p_discard_empty_motion) { + + Transform object_transform = p_object->get_global_transform(); + Transform camera_transform = p_camera->get_global_transform(); + ObjectID id = p_object->get_instance_id(); + + if (p_discard_empty_motion) { + //avoid sending the event unnecesarily if nothing really changed in the context + Ref<InputEventMouseMotion> mm = p_input_event; + if (mm.is_valid() && object_transform == physics_last_object_transform && camera_transform == physics_last_camera_transform && physics_last_id == id) { + return; //discarded + } + } + p_object->_input_event(camera, p_input_event, p_pos, p_normal, p_shape); + physics_last_object_transform = object_transform; + physics_last_camera_transform = camera_transform; + physics_last_id = id; +} + void Viewport::_test_new_mouseover(ObjectID new_collider) { #ifndef _3D_DISABLED if (new_collider != physics_object_over) { @@ -402,6 +422,34 @@ void Viewport::_notification(int p_what) { PhysicsDirectSpaceState::RayResult result; Physics2DDirectSpaceState *ss2d = Physics2DServer::get_singleton()->space_get_direct_state(find_world_2d()->get_space()); + bool discard_empty_motion = false; + + { // if no motion event exists, create a new one. This is necessary because objects or camera may have moved. + // while this extra event is sent, it is checked if both camera and last object and last ID did not move. If nothing changed, the event is discarded to avoid flooding with unnecesary motion events every frame + bool has_mouse_motion = false; + for (List<Ref<InputEvent> >::Element *E = physics_picking_events.front(); E; E = E->next()) { + Ref<InputEventMouseMotion> mm = E->get(); + if (mm.is_valid()) { + has_mouse_motion = true; + break; + } + } + + if (!has_mouse_motion) { + Ref<InputEventMouseMotion> mm; + mm.instance(); + mm->set_global_position(physics_last_mousepos); + mm->set_position(physics_last_mousepos); + mm->set_alt(physics_last_mouse_state.alt); + mm->set_shift(physics_last_mouse_state.shift); + mm->set_control(physics_last_mouse_state.control); + mm->set_metakey(physics_last_mouse_state.meta); + mm->set_button_mask(physics_last_mouse_state.mouse_mask); + physics_picking_events.push_back(mm); + discard_empty_motion = true; + } + } + bool motion_tested = false; while (physics_picking_events.size()) { @@ -418,12 +466,37 @@ void Viewport::_notification(int p_what) { pos = mm->get_position(); motion_tested = true; physics_last_mousepos = pos; + physics_last_mouse_state.alt = mm->get_alt(); + physics_last_mouse_state.shift = mm->get_shift(); + physics_last_mouse_state.control = mm->get_control(); + physics_last_mouse_state.meta = mm->get_metakey(); + physics_last_mouse_state.mouse_mask = mm->get_button_mask(); } Ref<InputEventMouseButton> mb = ev; if (mb.is_valid()) { pos = mb->get_position(); + physics_last_mouse_state.alt = mb->get_alt(); + physics_last_mouse_state.shift = mb->get_shift(); + physics_last_mouse_state.control = mb->get_control(); + physics_last_mouse_state.meta = mb->get_metakey(); + + if (mb->is_pressed()) { + physics_last_mouse_state.mouse_mask |= (1 << (mb->get_button_index() - 1)); + } else { + physics_last_mouse_state.mouse_mask &= ~(1 << (mb->get_button_index() - 1)); + } + } + + Ref<InputEventKey> k = ev; + if (k.is_valid()) { + //only for mask + physics_last_mouse_state.alt = k->get_alt(); + physics_last_mouse_state.shift = k->get_shift(); + physics_last_mouse_state.control = k->get_control(); + physics_last_mouse_state.meta = k->get_metakey(); + continue; } Ref<InputEventScreenDrag> sd = ev; @@ -443,24 +516,39 @@ void Viewport::_notification(int p_what) { uint64_t frame = get_tree()->get_frame(); - Vector2 point = get_canvas_transform().affine_inverse().xform(pos); Physics2DDirectSpaceState::ShapeResult res[64]; - int rc = ss2d->intersect_point(point, res, 64, Set<RID>(), 0xFFFFFFFF, true, true, true); - for (int i = 0; i < rc; i++) { - - if (res[i].collider_id && res[i].collider) { - CollisionObject2D *co = Object::cast_to<CollisionObject2D>(res[i].collider); - if (co) { - - Map<ObjectID, uint64_t>::Element *E = physics_2d_mouseover.find(res[i].collider_id); - if (!E) { - E = physics_2d_mouseover.insert(res[i].collider_id, frame); - co->_mouse_enter(); - } else { - E->get() = frame; - } + for (Set<CanvasLayer *>::Element *E = canvas_layers.front(); E; E = E->next()) { + Transform2D canvas_transform; + ObjectID canvas_layer_id; + if (E->get()) { + // A descendant CanvasLayer + canvas_transform = E->get()->get_transform(); + canvas_layer_id = E->get()->get_instance_id(); + } else { + // This Viewport's builtin canvas + canvas_transform = get_canvas_transform(); + canvas_layer_id = 0; + } + + Vector2 point = canvas_transform.affine_inverse().xform(pos); + + int rc = ss2d->intersect_point_on_canvas(point, canvas_layer_id, res, 64, Set<RID>(), 0xFFFFFFFF, true, true, true); + for (int i = 0; i < rc; i++) { + + if (res[i].collider_id && res[i].collider) { + CollisionObject2D *co = Object::cast_to<CollisionObject2D>(res[i].collider); + if (co) { - co->_input_event(this, ev, res[i].shape); + Map<ObjectID, uint64_t>::Element *E = physics_2d_mouseover.find(res[i].collider_id); + if (!E) { + E = physics_2d_mouseover.insert(res[i].collider_id, frame); + co->_mouse_enter(); + } else { + E->get() = frame; + } + + co->_input_event(this, ev, res[i].shape); + } } } } @@ -494,7 +582,7 @@ void Viewport::_notification(int p_what) { CollisionObject *co = Object::cast_to<CollisionObject>(ObjectDB::get_instance(physics_object_capture)); if (co) { - co->_input_event(camera, ev, Vector3(), Vector3(), 0); + _collision_object_input_event(co, camera, ev, Vector3(), Vector3(), 0, discard_empty_motion); captured = true; if (mb.is_valid() && mb->get_button_index() == 1 && !mb->is_pressed()) { physics_object_capture = 0; @@ -512,7 +600,7 @@ void Viewport::_notification(int p_what) { if (last_id) { if (ObjectDB::get_instance(last_id) && last_object) { //good, exists - last_object->_input_event(camera, ev, result.position, result.normal, result.shape); + _collision_object_input_event(last_object, camera, ev, result.position, result.normal, result.shape, discard_empty_motion); if (last_object->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { physics_object_capture = last_id; } @@ -535,7 +623,7 @@ void Viewport::_notification(int p_what) { CollisionObject *co = Object::cast_to<CollisionObject>(result.collider); if (co) { - co->_input_event(camera, ev, result.position, result.normal, result.shape); + _collision_object_input_event(co, camera, ev, result.position, result.normal, result.shape, discard_empty_motion); last_object = co; last_id = result.collider_id; new_collider = last_id; @@ -583,15 +671,7 @@ void Viewport::_notification(int p_what) { case SceneTree::NOTIFICATION_WM_FOCUS_OUT: { if (gui.mouse_focus) { //if mouse is being pressed, send a release event - Ref<InputEventMouseButton> mb; - mb.instance(); - mb->set_position(gui.mouse_focus->get_local_mouse_position()); - mb->set_global_position(gui.mouse_focus->get_local_mouse_position()); - mb->set_button_index(gui.mouse_focus_button); - mb->set_pressed(false); - Control *c = gui.mouse_focus; - gui.mouse_focus = NULL; - c->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); + _drop_mouse_focus(); } } break; } @@ -629,10 +709,8 @@ Rect2 Viewport::get_visible_rect() const { Rect2 r; if (size == Size2()) { - - r = Rect2(Point2(), Size2(OS::get_singleton()->get_window_size().width, OS::get_singleton()->get_window_size().height)); + r = Rect2(Point2(), OS::get_singleton()->get_window_size()); } else { - r = Rect2(Point2(), size); } @@ -856,6 +934,16 @@ void Viewport::_camera_make_next_current(Camera *p_exclude) { } #endif +void Viewport::_canvas_layer_add(CanvasLayer *p_canvas_layer) { + + canvas_layers.insert(p_canvas_layer); +} + +void Viewport::_canvas_layer_remove(CanvasLayer *p_canvas_layer) { + + canvas_layers.erase(p_canvas_layer); +} + void Viewport::set_transparent_background(bool p_enable) { transparent_bg = p_enable; @@ -1414,12 +1502,17 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu Control *control = Object::cast_to<Control>(ci); if (control) { - control->emit_signal(SceneStringNames::get_singleton()->gui_input, ev); //signal should be first, so it's possible to override an event (and then accept it) + if (control->data.mouse_filter != Control::MOUSE_FILTER_IGNORE) { + control->emit_signal(SceneStringNames::get_singleton()->gui_input, ev); //signal should be first, so it's possible to override an event (and then accept it) + } if (gui.key_event_accepted) break; if (!control->is_inside_tree()) break; - control->call_multilevel(SceneStringNames::get_singleton()->_gui_input, ev); + + if (control->data.mouse_filter != Control::MOUSE_FILTER_IGNORE) { + control->call_multilevel(SceneStringNames::get_singleton()->_gui_input, ev); + } if (!control->is_inside_tree() || control->is_set_as_toplevel()) break; @@ -1585,10 +1678,10 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (mb->is_pressed()) { Size2 pos = mpos; - if (gui.mouse_focus && mb->get_button_index() != gui.mouse_focus_button) { - - //do not steal mouse focus and stuff + if (gui.mouse_focus_mask) { + //do not steal mouse focus and stuff while a focus mask exists + gui.mouse_focus_mask |= 1 << (mb->get_button_index() - 1); //add the button to the mask } else { bool is_handled = false; @@ -1603,7 +1696,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (top->data.modal_exclusive || top->data.modal_frame == Engine::get_singleton()->get_frames_drawn()) { //cancel event, sorry, modal exclusive EATS UP ALL //alternative, you can't pop out a window the same frame it was made modal (fixes many issues) - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; // no one gets the event if exclusive NO ONE } @@ -1621,7 +1714,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { } if (is_handled) { - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } @@ -1633,7 +1726,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { */ gui.mouse_focus = _gui_find_control(pos); - gui.mouse_focus_button = mb->get_button_index(); + gui.mouse_focus_mask = 1 << (mb->get_button_index() - 1); if (!gui.mouse_focus) { return; @@ -1654,7 +1747,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { mb->set_position(pos); #ifdef DEBUG_ENABLED - if (ScriptDebugger::get_singleton()) { + if (ScriptDebugger::get_singleton() && gui.mouse_focus) { Array arr; arr.push_back(gui.mouse_focus->get_path()); @@ -1687,11 +1780,11 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { } } - if (gui.mouse_focus->can_process()) { + if (gui.mouse_focus && gui.mouse_focus->can_process()) { _gui_call_input(gui.mouse_focus, mb); } - get_tree()->set_input_as_handled(); + set_input_as_handled(); if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == BUTTON_LEFT) { @@ -1736,6 +1829,8 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { //change mouse accordingly } + gui.mouse_focus_mask &= ~(1 << (mb->get_button_index() - 1)); //remove from mask + if (!gui.mouse_focus) { //release event is only sent if a mouse focus (previously pressed button) exists return; @@ -1751,12 +1846,11 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Control *mouse_focus = gui.mouse_focus; //disable mouse focus if needed before calling input, this makes popups on mouse press event work better, as the release will never be received otherwise - if (mb->get_button_index() == gui.mouse_focus_button) { + if (gui.mouse_focus_mask == 0) { gui.mouse_focus = NULL; - gui.mouse_focus_button = -1; } - if (mouse_focus->can_process()) { + if (mouse_focus && mouse_focus->can_process()) { _gui_call_input(mouse_focus, mb); } @@ -1765,7 +1859,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.drag_data=Variant(); //always clear }*/ - get_tree()->set_input_as_handled(); + set_input_as_handled(); } } @@ -1799,7 +1893,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (gui.drag_data.get_type() != Variant::NIL) { gui.mouse_focus = NULL; + gui.mouse_focus_mask = 0; + break; } else { + if (gui.drag_preview != NULL) { + ERR_PRINT("Don't set a drag preview and return null data. Preview was deleted and drag request ignored."); + memdelete(gui.drag_preview); + gui.drag_preview = NULL; + } gui.dragging = false; } @@ -1841,8 +1942,16 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { MenuButton *popup_menu_parent = NULL; MenuButton *menu_button = Object::cast_to<MenuButton>(over); - if (popup_menu) + if (popup_menu) { popup_menu_parent = Object::cast_to<MenuButton>(popup_menu->get_parent()); + if (!popup_menu_parent) { + // Go through the parents to see if there's a MenuButton at the end. + while (Object::cast_to<PopupMenu>(popup_menu->get_parent())) { + popup_menu = Object::cast_to<PopupMenu>(popup_menu->get_parent()); + } + popup_menu_parent = Object::cast_to<MenuButton>(popup_menu->get_parent()); + } + } // If the mouse is over a menu button, this menu will open automatically // if there is already a pop-up menu open at the same hierarchical level. @@ -1956,11 +2065,11 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { OS::get_singleton()->set_cursor_shape((OS::CursorShape)cursor_shape); - if (over->can_process()) { + if (over && over->can_process()) { _gui_call_input(over, mm); } - get_tree()->set_input_as_handled(); + set_input_as_handled(); if (gui.drag_data.get_type() != Variant::NIL && mm->get_button_mask() & BUTTON_MASK_LEFT) { @@ -2003,7 +2112,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { touch_event->set_position(pos); _gui_call_input(over, touch_event); } - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } } else if (gui.mouse_focus) { @@ -2015,7 +2124,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { _gui_call_input(gui.mouse_focus, touch_event); } - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } } @@ -2043,7 +2152,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gesture_event->set_position(pos); _gui_call_input(over, gesture_event); } - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } } @@ -2081,7 +2190,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { _gui_call_input(over, drag_event); } - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } } @@ -2103,7 +2212,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (gui.key_event_accepted) { - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } } @@ -2118,7 +2227,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { top->_modal_stack_remove(); top->hide(); // Close modal, set input as handled - get_tree()->set_input_as_handled(); + set_input_as_handled(); return; } } @@ -2167,7 +2276,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (next) { next->grab_focus(); - get_tree()->set_input_as_handled(); + set_input_as_handled(); } } } @@ -2297,7 +2406,7 @@ void Viewport::_gui_unfocus_control(Control *p_control) { void Viewport::_gui_hid_control(Control *p_control) { if (gui.mouse_focus == p_control) { - gui.mouse_focus = NULL; + _drop_mouse_focus(); } /* ??? @@ -2324,8 +2433,10 @@ void Viewport::_gui_hid_control(Control *p_control) { void Viewport::_gui_remove_control(Control *p_control) { - if (gui.mouse_focus == p_control) + if (gui.mouse_focus == p_control) { gui.mouse_focus = NULL; + gui.mouse_focus_mask = 0; + } if (gui.key_focus == p_control) gui.key_focus = NULL; if (gui.mouse_over == p_control) @@ -2371,7 +2482,28 @@ void Viewport::_gui_accept_event() { gui.key_event_accepted = true; if (is_inside_tree()) - get_tree()->set_input_as_handled(); + set_input_as_handled(); +} + +void Viewport::_drop_mouse_focus() { + + Control *c = gui.mouse_focus; + int mask = gui.mouse_focus_mask; + gui.mouse_focus = NULL; + gui.mouse_focus_mask = 0; + + for (int i = 0; i < 3; i++) { + + if (mask & (1 << i)) { + Ref<InputEventMouseButton> mb; + mb.instance(); + mb->set_position(c->get_local_mouse_position()); + mb->set_global_position(c->get_local_mouse_position()); + mb->set_button_index(i + 1); + mb->set_pressed(false); + c->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); + } + } } List<Control *>::Element *Viewport::_gui_show_modal(Control *p_control) { @@ -2383,15 +2515,8 @@ List<Control *>::Element *Viewport::_gui_show_modal(Control *p_control) { p_control->_modal_set_prev_focus_owner(0); if (gui.mouse_focus && !p_control->is_a_parent_of(gui.mouse_focus) && !gui.mouse_click_grabber) { - Ref<InputEventMouseButton> mb; - mb.instance(); - mb->set_position(gui.mouse_focus->get_local_mouse_position()); - mb->set_global_position(gui.mouse_focus->get_local_mouse_position()); - mb->set_button_index(gui.mouse_focus_button); - mb->set_pressed(false); - Control *c = gui.mouse_focus; - gui.mouse_focus = NULL; - c->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); + + _drop_mouse_focus(); } return gui.modal_stack.back(); @@ -2421,24 +2546,45 @@ void Viewport::_post_gui_grab_click_focus() { if (gui.mouse_focus == focus_grabber) return; - Ref<InputEventMouseButton> mb; - mb.instance(); - - //send unclic + int mask = gui.mouse_focus_mask; Point2 click = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos); - mb->set_position(click); - mb->set_button_index(gui.mouse_focus_button); - mb->set_pressed(false); - gui.mouse_focus->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); + + for (int i = 0; i < 3; i++) { + + if (mask & (1 << i)) { + + Ref<InputEventMouseButton> mb; + mb.instance(); + + //send unclic + + mb->set_position(click); + mb->set_button_index(i + 1); + mb->set_pressed(false); + gui.mouse_focus->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); + } + } gui.mouse_focus = focus_grabber; gui.focus_inv_xform = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse(); click = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos); - mb->set_position(click); - mb->set_button_index(gui.mouse_focus_button); - mb->set_pressed(true); - gui.mouse_focus->call_deferred(SceneStringNames::get_singleton()->_gui_input, mb); + + for (int i = 0; i < 3; i++) { + + if (mask & (1 << i)) { + + Ref<InputEventMouseButton> mb; + mb.instance(); + + //send clic + + mb->set_position(click); + mb->set_button_index(i + 1); + mb->set_pressed(true); + gui.mouse_focus->call_deferred(SceneStringNames::get_singleton()->_gui_input, mb); + } + } } } @@ -2448,11 +2594,13 @@ void Viewport::input(const Ref<InputEvent> &p_event) { ERR_FAIL_COND(!is_inside_tree()); - if (!get_tree()->is_input_handled()) { + local_input_handled = false; + + if (!is_input_handled()) { get_tree()->_call_input_pause(input_group, "_input", p_event); //not a bug, must happen before GUI, order is _input -> gui input -> _unhandled input } - if (!get_tree()->is_input_handled()) { + if (!is_input_handled()) { _gui_input_event(p_event); } //get_tree()->call_group(SceneTree::GROUP_CALL_REVERSE|SceneTree::GROUP_CALL_REALTIME|SceneTree::GROUP_CALL_MULIILEVEL,gui_input_group,"_gui_input",p_event); //special one for GUI, as controls use their own process check @@ -2475,7 +2623,10 @@ void Viewport::unhandled_input(const Ref<InputEvent> &p_event) { (Object::cast_to<InputEventMouseButton>(*p_event) || Object::cast_to<InputEventMouseMotion>(*p_event) || Object::cast_to<InputEventScreenDrag>(*p_event) || - Object::cast_to<InputEventScreenTouch>(*p_event))) { + Object::cast_to<InputEventScreenTouch>(*p_event) || + Object::cast_to<InputEventKey>(*p_event) //to remember state + + )) { physics_picking_events.push_back(p_event); } } @@ -2683,6 +2834,33 @@ bool Viewport::is_snap_controls_to_pixels_enabled() const { bool Viewport::gui_is_dragging() const { return gui.dragging; } + +void Viewport::set_input_as_handled() { + if (handle_input_locally) { + local_input_handled = true; + } else { + ERR_FAIL_COND(!is_inside_tree()); + get_tree()->set_input_as_handled(); + } +} + +bool Viewport::is_input_handled() const { + if (handle_input_locally) { + return local_input_handled; + } else { + ERR_FAIL_COND_V(!is_inside_tree(), false); + return get_tree()->is_input_handled(); + } +} + +void Viewport::set_handle_input_locally(bool p_enable) { + handle_input_locally = p_enable; +} + +bool Viewport::is_handling_input_locally() const { + return handle_input_locally; +} + void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_use_arvr", "use"), &Viewport::set_use_arvr); @@ -2795,6 +2973,12 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_shadow_atlas_quadrant_subdiv", "quadrant", "subdiv"), &Viewport::set_shadow_atlas_quadrant_subdiv); ClassDB::bind_method(D_METHOD("get_shadow_atlas_quadrant_subdiv", "quadrant"), &Viewport::get_shadow_atlas_quadrant_subdiv); + ClassDB::bind_method(D_METHOD("set_input_as_handled"), &Viewport::set_input_as_handled); + ClassDB::bind_method(D_METHOD("is_input_handled"), &Viewport::is_input_handled); + + ClassDB::bind_method(D_METHOD("set_handle_input_locally", "enable"), &Viewport::set_handle_input_locally); + ClassDB::bind_method(D_METHOD("is_handling_input_locally"), &Viewport::is_handling_input_locally); + ClassDB::bind_method(D_METHOD("_subwindow_visibility_changed"), &Viewport::_subwindow_visibility_changed); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "arvr"), "set_use_arvr", "use_arvr"); @@ -2804,6 +2988,7 @@ void Viewport::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world", PROPERTY_HINT_RESOURCE_TYPE, "World"), "set_world", "get_world"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world_2d", PROPERTY_HINT_RESOURCE_TYPE, "World2D", 0), "set_world_2d", "get_world_2d"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "transparent_bg"), "set_transparent_background", "has_transparent_background"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "handle_input_locally"), "set_handle_input_locally", "is_handling_input_locally"); ADD_GROUP("Rendering", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "msaa", PROPERTY_HINT_ENUM, "Disabled,2x,4x,8x,16x"), "set_msaa", "get_msaa"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hdr"), "set_hdr", "get_hdr"); @@ -2905,6 +3090,7 @@ Viewport::Viewport() { parent = NULL; listener = NULL; camera = NULL; + canvas_layers.insert(NULL); // This eases picking code (interpreted as the canvas of the Viewport) arvr = false; size_override = false; size_override_stretch = false; @@ -2945,6 +3131,7 @@ Viewport::Viewport() { //gui.tooltip_timer->force_parent_owned(); gui.tooltip_delay = GLOBAL_DEF("gui/timers/tooltip_delay_sec", 0.7); + ProjectSettings::get_singleton()->set_custom_property_info("gui/timers/tooltip_delay_sec", PropertyInfo(Variant::REAL, "gui/timers/tooltip_delay_sec", PROPERTY_HINT_RANGE, "0,5,0.01,or_greater")); // No negative numbers gui.tooltip = NULL; gui.tooltip_label = NULL; @@ -2961,6 +3148,14 @@ Viewport::Viewport() { clear_mode = CLEAR_MODE_ALWAYS; snap_controls_to_pixels = true; + physics_last_mouse_state.alt = false; + physics_last_mouse_state.control = false; + physics_last_mouse_state.shift = false; + physics_last_mouse_state.meta = false; + physics_last_mouse_state.mouse_mask = 0; + local_input_handled = false; + handle_input_locally = true; + physics_last_id = 0; //ensures first time there will be a check } Viewport::~Viewport() { diff --git a/scene/main/viewport.h b/scene/main/viewport.h index c1a4c0e3eb..278350b1c9 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -45,10 +45,12 @@ class Camera2D; class Listener; class Control; class CanvasItem; +class CanvasLayer; class Panel; class Label; class Timer; class Viewport; +class CollisionObject; class ViewportTexture : public Texture { @@ -163,6 +165,7 @@ private: Camera *camera; Set<Camera *> cameras; + Set<CanvasLayer *> canvas_layers; RID viewport; RID current_canvas; @@ -203,7 +206,25 @@ private: List<Ref<InputEvent> > physics_picking_events; ObjectID physics_object_capture; ObjectID physics_object_over; + Transform physics_last_object_transform; + Transform physics_last_camera_transform; + ObjectID physics_last_id; Vector2 physics_last_mousepos; + struct { + + bool alt; + bool control; + bool shift; + bool meta; + int mouse_mask; + + } physics_last_mouse_state; + + void _collision_object_input_event(CollisionObject *p_object, Camera *p_camera, const Ref<InputEvent> &p_input_event, const Vector3 &p_pos, const Vector3 &p_normal, int p_shape, bool p_discard_empty_motion); + + bool handle_input_locally; + bool local_input_handled; + void _test_new_mouseover(ObjectID new_collider); Map<ObjectID, uint64_t> physics_2d_mouseover; @@ -251,7 +272,7 @@ private: bool key_event_accepted; Control *mouse_focus; Control *mouse_click_grabber; - int mouse_focus_button; + int mouse_focus_mask; Control *key_focus; Control *mouse_over; Control *tooltip; @@ -354,6 +375,12 @@ private: void _camera_remove(Camera *p_camera); void _camera_make_next_current(Camera *p_exclude); + friend class CanvasLayer; + void _canvas_layer_add(CanvasLayer *p_canvas_layer); + void _canvas_layer_remove(CanvasLayer *p_canvas_layer); + + void _drop_mouse_focus(); + protected: void _notification(int p_what); static void _bind_methods(); @@ -475,6 +502,12 @@ public: void _subwindow_visibility_changed(); + void set_input_as_handled(); + bool is_input_handled() const; + + void set_handle_input_locally(bool p_enable); + bool is_handling_input_locally() const; + bool gui_is_dragging() const; Viewport(); diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index 97230d422b..d7750c91ef 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -210,8 +210,6 @@ #include "scene/resources/physics_material.h" #endif -static ResourceFormatLoaderTheme *resource_loader_theme = NULL; - static ResourceFormatSaverText *resource_saver_text = NULL; static ResourceFormatLoaderText *resource_loader_text = NULL; @@ -242,9 +240,6 @@ void register_scene_types() { resource_loader_texture_layered = memnew(ResourceFormatLoaderTextureLayered); ResourceLoader::add_resource_format_loader(resource_loader_texture_layered); - resource_loader_theme = memnew(ResourceFormatLoaderTheme); - ResourceLoader::add_resource_format_loader(resource_loader_theme); - resource_saver_text = memnew(ResourceFormatSaverText); ResourceSaver::add_resource_format_saver(resource_saver_text, true); @@ -743,7 +738,6 @@ void unregister_scene_types() { memdelete(resource_loader_dynamic_font); memdelete(resource_loader_stream_texture); memdelete(resource_loader_texture_layered); - memdelete(resource_loader_theme); DynamicFont::finish_dynamic_fonts(); diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 80ad2ad739..803c85ef34 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -1469,7 +1469,7 @@ int Animation::_find(const Vector<K> &p_keys, float p_time) const { middle = (low + high) / 2; - if (p_time == keys[middle].time) { //match + if (Math::abs(p_time - keys[middle].time) < CMP_EPSILON) { //match return middle; } else if (p_time < keys[middle].time) high = middle - 1; //search low end of array @@ -1901,7 +1901,7 @@ void Animation::value_track_set_update_mode(int p_track, UpdateMode p_mode) { ERR_FAIL_INDEX(p_track, tracks.size()); Track *t = tracks[p_track]; ERR_FAIL_COND(t->type != TYPE_VALUE); - ERR_FAIL_INDEX(p_mode, 4); + ERR_FAIL_INDEX((int)p_mode, 4); ValueTrack *vt = static_cast<ValueTrack *>(t); vt->update_mode = p_mode; diff --git a/scene/resources/convex_polygon_shape.cpp b/scene/resources/convex_polygon_shape.cpp index 9d47bca5ed..39488760cd 100644 --- a/scene/resources/convex_polygon_shape.cpp +++ b/scene/resources/convex_polygon_shape.cpp @@ -38,10 +38,9 @@ Vector<Vector3> ConvexPolygonShape::_gen_debug_mesh_lines() { if (points.size() > 3) { - QuickHull qh; Vector<Vector3> varr = Variant(points); Geometry::MeshData md; - Error err = qh.build(varr, md); + Error err = QuickHull::build(varr, md); if (err == OK) { Vector<Vector3> lines; lines.resize(md.edges.size() * 2); diff --git a/scene/resources/convex_polygon_shape_2d.cpp b/scene/resources/convex_polygon_shape_2d.cpp index f325af7ea4..fc3d3f3334 100644 --- a/scene/resources/convex_polygon_shape_2d.cpp +++ b/scene/resources/convex_polygon_shape_2d.cpp @@ -41,7 +41,11 @@ bool ConvexPolygonShape2D::_edit_is_selected_on_click(const Point2 &p_point, dou void ConvexPolygonShape2D::_update_shape() { - Physics2DServer::get_singleton()->shape_set_data(get_rid(), points); + Vector<Vector2> final_points = points; + if (Geometry::is_polygon_clockwise(final_points)) { //needs to be counter clockwise + final_points.invert(); + } + Physics2DServer::get_singleton()->shape_set_data(get_rid(), final_points); emit_changed(); } @@ -55,6 +59,7 @@ void ConvexPolygonShape2D::set_point_cloud(const Vector<Vector2> &p_points) { void ConvexPolygonShape2D::set_points(const Vector<Vector2> &p_points) { points = p_points; + _update_shape(); } diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index 4de47b2cb0..fff136cdc3 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -653,6 +653,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_constant("item_margin", "Tree", 12 * scale); theme->set_constant("button_margin", "Tree", 4 * scale); theme->set_constant("draw_relationship_lines", "Tree", 0); + theme->set_constant("draw_guides", "Tree", 1); theme->set_constant("scroll_border", "Tree", 4); theme->set_constant("scroll_speed", "Tree", 12); diff --git a/scene/resources/default_theme/error_icon.png b/scene/resources/default_theme/error_icon.png Binary files differindex 7741d00749..00680db5df 100644 --- a/scene/resources/default_theme/error_icon.png +++ b/scene/resources/default_theme/error_icon.png diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index 0785d3bfc6..ad22d6530c 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -82,11 +82,14 @@ void DynamicFontData::set_force_autohinter(bool p_force) { } void DynamicFontData::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_antialiased", "antialiased"), &DynamicFontData::set_antialiased); + ClassDB::bind_method(D_METHOD("is_antialiased"), &DynamicFontData::is_antialiased); ClassDB::bind_method(D_METHOD("set_font_path", "path"), &DynamicFontData::set_font_path); ClassDB::bind_method(D_METHOD("get_font_path"), &DynamicFontData::get_font_path); ClassDB::bind_method(D_METHOD("set_hinting", "mode"), &DynamicFontData::set_hinting); ClassDB::bind_method(D_METHOD("get_hinting"), &DynamicFontData::get_hinting); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased"), "set_antialiased", "is_antialiased"); ADD_PROPERTY(PropertyInfo(Variant::INT, "hinting", PROPERTY_HINT_ENUM, "None,Light,Normal"), "set_hinting", "get_hinting"); BIND_ENUM_CONSTANT(HINTING_NONE); @@ -98,6 +101,7 @@ void DynamicFontData::_bind_methods() { DynamicFontData::DynamicFontData() { + antialiased = true; force_autohinter = false; hinting = DynamicFontData::HINTING_NORMAL; font_mem = NULL; @@ -201,10 +205,10 @@ Error DynamicFontAtSize::_load() { if (FT_HAS_COLOR(face)) { int best_match = 0; - int diff = ABS(id.size - face->available_sizes[0].width); + int diff = ABS(id.size - ((int64_t)face->available_sizes[0].width)); scale_color_font = float(id.size) / face->available_sizes[0].width; for (int i = 1; i < face->num_fixed_sizes; i++) { - int ndiff = ABS(id.size - face->available_sizes[i].width); + int ndiff = ABS(id.size - ((int64_t)face->available_sizes[i].width)); if (ndiff < diff) { best_match = i; diff = ndiff; @@ -632,7 +636,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) { if (id.outline_size > 0) { character = _make_outline_char(p_char); } else { - error = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL); + error = FT_Render_Glyph(face->glyph, font->antialiased ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO); if (!error) character = _bitmap_to_character(slot->bitmap, slot->bitmap_top, slot->bitmap_left, slot->advance.x / 64.0); } @@ -785,6 +789,18 @@ void DynamicFont::set_use_filter(bool p_enable) { _reload_cache(); } +bool DynamicFontData::is_antialiased() const { + + return antialiased; +} + +void DynamicFontData::set_antialiased(bool p_antialiased) { + + if (antialiased == p_antialiased) + return; + antialiased = p_antialiased; +} + DynamicFontData::Hinting DynamicFontData::get_hinting() const { return hinting; @@ -1014,10 +1030,10 @@ void DynamicFont::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_mipmaps"), "set_use_mipmaps", "get_use_mipmaps"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_filter"), "set_use_filter", "get_use_filter"); ADD_GROUP("Extra Spacing", "extra_spacing"); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "extra_spacing_top"), "set_spacing", "get_spacing", SPACING_TOP); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "extra_spacing_bottom"), "set_spacing", "get_spacing", SPACING_BOTTOM); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "extra_spacing_char"), "set_spacing", "get_spacing", SPACING_CHAR); - ADD_PROPERTYINZ(PropertyInfo(Variant::INT, "extra_spacing_space"), "set_spacing", "get_spacing", SPACING_SPACE); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "extra_spacing_top"), "set_spacing", "get_spacing", SPACING_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "extra_spacing_bottom"), "set_spacing", "get_spacing", SPACING_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "extra_spacing_char"), "set_spacing", "get_spacing", SPACING_CHAR); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "extra_spacing_space"), "set_spacing", "get_spacing", SPACING_SPACE); ADD_GROUP("Font", ""); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "font_data", PROPERTY_HINT_RESOURCE_TYPE, "DynamicFontData"), "set_font_data", "get_font_data"); @@ -1029,7 +1045,7 @@ void DynamicFont::_bind_methods() { Mutex *DynamicFont::dynamic_font_mutex = NULL; -SelfList<DynamicFont>::List DynamicFont::dynamic_fonts; +SelfList<DynamicFont>::List *DynamicFont::dynamic_fonts = NULL; DynamicFont::DynamicFont() : font_list(this) { @@ -1041,29 +1057,31 @@ DynamicFont::DynamicFont() : spacing_char = 0; spacing_space = 0; outline_color = Color(1, 1, 1); - if (dynamic_font_mutex) + if (dynamic_font_mutex) { dynamic_font_mutex->lock(); - dynamic_fonts.add(&font_list); - if (dynamic_font_mutex) + dynamic_fonts->add(&font_list); dynamic_font_mutex->unlock(); + } } DynamicFont::~DynamicFont() { - - if (dynamic_font_mutex) + if (dynamic_font_mutex) { dynamic_font_mutex->lock(); - dynamic_fonts.remove(&font_list); - if (dynamic_font_mutex) + dynamic_fonts->remove(&font_list); dynamic_font_mutex->unlock(); + } } void DynamicFont::initialize_dynamic_fonts() { + dynamic_fonts = memnew(SelfList<DynamicFont>::List()); dynamic_font_mutex = Mutex::create(); } void DynamicFont::finish_dynamic_fonts() { memdelete(dynamic_font_mutex); dynamic_font_mutex = NULL; + memdelete(dynamic_fonts); + dynamic_fonts = NULL; } void DynamicFont::update_oversampling() { @@ -1073,7 +1091,7 @@ void DynamicFont::update_oversampling() { if (dynamic_font_mutex) dynamic_font_mutex->lock(); - SelfList<DynamicFont> *E = dynamic_fonts.first(); + SelfList<DynamicFont> *E = dynamic_fonts->first(); while (E) { if (E->self()->data_at_size.is_valid()) { @@ -1083,8 +1101,19 @@ void DynamicFont::update_oversampling() { E->self()->outline_data_at_size->update_oversampling(); } + for (int i = 0; i < E->self()->fallback_data_at_size.size(); i++) { + if (E->self()->fallback_data_at_size[i].is_valid()) { + E->self()->fallback_data_at_size.write[i]->update_oversampling(); + + if (E->self()->has_outline() && E->self()->fallback_outline_data_at_size[i].is_valid()) { + E->self()->fallback_outline_data_at_size.write[i]->update_oversampling(); + } + } + } + changed.push_back(Ref<DynamicFont>(E->self())); } + E = E->next(); } diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index afda48a566..96437e8982 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -71,12 +71,15 @@ public: HINTING_NORMAL }; + bool is_antialiased() const; + void set_antialiased(bool p_antialiased); Hinting get_hinting() const; void set_hinting(Hinting p_hinting); private: const uint8_t *font_mem; int font_mem_size; + bool antialiased; bool force_autohinter; Hinting hinting; @@ -285,7 +288,7 @@ public: SelfList<DynamicFont> font_list; static Mutex *dynamic_font_mutex; - static SelfList<DynamicFont>::List dynamic_fonts; + static SelfList<DynamicFont>::List *dynamic_fonts; static void initialize_dynamic_fonts(); static void finish_dynamic_fonts(); diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp index 7b43c33692..90552ebb47 100644 --- a/scene/resources/environment.cpp +++ b/scene/resources/environment.cpp @@ -504,7 +504,7 @@ float Environment::get_ssao_edge_sharpness() const { void Environment::set_glow_enabled(bool p_enabled) { glow_enabled = p_enabled; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); _change_notify(); } @@ -522,7 +522,7 @@ void Environment::set_glow_level(int p_level, bool p_enabled) { else glow_levels &= ~(1 << p_level); - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } bool Environment::is_glow_level_enabled(int p_level) const { @@ -535,7 +535,7 @@ void Environment::set_glow_intensity(float p_intensity) { glow_intensity = p_intensity; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } float Environment::get_glow_intensity() const { @@ -545,7 +545,7 @@ float Environment::get_glow_intensity() const { void Environment::set_glow_strength(float p_strength) { glow_strength = p_strength; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } float Environment::get_glow_strength() const { @@ -556,7 +556,7 @@ void Environment::set_glow_bloom(float p_threshold) { glow_bloom = p_threshold; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } float Environment::get_glow_bloom() const { @@ -567,7 +567,7 @@ void Environment::set_glow_blend_mode(GlowBlendMode p_mode) { glow_blend_mode = p_mode; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } Environment::GlowBlendMode Environment::get_glow_blend_mode() const { @@ -578,18 +578,29 @@ void Environment::set_glow_hdr_bleed_threshold(float p_threshold) { glow_hdr_bleed_threshold = p_threshold; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } float Environment::get_glow_hdr_bleed_threshold() const { return glow_hdr_bleed_threshold; } +void Environment::set_glow_hdr_luminance_cap(float p_amount) { + + glow_hdr_luminance_cap = p_amount; + + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); +} +float Environment::get_glow_hdr_luminance_cap() const { + + return glow_hdr_luminance_cap; +} + void Environment::set_glow_hdr_bleed_scale(float p_scale) { glow_hdr_bleed_scale = p_scale; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } float Environment::get_glow_hdr_bleed_scale() const { @@ -599,7 +610,7 @@ float Environment::get_glow_hdr_bleed_scale() const { void Environment::set_glow_bicubic_upscale(bool p_enable) { glow_bicubic_upscale = p_enable; - VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_bicubic_upscale); + VS::get_singleton()->environment_set_glow(environment, glow_enabled, glow_levels, glow_intensity, glow_strength, glow_bloom, VS::EnvironmentGlowBlendMode(glow_blend_mode), glow_hdr_bleed_threshold, glow_hdr_bleed_threshold, glow_hdr_luminance_cap, glow_bicubic_upscale); } bool Environment::is_glow_bicubic_upscale_enabled() const { @@ -761,7 +772,7 @@ float Environment::get_fog_sun_amount() const { void Environment::set_fog_depth_enabled(bool p_enabled) { fog_depth_enabled = p_enabled; - VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); + VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_end, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); } bool Environment::is_fog_depth_enabled() const { @@ -771,17 +782,28 @@ bool Environment::is_fog_depth_enabled() const { void Environment::set_fog_depth_begin(float p_distance) { fog_depth_begin = p_distance; - VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); + VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_end, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); } float Environment::get_fog_depth_begin() const { return fog_depth_begin; } +void Environment::set_fog_depth_end(float p_distance) { + + fog_depth_end = p_distance; + VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_end, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); +} + +float Environment::get_fog_depth_end() const { + + return fog_depth_end; +} + void Environment::set_fog_depth_curve(float p_curve) { fog_depth_curve = p_curve; - VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); + VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_end, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); } float Environment::get_fog_depth_curve() const { @@ -791,7 +813,7 @@ float Environment::get_fog_depth_curve() const { void Environment::set_fog_transmit_enabled(bool p_enabled) { fog_transmit_enabled = p_enabled; - VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); + VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_end, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); } bool Environment::is_fog_transmit_enabled() const { @@ -801,7 +823,7 @@ bool Environment::is_fog_transmit_enabled() const { void Environment::set_fog_transmit_curve(float p_curve) { fog_transmit_curve = p_curve; - VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); + VS::get_singleton()->environment_set_fog_depth(environment, fog_depth_enabled, fog_depth_begin, fog_depth_end, fog_depth_curve, fog_transmit_enabled, fog_transmit_curve); } float Environment::get_fog_transmit_curve() const { @@ -900,6 +922,9 @@ void Environment::_bind_methods() { ClassDB::bind_method(D_METHOD("set_fog_depth_begin", "distance"), &Environment::set_fog_depth_begin); ClassDB::bind_method(D_METHOD("get_fog_depth_begin"), &Environment::get_fog_depth_begin); + ClassDB::bind_method(D_METHOD("set_fog_depth_end", "distance"), &Environment::set_fog_depth_end); + ClassDB::bind_method(D_METHOD("get_fog_depth_end"), &Environment::get_fog_depth_end); + ClassDB::bind_method(D_METHOD("set_fog_depth_curve", "curve"), &Environment::set_fog_depth_curve); ClassDB::bind_method(D_METHOD("get_fog_depth_curve"), &Environment::get_fog_depth_curve); @@ -928,6 +953,7 @@ void Environment::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "fog_sun_amount", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_fog_sun_amount", "get_fog_sun_amount"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "fog_depth_enabled"), "set_fog_depth_enabled", "is_fog_depth_enabled"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "fog_depth_begin", PROPERTY_HINT_RANGE, "0,4000,0.1"), "set_fog_depth_begin", "get_fog_depth_begin"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "fog_depth_end", PROPERTY_HINT_RANGE, "0,4000,0.1,or_greater"), "set_fog_depth_end", "get_fog_depth_end"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "fog_depth_curve", PROPERTY_HINT_EXP_EASING), "set_fog_depth_curve", "get_fog_depth_curve"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "fog_transmit_enabled"), "set_fog_transmit_enabled", "is_fog_transmit_enabled"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "fog_transmit_curve", PROPERTY_HINT_EXP_EASING), "set_fog_transmit_curve", "get_fog_transmit_curve"); @@ -1112,6 +1138,9 @@ void Environment::_bind_methods() { ClassDB::bind_method(D_METHOD("set_glow_hdr_bleed_threshold", "threshold"), &Environment::set_glow_hdr_bleed_threshold); ClassDB::bind_method(D_METHOD("get_glow_hdr_bleed_threshold"), &Environment::get_glow_hdr_bleed_threshold); + ClassDB::bind_method(D_METHOD("set_glow_hdr_luminance_cap", "amount"), &Environment::set_glow_hdr_luminance_cap); + ClassDB::bind_method(D_METHOD("get_glow_hdr_luminance_cap"), &Environment::get_glow_hdr_luminance_cap); + ClassDB::bind_method(D_METHOD("set_glow_hdr_bleed_scale", "scale"), &Environment::set_glow_hdr_bleed_scale); ClassDB::bind_method(D_METHOD("get_glow_hdr_bleed_scale"), &Environment::get_glow_hdr_bleed_scale); @@ -1133,6 +1162,7 @@ void Environment::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "glow_bloom", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"), "set_glow_bloom", "get_glow_bloom"); ADD_PROPERTY(PropertyInfo(Variant::INT, "glow_blend_mode", PROPERTY_HINT_ENUM, "Additive,Screen,Softlight,Replace"), "set_glow_blend_mode", "get_glow_blend_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "glow_hdr_threshold", PROPERTY_HINT_RANGE, "0.0,4.0,0.01"), "set_glow_hdr_bleed_threshold", "get_glow_hdr_bleed_threshold"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "glow_hdr_luminance_cap", PROPERTY_HINT_RANGE, "0.0,256.0,0.01"), "set_glow_hdr_luminance_cap", "get_glow_hdr_luminance_cap"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "glow_hdr_scale", PROPERTY_HINT_RANGE, "0.0,4.0,0.01"), "set_glow_hdr_bleed_scale", "get_glow_hdr_bleed_scale"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "glow_bicubic_upscale"), "set_glow_bicubic_upscale", "is_glow_bicubic_upscale_enabled"); @@ -1246,6 +1276,7 @@ Environment::Environment() { glow_bloom = 0.0; glow_blend_mode = GLOW_BLEND_MODE_SOFTLIGHT; glow_hdr_bleed_threshold = 1.0; + glow_hdr_luminance_cap = 12.0; glow_hdr_bleed_scale = 2.0; glow_bicubic_upscale = false; @@ -1269,6 +1300,7 @@ Environment::Environment() { fog_depth_enabled = true; fog_depth_begin = 10; + fog_depth_end = 0; fog_depth_curve = 1; fog_transmit_enabled = false; diff --git a/scene/resources/environment.h b/scene/resources/environment.h index aab37719e0..55d96bc5bd 100644 --- a/scene/resources/environment.h +++ b/scene/resources/environment.h @@ -141,6 +141,7 @@ private: GlowBlendMode glow_blend_mode; float glow_hdr_bleed_threshold; float glow_hdr_bleed_scale; + float glow_hdr_luminance_cap; bool glow_bicubic_upscale; bool dof_blur_far_enabled; @@ -162,6 +163,7 @@ private: bool fog_depth_enabled; float fog_depth_begin; + float fog_depth_end; float fog_depth_curve; bool fog_transmit_enabled; @@ -311,6 +313,9 @@ public: void set_glow_hdr_bleed_threshold(float p_threshold); float get_glow_hdr_bleed_threshold() const; + void set_glow_hdr_luminance_cap(float p_amount); + float get_glow_hdr_luminance_cap() const; + void set_glow_hdr_bleed_scale(float p_scale); float get_glow_hdr_bleed_scale() const; @@ -365,6 +370,9 @@ public: void set_fog_depth_begin(float p_distance); float get_fog_depth_begin() const; + void set_fog_depth_end(float p_distance); + float get_fog_depth_end() const; + void set_fog_depth_curve(float p_curve); float get_fog_depth_curve() const; diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 274c74a9a2..5327ed318f 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -299,6 +299,7 @@ void SpatialMaterial::init_shaders() { shader_names->particles_anim_loop = "particles_anim_loop"; shader_names->depth_min_layers = "depth_min_layers"; shader_names->depth_max_layers = "depth_max_layers"; + shader_names->depth_flip = "depth_flip"; shader_names->grow = "grow"; @@ -532,6 +533,7 @@ void SpatialMaterial::_update_shader() { code += "uniform float depth_scale;\n"; code += "uniform int depth_min_layers;\n"; code += "uniform int depth_max_layers;\n"; + code += "uniform vec2 depth_flip;\n"; } if (flags[FLAG_UV1_USE_TRIPLANAR]) { code += "varying vec3 uv1_triplanar_pos;\n"; @@ -612,9 +614,9 @@ void SpatialMaterial::_update_shader() { //handle animation code += "\tfloat particle_total_frames = float(particles_anim_h_frames * particles_anim_v_frames);\n"; code += "\tfloat particle_frame = floor(INSTANCE_CUSTOM.z * float(particle_total_frames));\n"; - code += "\tif (particles_anim_loop) particle_frame=clamp(particle_frame,0.0,particle_total_frames-1.0); else particle_frame=mod(particle_frame,float(particle_total_frames));\n"; + code += "\tif (!particles_anim_loop) particle_frame=clamp(particle_frame,0.0,particle_total_frames-1.0); else particle_frame=mod(particle_frame,float(particle_total_frames));\n"; code += "\tUV /= vec2(float(particles_anim_h_frames),float(particles_anim_v_frames));\n"; - code += "\tUV += vec2(mod(particle_frame,float(particles_anim_h_frames)) / float(particles_anim_h_frames),particle_frame / float(particles_anim_h_frames) / float(particles_anim_v_frames));\n"; + code += "\tUV += vec2(mod(particle_frame,float(particles_anim_h_frames)) / float(particles_anim_h_frames), floor(particle_frame / float(particles_anim_h_frames)) / float(particles_anim_v_frames));\n"; } break; } @@ -697,7 +699,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_DEPTH_MAPPING] && !flags[FLAG_UV1_USE_TRIPLANAR]) { //depthmap not supported with triplanar code += "\t{\n"; - code += "\t\tvec3 view_dir = normalize(normalize(-VERTEX)*mat3(TANGENT,-BINORMAL,NORMAL));\n"; //binormal is negative due to mikktpsace + code += "\t\tvec3 view_dir = normalize(normalize(-VERTEX)*mat3(TANGENT*depth_flip.x,BINORMAL*depth_flip.y,NORMAL));\n"; // binormal is negative due to mikktspace if (deep_parallax) { code += "\t\tfloat num_layers = mix(float(depth_max_layers),float(depth_min_layers), abs(dot(vec3(0.0, 0.0, 1.0), view_dir)));\n"; @@ -1541,13 +1543,13 @@ int SpatialMaterial::get_particles_anim_v_frames() const { return particles_anim_v_frames; } -void SpatialMaterial::set_particles_anim_loop(int p_frames) { +void SpatialMaterial::set_particles_anim_loop(bool p_loop) { - particles_anim_loop = p_frames; - VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_loop, p_frames); + particles_anim_loop = p_loop; + VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_loop, particles_anim_loop); } -int SpatialMaterial::get_particles_anim_loop() const { +bool SpatialMaterial::get_particles_anim_loop() const { return particles_anim_loop; } @@ -1584,6 +1586,28 @@ int SpatialMaterial::get_depth_deep_parallax_max_layers() const { return deep_parallax_max_layers; } +void SpatialMaterial::set_depth_deep_parallax_flip_tangent(bool p_flip) { + + depth_parallax_flip_tangent = p_flip; + VS::get_singleton()->material_set_param(_get_material(), shader_names->depth_flip, Vector2(depth_parallax_flip_tangent ? -1 : 1, depth_parallax_flip_binormal ? -1 : 1)); +} + +bool SpatialMaterial::get_depth_deep_parallax_flip_tangent() const { + + return depth_parallax_flip_tangent; +} + +void SpatialMaterial::set_depth_deep_parallax_flip_binormal(bool p_flip) { + + depth_parallax_flip_binormal = p_flip; + VS::get_singleton()->material_set_param(_get_material(), shader_names->depth_flip, Vector2(depth_parallax_flip_tangent ? -1 : 1, depth_parallax_flip_binormal ? -1 : 1)); +} + +bool SpatialMaterial::get_depth_deep_parallax_flip_binormal() const { + + return depth_parallax_flip_binormal; +} + void SpatialMaterial::set_grow_enabled(bool p_enable) { grow_enabled = p_enable; _queue_shader_change(); @@ -1898,7 +1922,7 @@ void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_particles_anim_v_frames", "frames"), &SpatialMaterial::set_particles_anim_v_frames); ClassDB::bind_method(D_METHOD("get_particles_anim_v_frames"), &SpatialMaterial::get_particles_anim_v_frames); - ClassDB::bind_method(D_METHOD("set_particles_anim_loop", "frames"), &SpatialMaterial::set_particles_anim_loop); + ClassDB::bind_method(D_METHOD("set_particles_anim_loop", "loop"), &SpatialMaterial::set_particles_anim_loop); ClassDB::bind_method(D_METHOD("get_particles_anim_loop"), &SpatialMaterial::get_particles_anim_loop); ClassDB::bind_method(D_METHOD("set_depth_deep_parallax", "enable"), &SpatialMaterial::set_depth_deep_parallax); @@ -1910,6 +1934,12 @@ void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_depth_deep_parallax_max_layers", "layer"), &SpatialMaterial::set_depth_deep_parallax_max_layers); ClassDB::bind_method(D_METHOD("get_depth_deep_parallax_max_layers"), &SpatialMaterial::get_depth_deep_parallax_max_layers); + ClassDB::bind_method(D_METHOD("set_depth_deep_parallax_flip_tangent", "flip"), &SpatialMaterial::set_depth_deep_parallax_flip_tangent); + ClassDB::bind_method(D_METHOD("get_depth_deep_parallax_flip_tangent"), &SpatialMaterial::get_depth_deep_parallax_flip_tangent); + + ClassDB::bind_method(D_METHOD("set_depth_deep_parallax_flip_binormal", "flip"), &SpatialMaterial::set_depth_deep_parallax_flip_binormal); + ClassDB::bind_method(D_METHOD("get_depth_deep_parallax_flip_binormal"), &SpatialMaterial::get_depth_deep_parallax_flip_binormal); + ClassDB::bind_method(D_METHOD("set_grow", "amount"), &SpatialMaterial::set_grow); ClassDB::bind_method(D_METHOD("get_grow"), &SpatialMaterial::get_grow); @@ -2045,6 +2075,8 @@ void SpatialMaterial::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "depth_deep_parallax"), "set_depth_deep_parallax", "is_depth_deep_parallax_enabled"); ADD_PROPERTY(PropertyInfo(Variant::INT, "depth_min_layers", PROPERTY_HINT_RANGE, "1,32,1"), "set_depth_deep_parallax_min_layers", "get_depth_deep_parallax_min_layers"); ADD_PROPERTY(PropertyInfo(Variant::INT, "depth_max_layers", PROPERTY_HINT_RANGE, "1,32,1"), "set_depth_deep_parallax_max_layers", "get_depth_deep_parallax_max_layers"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "depth_flip_tangent"), "set_depth_deep_parallax_flip_tangent", "get_depth_deep_parallax_flip_tangent"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "depth_flip_binormal"), "set_depth_deep_parallax_flip_binormal", "get_depth_deep_parallax_flip_binormal"); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "depth_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_DEPTH); ADD_GROUP("Subsurf Scatter", "subsurf_scatter_"); @@ -2244,8 +2276,11 @@ SpatialMaterial::SpatialMaterial() : set_grow(0.0); deep_parallax = false; + depth_parallax_flip_tangent = false; + depth_parallax_flip_binormal = false; set_depth_deep_parallax_min_layers(8); set_depth_deep_parallax_max_layers(32); + set_depth_deep_parallax_flip_tangent(false); //also sets binormal detail_uv = DETAIL_UV_1; blend_mode = BLEND_MODE_MIX; diff --git a/scene/resources/material.h b/scene/resources/material.h index 0154874ae4..54fceaddc1 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -286,7 +286,7 @@ private: mk.key = 0; for (int i = 0; i < FEATURE_MAX; i++) { if (features[i]) { - mk.feature_mask |= (1 << i); + mk.feature_mask |= ((uint64_t)1 << i); } } mk.detail_uv = detail_uv; @@ -295,7 +295,7 @@ private: mk.cull_mode = cull_mode; for (int i = 0; i < FLAG_MAX; i++) { if (flags[i]) { - mk.flags |= (1 << i); + mk.flags |= ((uint64_t)1 << i); } } mk.detail_blend_mode = detail_blend_mode; @@ -338,6 +338,7 @@ private: StringName particles_anim_loop; StringName depth_min_layers; StringName depth_max_layers; + StringName depth_flip; StringName uv1_blend_sharpness; StringName uv2_blend_sharpness; StringName grow; @@ -407,6 +408,8 @@ private: bool deep_parallax; int deep_parallax_min_layers; int deep_parallax_max_layers; + bool depth_parallax_flip_tangent; + bool depth_parallax_flip_binormal; bool proximity_fade_enabled; float proximity_fade_distance; @@ -501,6 +504,12 @@ public: void set_depth_deep_parallax_max_layers(int p_layer); int get_depth_deep_parallax_max_layers() const; + void set_depth_deep_parallax_flip_tangent(bool p_flip); + bool get_depth_deep_parallax_flip_tangent() const; + + void set_depth_deep_parallax_flip_binormal(bool p_flip); + bool get_depth_deep_parallax_flip_binormal() const; + void set_subsurface_scattering_strength(float p_subsurface_scattering_strength); float get_subsurface_scattering_strength() const; @@ -574,8 +583,8 @@ public: void set_particles_anim_v_frames(int p_frames); int get_particles_anim_v_frames() const; - void set_particles_anim_loop(int p_frames); - int get_particles_anim_loop() const; + void set_particles_anim_loop(bool p_loop); + bool get_particles_anim_loop() const; void set_grow_enabled(bool p_enable); bool is_grow_enabled() const; diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index 6cd701eb9a..80191367ce 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -482,7 +482,7 @@ void Mesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_lightmap_size_hint", "size"), &Mesh::set_lightmap_size_hint); ClassDB::bind_method(D_METHOD("get_lightmap_size_hint"), &Mesh::get_lightmap_size_hint); - ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "lightmap_size_hint"), "set_lightmap_size_hint", "get_lightmap_size_hint"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "lightmap_size_hint"), "set_lightmap_size_hint", "get_lightmap_size_hint"); ClassDB::bind_method(D_METHOD("get_surface_count"), &Mesh::get_surface_count); ClassDB::bind_method(D_METHOD("surface_get_arrays", "surf_idx"), &Mesh::surface_get_arrays); @@ -706,6 +706,7 @@ bool ArrayMesh::_get(const StringName &p_name, Variant &r_ret) const { Vector<AABB> skel_aabb = VS::get_singleton()->mesh_surface_get_skeleton_aabb(mesh, idx); Array arr; + arr.resize(skel_aabb.size()); for (int i = 0; i < skel_aabb.size(); i++) { arr[i] = skel_aabb[i]; } diff --git a/scene/resources/mesh_data_tool.cpp b/scene/resources/mesh_data_tool.cpp index a5449e1fe8..7af9086ab7 100644 --- a/scene/resources/mesh_data_tool.cpp +++ b/scene/resources/mesh_data_tool.cpp @@ -42,8 +42,6 @@ void MeshDataTool::clear() { Error MeshDataTool::create_from_surface(const Ref<ArrayMesh> &p_mesh, int p_surface) { ERR_FAIL_COND_V(p_mesh.is_null(), ERR_INVALID_PARAMETER); - - ERR_FAIL_COND_V(p_mesh.is_null(), ERR_INVALID_PARAMETER); ERR_FAIL_COND_V(p_mesh->surface_get_primitive_type(p_surface) != Mesh::PRIMITIVE_TRIANGLES, ERR_INVALID_PARAMETER); Array arrays = p_mesh->surface_get_arrays(p_surface); diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index 086fb83af9..87483a7da4 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -264,7 +264,7 @@ Node *SceneState::instance(GenEditState p_edit_state) const { } if (n.instance >= 0 || n.type != TYPE_INSTANCED || i == 0) { - //if node was not part of instance, must set it's name, parenthood and ownership + //if node was not part of instance, must set its name, parenthood and ownership if (i > 0) { if (parent) { parent->_add_child_nocheck(node, snames[n.name]); @@ -472,6 +472,7 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map List<PropertyInfo> plist; p_node->get_property_list(&plist); + StringName type = p_node->get_class(); for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { @@ -482,12 +483,23 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map String name = E->get().name; Variant value = p_node->get(E->get().name); - bool isdefault = ((E->get().usage & PROPERTY_USAGE_STORE_IF_NONZERO) && value.is_zero()) || ((E->get().usage & PROPERTY_USAGE_STORE_IF_NONONE) && value.is_one()); + bool isdefault = false; + Variant default_value = ClassDB::class_get_default_property_value(type, name); - if (E->get().usage & PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE) { - isdefault = true; //is script default value + if (default_value.get_type() != Variant::NIL) { + isdefault = bool(Variant::evaluate(Variant::OP_EQUAL, value, default_value)); } + Ref<Script> script = p_node->get_script(); + if (!isdefault && script.is_valid() && script->get_property_default_value(name, default_value)) { + isdefault = bool(Variant::evaluate(Variant::OP_EQUAL, value, default_value)); + } + // the version above makes more sense, because it does not rely on placeholder or usage flag + // in the script, just the default value function. + // if (E->get().usage & PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE) { + // isdefault = true; //is script default value + // } + if (pack_state_stack.size()) { // we are on part of an instanced subscene // or part of instanced scene. diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp index 6f67ba8af1..dae01e8d96 100644 --- a/scene/resources/particles_material.cpp +++ b/scene/resources/particles_material.cpp @@ -308,7 +308,7 @@ void ParticlesMaterial::_update_shader() { code += " float angle2_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad * (1.0 - flatness);\n"; code += " vec3 direction_xz = vec3(sin(angle1_rad), 0, cos(angle1_rad));\n"; code += " vec3 direction_yz = vec3(0, sin(angle2_rad), cos(angle2_rad));\n"; - code += " direction_yz.z = direction_yz.z / sqrt(direction_yz.z); // better uniform distribution\n"; + code += " direction_yz.z = direction_yz.z / max(0.0001,sqrt(abs(direction_yz.z))); // better uniform distribution\n"; code += " vec3 direction = vec3(direction_xz.x * direction_yz.z, direction_yz.y, direction_xz.z * direction_yz.z);\n"; code += " direction = normalize(direction);\n"; code += " VELOCITY = direction * initial_linear_velocity * mix(1.0, rand_from_seed(alt_seed), initial_linear_velocity_random);\n"; @@ -463,12 +463,6 @@ void ParticlesMaterial::_update_shader() { code += " base_angle += CUSTOM.y * LIFETIME * (angular_velocity + tex_angular_velocity) * mix(1.0, rand_from_seed(alt_seed) * 2.0 - 1.0, angular_velocity_random);\n"; code += " CUSTOM.x = base_angle * degree_to_rad;\n"; // angle code += " CUSTOM.z = (anim_offset + tex_anim_offset) * mix(1.0, anim_offset_rand, anim_offset_random) + CUSTOM.y * (anim_speed + tex_anim_speed) * mix(1.0, rand_from_seed(alt_seed), anim_speed_random);\n"; // angle - if (flags[FLAG_ANIM_LOOP]) { - code += " CUSTOM.z = mod(CUSTOM.z, 1.0);\n"; // loop - - } else { - code += " CUSTOM.z = clamp(CUSTOM.z, 0.0, 1.0);\n"; // 0 to 1 only - } code += " }\n"; // apply color // apply hue rotation @@ -803,12 +797,7 @@ void ParticlesMaterial::set_param_texture(Parameter p_param, const Ref<Texture> } break; case PARAM_SCALE: { VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->scale_texture, p_texture); - - Ref<CurveTexture> curve_tex = p_texture; - if (curve_tex.is_valid()) { - curve_tex->ensure_default_setup(); - } - + _adjust_curve_range(p_texture, 0, 1); } break; case PARAM_HUE_VARIATION: { VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->hue_variation_texture, p_texture); @@ -1129,7 +1118,7 @@ void ParticlesMaterial::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "initial_velocity", PROPERTY_HINT_RANGE, "0,1000,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_INITIAL_LINEAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "initial_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_INITIAL_LINEAR_VELOCITY); ADD_GROUP("Angular Velocity", "angular_"); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-360,360,0.01"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity", PROPERTY_HINT_RANGE, "-720,720,0.01,or_lesser,or_greater"), "set_param", "get_param", PARAM_ANGULAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "angular_velocity_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANGULAR_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "angular_velocity_curve", PROPERTY_HINT_RESOURCE_TYPE, "CurveTexture"), "set_param_texture", "get_param_texture", PARAM_ANGULAR_VELOCITY); ADD_GROUP("Orbit Velocity", "orbit_"); @@ -1165,7 +1154,7 @@ void ParticlesMaterial::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "GradientTexture"), "set_color_ramp", "get_color_ramp"); ADD_GROUP("Hue Variation", "hue_"); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation", PROPERTY_HINT_RANGE, "-1,1,0.1"), "set_param", "get_param", PARAM_HUE_VARIATION); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_param", "get_param", PARAM_HUE_VARIATION); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "hue_variation_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_HUE_VARIATION); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "hue_variation_curve", PROPERTY_HINT_RESOURCE_TYPE, "CurveTexture"), "set_param_texture", "get_param_texture", PARAM_HUE_VARIATION); ADD_GROUP("Animation", "anim_"); @@ -1175,7 +1164,6 @@ void ParticlesMaterial::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anim_offset", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param", "get_param", PARAM_ANIM_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "anim_offset_random", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param_randomness", "get_param_randomness", PARAM_ANIM_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "anim_offset_curve", PROPERTY_HINT_RESOURCE_TYPE, "CurveTexture"), "set_param_texture", "get_param_texture", PARAM_ANIM_OFFSET); - ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "anim_loop"), "set_flag", "get_flag", FLAG_ANIM_LOOP); BIND_ENUM_CONSTANT(PARAM_INITIAL_LINEAR_VELOCITY); BIND_ENUM_CONSTANT(PARAM_ANGULAR_VELOCITY); diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h index 91fdcc0346..06ebb3c4dc 100644 --- a/scene/resources/particles_material.h +++ b/scene/resources/particles_material.h @@ -60,7 +60,6 @@ public: FLAG_ALIGN_Y_TO_VELOCITY, FLAG_ROTATE_Y, FLAG_DISABLE_Z, - FLAG_ANIM_LOOP, FLAG_MAX }; diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp index 63aa44e1d8..dafdddd990 100644 --- a/scene/resources/primitive_meshes.cpp +++ b/scene/resources/primitive_meshes.cpp @@ -102,6 +102,9 @@ void PrimitiveMesh::_request_update() { } int PrimitiveMesh::get_surface_count() const { + if (pending_request) { + _update(); + } return 1; } @@ -303,7 +306,7 @@ void CapsuleMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius * w, y * radius * w, z); points.push_back(p + Vector3(0.0, 0.0, 0.5 * mid_height)); normals.push_back(p.normalized()); - ADD_TANGENT(y, -x, 0.0, -1.0) + ADD_TANGENT(-y, x, 0.0, -1.0) uvs.push_back(Vector2(u, v * onethird)); point++; @@ -342,7 +345,7 @@ void CapsuleMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius, y * radius, z); points.push_back(p); normals.push_back(Vector3(x, y, 0.0)); - ADD_TANGENT(y, -x, 0.0, -1.0) + ADD_TANGENT(-y, x, 0.0, -1.0) uvs.push_back(Vector2(u, onethird + (v * onethird))); point++; @@ -382,7 +385,7 @@ void CapsuleMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius * w, y * radius * w, z); points.push_back(p + Vector3(0.0, 0.0, -0.5 * mid_height)); normals.push_back(p.normalized()); - ADD_TANGENT(y, -x, 0.0, -1.0) + ADD_TANGENT(-y, x, 0.0, -1.0) uvs.push_back(Vector2(u, twothirds + ((v - 1.0) * onethird))); point++; @@ -511,14 +514,14 @@ void CubeMesh::_create_mesh_array(Array &p_arr) const { // front points.push_back(Vector3(x, -y, -start_pos.z)); // double negative on the Z! normals.push_back(Vector3(0.0, 0.0, 1.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(u, v)); point++; // back points.push_back(Vector3(-x, -y, start_pos.z)); normals.push_back(Vector3(0.0, 0.0, -1.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(twothirds + u, v)); point++; @@ -565,14 +568,14 @@ void CubeMesh::_create_mesh_array(Array &p_arr) const { // right points.push_back(Vector3(-start_pos.x, -y, -z)); normals.push_back(Vector3(1.0, 0.0, 0.0)); - ADD_TANGENT(0.0, 0.0, 1.0, -1.0); + ADD_TANGENT(0.0, 0.0, -1.0, -1.0); uvs.push_back(Vector2(onethird + u, v)); point++; // left points.push_back(Vector3(start_pos.x, -y, z)); normals.push_back(Vector3(-1.0, 0.0, 0.0)); - ADD_TANGENT(0.0, 0.0, -1.0, -1.0); + ADD_TANGENT(0.0, 0.0, 1.0, -1.0); uvs.push_back(Vector2(u, 0.5 + v)); point++; @@ -619,14 +622,14 @@ void CubeMesh::_create_mesh_array(Array &p_arr) const { // top points.push_back(Vector3(-x, -start_pos.y, -z)); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(onethird + u, 0.5 + v)); point++; // bottom points.push_back(Vector3(x, start_pos.y, -z)); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(twothirds + u, 0.5 + v)); point++; @@ -770,7 +773,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius, y, z * radius); points.push_back(p); normals.push_back(Vector3(x, 0.0, z)); - ADD_TANGENT(-z, 0.0, x, -1.0) + ADD_TANGENT(z, 0.0, -x, -1.0) uvs.push_back(Vector2(u, v * 0.5)); point++; @@ -796,7 +799,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { thisrow = point; points.push_back(Vector3(0.0, y, 0.0)); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, 1.0) + ADD_TANGENT(1.0, 0.0, 0.0, -1.0) uvs.push_back(Vector2(0.25, 0.75)); point++; @@ -813,7 +816,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * top_radius, y, z * top_radius); points.push_back(p); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, 1.0) + ADD_TANGENT(1.0, 0.0, 0.0, -1.0) uvs.push_back(Vector2(u, v)); point++; @@ -832,7 +835,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { thisrow = point; points.push_back(Vector3(0.0, y, 0.0)); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0) + ADD_TANGENT(1.0, 0.0, 0.0, -1.0) uvs.push_back(Vector2(0.75, 0.75)); point++; @@ -849,7 +852,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * bottom_radius, y, z * bottom_radius); points.push_back(p); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0) + ADD_TANGENT(1.0, 0.0, 0.0, -1.0) uvs.push_back(Vector2(u, v)); point++; @@ -980,7 +983,7 @@ void PlaneMesh::_create_mesh_array(Array &p_arr) const { points.push_back(Vector3(-x, 0.0, -z)); normals.push_back(Vector3(0.0, 1.0, 0.0)); ADD_TANGENT(1.0, 0.0, 0.0, -1.0); - uvs.push_back(Vector2(u, v)); + uvs.push_back(Vector2(1.0 - u, 1.0 - v)); /* 1.0 - uv to match orientation with Quad */ point++; if (i > 0 && j > 0) { @@ -1105,14 +1108,14 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const { /* front */ points.push_back(Vector3(start_x + x, -y, -start_pos.z)); // double negative on the Z! normals.push_back(Vector3(0.0, 0.0, 1.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(offset_front + u, v)); point++; /* back */ points.push_back(Vector3(start_x + scaled_size_x - x, -y, start_pos.z)); normals.push_back(Vector3(0.0, 0.0, -1.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(twothirds + offset_back + u, v)); point++; @@ -1184,14 +1187,14 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const { /* right */ points.push_back(Vector3(right, -y, -z)); normals.push_back(normal_right); - ADD_TANGENT(0.0, 0.0, 1.0, -1.0); + ADD_TANGENT(0.0, 0.0, -1.0, -1.0); uvs.push_back(Vector2(onethird + u, v)); point++; /* left */ points.push_back(Vector3(left, -y, z)); normals.push_back(normal_left); - ADD_TANGENT(0.0, 0.0, -1.0, -1.0); + ADD_TANGENT(0.0, 0.0, 1.0, -1.0); uvs.push_back(Vector2(u, 0.5 + v)); point++; @@ -1238,7 +1241,7 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const { /* bottom */ points.push_back(Vector3(x, start_pos.y, -z)); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, -1.0); uvs.push_back(Vector2(twothirds + u, 0.5 + v)); point++; @@ -1282,7 +1285,7 @@ void PrismMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("get_subdivide_depth"), &PrismMesh::get_subdivide_depth); ADD_PROPERTY(PropertyInfo(Variant::REAL, "left_to_right", PROPERTY_HINT_RANGE, "-2.0,2.0,0.1"), "set_left_to_right", "get_left_to_right"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size"), "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_height", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_subdivide_height", "get_subdivide_height"); ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_subdivide_depth", "get_subdivide_depth"); @@ -1379,7 +1382,7 @@ void QuadMesh::_create_mesh_array(Array &p_arr) const { tangents.set(i * 4 + 0, 1.0); tangents.set(i * 4 + 1, 0.0); tangents.set(i * 4 + 2, 0.0); - tangents.set(i * 4 + 3, 1.0); + tangents.set(i * 4 + 3, -1.0); static const Vector2 quad_uv[4] = { Vector2(0, 1), @@ -1465,7 +1468,7 @@ void SphereMesh::_create_mesh_array(Array &p_arr) const { points.push_back(p); normals.push_back(p.normalized()); }; - ADD_TANGENT(-z, 0.0, x, -1.0) + ADD_TANGENT(z, 0.0, -x, -1.0) uvs.push_back(Vector2(u, v)); point++; diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp index 597ffe49ae..5ae843f2bd 100644 --- a/scene/resources/scene_format_text.cpp +++ b/scene/resources/scene_format_text.cpp @@ -626,14 +626,14 @@ Error ResourceInteractiveLoaderText::poll() { if (!packed_scene.is_valid()) return error; - error = OK; + error = ERR_FILE_EOF; //get it here resource = packed_scene; if (!ResourceCache::has(res_path)) { packed_scene->set_path(res_path); } - return ERR_FILE_EOF; + return error; } else { error_text += "Unknown tag in file: " + next_tag.name; @@ -1600,9 +1600,11 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const RES &p_r String name = PE->get().name; Variant value = res->get(name); + Variant default_value = ClassDB::class_get_default_property_value(res->get_class(), name); - if ((PE->get().usage & PROPERTY_USAGE_STORE_IF_NONZERO && value.is_zero()) || (PE->get().usage & PROPERTY_USAGE_STORE_IF_NONONE && value.is_one())) + if (default_value.get_type() != Variant::NIL && bool(Variant::evaluate(Variant::OP_EQUAL, value, default_value))) { continue; + } if (PE->get().type == Variant::OBJECT && value.is_zero() && !(PE->get().usage & PROPERTY_USAGE_STORE_IF_NULL)) continue; diff --git a/scene/resources/shape.cpp b/scene/resources/shape.cpp index 8ccca81acd..214e2e8edc 100644 --- a/scene/resources/shape.cpp +++ b/scene/resources/shape.cpp @@ -101,7 +101,7 @@ void Shape::_bind_methods() { ClassDB::bind_method(D_METHOD("set_margin", "margin"), &Shape::set_margin); ClassDB::bind_method(D_METHOD("get_margin"), &Shape::get_margin); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "margin", PROPERTY_HINT_RANGE, "0.04,10,0.01"), "set_margin", "get_margin"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "margin", PROPERTY_HINT_RANGE, "0.001,10,0.001"), "set_margin", "get_margin"); } Shape::Shape() : diff --git a/scene/resources/sky_box.cpp b/scene/resources/sky_box.cpp index a6a52c7bba..347bca4400 100644 --- a/scene/resources/sky_box.cpp +++ b/scene/resources/sky_box.cpp @@ -190,9 +190,15 @@ Ref<Image> ProceduralSky::_generate_sky() { float c = (v_angle - (Math_PI * 0.5)) / (Math_PI * 0.5); color = ground_horizon_linear.linear_interpolate(ground_bottom_linear, Math::ease(c, ground_curve)); + color.r *= ground_energy; + color.g *= ground_energy; + color.b *= ground_energy; } else { float c = v_angle / (Math_PI * 0.5); color = sky_horizon_linear.linear_interpolate(sky_top_linear, Math::ease(1.0 - c, sky_curve)); + color.r *= sky_energy; + color.g *= sky_energy; + color.b *= sky_energy; float sun_angle = Math::rad2deg(Math::acos(CLAMP(sun.dot(normal), -1.0, 1.0))); diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp index fb81375b0a..087990c308 100644 --- a/scene/resources/style_box.cpp +++ b/scene/resources/style_box.cpp @@ -136,7 +136,7 @@ Ref<Texture> StyleBoxTexture::get_normal_map() const { void StyleBoxTexture::set_margin_size(Margin p_margin, float p_size) { - ERR_FAIL_INDEX(p_margin, 4); + ERR_FAIL_INDEX((int)p_margin, 4); margin[p_margin] = p_size; emit_changed(); @@ -200,7 +200,7 @@ Size2 StyleBoxTexture::get_center_size() const { void StyleBoxTexture::set_expand_margin_size(Margin p_expand_margin, float p_size) { - ERR_FAIL_INDEX(p_expand_margin, 4); + ERR_FAIL_INDEX((int)p_expand_margin, 4); expand_margin[p_expand_margin] = p_size; emit_changed(); } @@ -223,7 +223,7 @@ void StyleBoxTexture::set_expand_margin_size_all(float p_expand_margin_size) { float StyleBoxTexture::get_expand_margin_size(Margin p_expand_margin) const { - ERR_FAIL_INDEX_V(p_expand_margin, 4, 0); + ERR_FAIL_INDEX_V((int)p_expand_margin, 4, 0); return expand_margin[p_expand_margin]; } @@ -310,7 +310,7 @@ void StyleBoxTexture::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_map", "get_normal_map"); - ADD_PROPERTYNZ(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); ADD_GROUP("Margin", "margin_"); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "margin_left", PROPERTY_HINT_RANGE, "0,2048,1"), "set_margin_size", "get_margin_size", MARGIN_LEFT); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "margin_right", PROPERTY_HINT_RANGE, "0,2048,1"), "set_margin_size", "get_margin_size", MARGIN_RIGHT); @@ -322,8 +322,8 @@ void StyleBoxTexture::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "expand_margin_top", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin_size", "get_expand_margin_size", MARGIN_TOP); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "expand_margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin_size", "get_expand_margin_size", MARGIN_BOTTOM); ADD_GROUP("Axis Stretch", "axis_stretch_"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "axis_stretch_horizontal", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_h_axis_stretch_mode", "get_h_axis_stretch_mode"); - ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "axis_stretch_vertical", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_v_axis_stretch_mode", "get_v_axis_stretch_mode"); + 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("Modulate", "modulate_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate_color"), "set_modulate", "get_modulate"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "is_draw_center_enabled"); @@ -565,8 +565,6 @@ inline void draw_ring(Vector<Vector2> &verts, Vector<int> &indices, Vector<Color vert_offset = 0; } int adapted_corner_detail = (corner_radius[0] == 0 && corner_radius[1] == 0 && corner_radius[2] == 0 && corner_radius[3] == 0) ? 1 : corner_detail; - int rings = (border_width[0] == 0 && border_width[1] == 0 && border_width[2] == 0 && border_width[3] == 0) ? 1 : 2; - rings = 2; int ring_corner_radius[4]; set_inner_corner_radius(style_rect, ring_rect, corner_radius, ring_corner_radius); @@ -592,7 +590,7 @@ inline void draw_ring(Vector<Vector2> &verts, Vector<int> &indices, Vector<Color //calculate the vert array for (int corner_index = 0; corner_index < 4; corner_index++) { for (int detail = 0; detail <= adapted_corner_detail; detail++) { - for (int inner_outer = (2 - rings); inner_outer < 2; inner_outer++) { + for (int inner_outer = 0; inner_outer < 2; inner_outer++) { float radius; Color color; Point2 corner_point; @@ -613,19 +611,17 @@ inline void draw_ring(Vector<Vector2> &verts, Vector<int> &indices, Vector<Color } } - if (rings == 2) { - int vert_count = (adapted_corner_detail + 1) * 4 * rings; - //fill the indices and the colors for the border - for (int i = 0; i < vert_count; i++) { - //poly 1 - indices.push_back(vert_offset + ((i + 0) % vert_count)); - indices.push_back(vert_offset + ((i + 2) % vert_count)); - indices.push_back(vert_offset + ((i + 1) % vert_count)); - //poly 2 - indices.push_back(vert_offset + ((i + 1) % vert_count)); - indices.push_back(vert_offset + ((i + 2) % vert_count)); - indices.push_back(vert_offset + ((i + 3) % vert_count)); - } + int vert_count = (adapted_corner_detail + 1) * 4 * 2; + //fill the indices and the colors for the border + for (int i = 0; i < vert_count; i++) { + //poly 1 + indices.push_back(vert_offset + ((i + 0) % vert_count)); + indices.push_back(vert_offset + ((i + 2) % vert_count)); + indices.push_back(vert_offset + ((i + 1) % vert_count)); + //poly 2 + indices.push_back(vert_offset + ((i + 1) % vert_count)); + indices.push_back(vert_offset + ((i + 2) % vert_count)); + indices.push_back(vert_offset + ((i + 3) % vert_count)); } } diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp index 5d4c7861e3..9907636e91 100644 --- a/scene/resources/surface_tool.cpp +++ b/scene/resources/surface_tool.cpp @@ -764,10 +764,22 @@ void SurfaceTool::append_from(const Ref<Mesh> &p_existing, int p_surface, const } //mikktspace callbacks +namespace { +struct TangentGenerationContextUserData { + Vector<List<SurfaceTool::Vertex>::Element *> vertices; + Vector<List<int>::Element *> indices; +}; +} // namespace + int SurfaceTool::mikktGetNumFaces(const SMikkTSpaceContext *pContext) { - Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); - return varr.size() / 3; + TangentGenerationContextUserData &triangle_data = *reinterpret_cast<TangentGenerationContextUserData *>(pContext->m_pUserData); + + if (triangle_data.indices.size() > 0) { + return triangle_data.indices.size() / 3; + } else { + return triangle_data.vertices.size() / 3; + } } int SurfaceTool::mikktGetNumVerticesOfFace(const SMikkTSpaceContext *pContext, const int iFace) { @@ -775,8 +787,17 @@ int SurfaceTool::mikktGetNumVerticesOfFace(const SMikkTSpaceContext *pContext, c } void SurfaceTool::mikktGetPosition(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert) { - Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); - Vector3 v = varr[iFace * 3 + iVert]->get().vertex; + TangentGenerationContextUserData &triangle_data = *reinterpret_cast<TangentGenerationContextUserData *>(pContext->m_pUserData); + Vector3 v; + if (triangle_data.indices.size() > 0) { + int index = triangle_data.indices[iFace * 3 + iVert]->get(); + if (index < triangle_data.vertices.size()) { + v = triangle_data.vertices[index]->get().vertex; + } + } else { + v = triangle_data.vertices[iFace * 3 + iVert]->get().vertex; + } + fvPosOut[0] = v.x; fvPosOut[1] = v.y; fvPosOut[2] = v.z; @@ -784,38 +805,56 @@ void SurfaceTool::mikktGetPosition(const SMikkTSpaceContext *pContext, float fvP void SurfaceTool::mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert) { - Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); - Vector3 v = varr[iFace * 3 + iVert]->get().normal; + TangentGenerationContextUserData &triangle_data = *reinterpret_cast<TangentGenerationContextUserData *>(pContext->m_pUserData); + Vector3 v; + if (triangle_data.indices.size() > 0) { + int index = triangle_data.indices[iFace * 3 + iVert]->get(); + if (index < triangle_data.vertices.size()) { + v = triangle_data.vertices[index]->get().normal; + } + } else { + v = triangle_data.vertices[iFace * 3 + iVert]->get().normal; + } + fvNormOut[0] = v.x; fvNormOut[1] = v.y; fvNormOut[2] = v.z; } void SurfaceTool::mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert) { - Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); - Vector2 v = varr[iFace * 3 + iVert]->get().uv; + TangentGenerationContextUserData &triangle_data = *reinterpret_cast<TangentGenerationContextUserData *>(pContext->m_pUserData); + Vector2 v; + if (triangle_data.indices.size() > 0) { + int index = triangle_data.indices[iFace * 3 + iVert]->get(); + if (index < triangle_data.vertices.size()) { + v = triangle_data.vertices[index]->get().uv; + } + } else { + v = triangle_data.vertices[iFace * 3 + iVert]->get().uv; + } + fvTexcOut[0] = v.x; fvTexcOut[1] = v.y; - //fvTexcOut[1]=1.0-v.y; } void SurfaceTool::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, const tbool bIsOrientationPreserving, const int iFace, const int iVert) { - Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); - Vertex *vtx = &varr[iFace * 3 + iVert]->get(); - - vtx->tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); - vtx->binormal = Vector3(fvBiTangent[0], fvBiTangent[1], fvBiTangent[2]); -} - -void SurfaceTool::mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert) { - - Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); - Vertex &vtx = varr[iFace * 3 + iVert]->get(); + TangentGenerationContextUserData &triangle_data = *reinterpret_cast<TangentGenerationContextUserData *>(pContext->m_pUserData); + Vertex *vtx = NULL; + if (triangle_data.indices.size() > 0) { + int index = triangle_data.indices[iFace * 3 + iVert]->get(); + if (index < triangle_data.vertices.size()) { + vtx = &triangle_data.vertices[index]->get(); + } + } else { + vtx = &triangle_data.vertices[iFace * 3 + iVert]->get(); + } - vtx.tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); - vtx.binormal = vtx.normal.cross(vtx.tangent) * fSign; + if (vtx != NULL) { + vtx->tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); + vtx->binormal = Vector3(fvBiTangent[0], fvBiTangent[1], fvBiTangent[2]); + } } void SurfaceTool::generate_tangents() { @@ -823,10 +862,6 @@ void SurfaceTool::generate_tangents() { ERR_FAIL_COND(!(format & Mesh::ARRAY_FORMAT_TEX_UV)); ERR_FAIL_COND(!(format & Mesh::ARRAY_FORMAT_NORMAL)); - bool indexed = index_array.size() > 0; - if (indexed) - deindex(); - SMikkTSpaceInterface mkif; mkif.m_getNormal = mikktGetNormal; mkif.m_getNumFaces = mikktGetNumFaces; @@ -839,24 +874,25 @@ void SurfaceTool::generate_tangents() { SMikkTSpaceContext msc; msc.m_pInterface = &mkif; - Vector<List<Vertex>::Element *> vtx; - vtx.resize(vertex_array.size()); + TangentGenerationContextUserData triangle_data; + triangle_data.vertices.resize(vertex_array.size()); int idx = 0; for (List<Vertex>::Element *E = vertex_array.front(); E; E = E->next()) { - vtx.write[idx++] = E; + triangle_data.vertices.write[idx++] = E; E->get().binormal = Vector3(); E->get().tangent = Vector3(); } - msc.m_pUserData = &vtx; + triangle_data.indices.resize(index_array.size()); + idx = 0; + for (List<int>::Element *E = index_array.front(); E; E = E->next()) { + triangle_data.indices.write[idx++] = E; + } + msc.m_pUserData = &triangle_data; bool res = genTangSpaceDefault(&msc); ERR_FAIL_COND(!res); format |= Mesh::ARRAY_FORMAT_TANGENT; - - if (indexed) { - index(); - } } void SurfaceTool::generate_normals(bool p_flip) { diff --git a/scene/resources/surface_tool.h b/scene/resources/surface_tool.h index 459d399380..cc8599e90a 100644 --- a/scene/resources/surface_tool.h +++ b/scene/resources/surface_tool.h @@ -90,7 +90,6 @@ private: static void mikktGetPosition(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert); static void mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert); static void mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert); - static void mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert); static void mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, const tbool bIsOrientationPreserving, const int iFace, const int iVert); diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index 682bfebdd2..4f4d375481 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -994,11 +994,11 @@ void AtlasTexture::_bind_methods() { void AtlasTexture::draw(RID p_canvas_item, const Point2 &p_pos, const Color &p_modulate, bool p_transpose, const Ref<Texture> &p_normal_map) const { - Rect2 rc = region; - if (!atlas.is_valid()) return; + Rect2 rc = region; + if (rc.size.width == 0) { rc.size.width = atlas->get_width(); } @@ -1013,11 +1013,11 @@ void AtlasTexture::draw(RID p_canvas_item, const Point2 &p_pos, const Color &p_m void AtlasTexture::draw_rect(RID p_canvas_item, const Rect2 &p_rect, bool p_tile, const Color &p_modulate, bool p_transpose, const Ref<Texture> &p_normal_map) const { - Rect2 rc = region; - if (!atlas.is_valid()) return; + Rect2 rc = region; + if (rc.size.width == 0) { rc.size.width = atlas->get_width(); } @@ -1048,11 +1048,11 @@ void AtlasTexture::draw_rect_region(RID p_canvas_item, const Rect2 &p_rect, cons bool AtlasTexture::get_rect_region(const Rect2 &p_rect, const Rect2 &p_src_rect, Rect2 &r_rect, Rect2 &r_src_rect) const { - Rect2 rc = region; - if (!atlas.is_valid()) return false; + Rect2 rc = region; + Rect2 src = p_src_rect; if (src.size == Size2()) { src.size = rc.size; @@ -1084,11 +1084,13 @@ bool AtlasTexture::get_rect_region(const Rect2 &p_rect, const Rect2 &p_src_rect, bool AtlasTexture::is_pixel_opaque(int p_x, int p_y) const { - if (atlas.is_valid()) { - return atlas->is_pixel_opaque(p_x + region.position.x + margin.position.x, p_x + region.position.y + margin.position.y); - } + if (!atlas.is_valid()) + return true; - return true; + int x = p_x + region.position.x + margin.position.x; + int y = p_y + region.position.y + margin.position.y; + + return atlas->is_pixel_opaque(x, y); } AtlasTexture::AtlasTexture() { diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp index b102d477f2..3eb652ecd9 100644 --- a/scene/resources/theme.cpp +++ b/scene/resources/theme.cpp @@ -39,26 +39,6 @@ void Theme::_emit_theme_changed() { emit_changed(); } -void Theme::_ref_font(Ref<Font> p_sc) { - - if (!font_refcount.has(p_sc)) { - font_refcount[p_sc] = 1; - p_sc->connect("changed", this, "_emit_theme_changed"); - } else { - font_refcount[p_sc] += 1; - } -} - -void Theme::_unref_font(Ref<Font> p_sc) { - - ERR_FAIL_COND(!font_refcount.has(p_sc)); - font_refcount[p_sc]--; - if (font_refcount[p_sc] == 0) { - p_sc->disconnect("changed", this, "_emit_theme_changed"); - font_refcount.erase(p_sc); - } -} - bool Theme::_set(const StringName &p_name, const Variant &p_value) { String sname = p_name; @@ -217,13 +197,13 @@ void Theme::set_default_theme_font(const Ref<Font> &p_default_font) { return; if (default_theme_font.is_valid()) { - _unref_font(default_theme_font); + default_theme_font->disconnect("changed", this, "_emit_theme_changed"); } default_theme_font = p_default_font; if (default_theme_font.is_valid()) { - _ref_font(default_theme_font); + default_theme_font->connect("changed", this, "_emit_theme_changed", varray(), CONNECT_REFERENCE_COUNTED); } _change_notify(); @@ -263,8 +243,16 @@ void Theme::set_icon(const StringName &p_name, const StringName &p_type, const R bool new_value = !icon_map.has(p_type) || !icon_map[p_type].has(p_name); + if (icon_map[p_type].has(p_name) && icon_map[p_type][p_name].is_valid()) { + icon_map[p_type][p_name]->disconnect("changed", this, "_emit_theme_changed"); + } + icon_map[p_type][p_name] = p_icon; + if (p_icon.is_valid()) { + icon_map[p_type][p_name]->connect("changed", this, "_emit_theme_changed", varray(), CONNECT_REFERENCE_COUNTED); + } + if (new_value) { _change_notify(); emit_changed(); @@ -290,7 +278,12 @@ void Theme::clear_icon(const StringName &p_name, const StringName &p_type) { ERR_FAIL_COND(!icon_map.has(p_type)); ERR_FAIL_COND(!icon_map[p_type].has(p_name)); + if (icon_map[p_type][p_name].is_valid()) { + icon_map[p_type][p_name]->disconnect("changed", this, "_emit_theme_changed"); + } + icon_map[p_type].erase(p_name); + _change_notify(); emit_changed(); } @@ -358,8 +351,16 @@ void Theme::set_stylebox(const StringName &p_name, const StringName &p_type, con bool new_value = !style_map.has(p_type) || !style_map[p_type].has(p_name); + if (style_map[p_type].has(p_name) && style_map[p_type][p_name].is_valid()) { + style_map[p_type][p_name]->disconnect("changed", this, "_emit_theme_changed"); + } + style_map[p_type][p_name] = p_style; + if (p_style.is_valid()) { + style_map[p_type][p_name]->connect("changed", this, "_emit_theme_changed", varray(), CONNECT_REFERENCE_COUNTED); + } + if (new_value) _change_notify(); emit_changed(); @@ -385,7 +386,12 @@ void Theme::clear_stylebox(const StringName &p_name, const StringName &p_type) { ERR_FAIL_COND(!style_map.has(p_type)); ERR_FAIL_COND(!style_map[p_type].has(p_name)); + if (style_map[p_type][p_name].is_valid()) { + style_map[p_type][p_name]->disconnect("changed", this, "_emit_theme_changed"); + } + style_map[p_type].erase(p_name); + _change_notify(); emit_changed(); } @@ -416,15 +422,14 @@ void Theme::set_font(const StringName &p_name, const StringName &p_type, const R bool new_value = !font_map.has(p_type) || !font_map[p_type].has(p_name); - if (!new_value) { - if (font_map[p_type][p_name].is_valid()) { - _unref_font(font_map[p_type][p_name]); - } + if (font_map[p_type][p_name].is_valid()) { + font_map[p_type][p_name]->disconnect("changed", this, "_emit_theme_changed"); } + font_map[p_type][p_name] = p_font; if (p_font.is_valid()) { - _ref_font(p_font); + font_map[p_type][p_name]->connect("changed", this, "_emit_theme_changed", varray(), CONNECT_REFERENCE_COUNTED); } if (new_value) { @@ -452,8 +457,8 @@ void Theme::clear_font(const StringName &p_name, const StringName &p_type) { ERR_FAIL_COND(!font_map.has(p_type)); ERR_FAIL_COND(!font_map[p_type].has(p_name)); - if (font_map.has(p_type) && font_map[p_type].has(p_name) && font_map[p_type][p_name].is_valid()) { - _unref_font(font_map[p_type][p_name]); + if (font_map[p_type][p_name].is_valid()) { + font_map[p_type][p_name]->disconnect("changed", this, "_emit_theme_changed"); } font_map[p_type].erase(p_name); @@ -570,15 +575,91 @@ void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const } } +void Theme::clear() { + + //these need disconnecting + { + const StringName *K = NULL; + while ((K = icon_map.next(K))) { + const StringName *L = NULL; + while ((L = icon_map[*K].next(L))) { + icon_map[*K][*L]->disconnect("changed", this, "_emit_theme_changed"); + } + } + } + + { + const StringName *K = NULL; + while ((K = style_map.next(K))) { + const StringName *L = NULL; + while ((L = style_map[*K].next(L))) { + style_map[*K][*L]->disconnect("changed", this, "_emit_theme_changed"); + } + } + } + + { + const StringName *K = NULL; + while ((K = font_map.next(K))) { + const StringName *L = NULL; + while ((L = font_map[*K].next(L))) { + font_map[*K][*L]->disconnect("changed", this, "_emit_theme_changed"); + } + } + } + + icon_map.clear(); + style_map.clear(); + font_map.clear(); + shader_map.clear(); + color_map.clear(); + constant_map.clear(); + + _change_notify(); + emit_changed(); +} + void Theme::copy_default_theme() { Ref<Theme> default_theme = get_default(); - icon_map = default_theme->icon_map; - style_map = default_theme->style_map; - font_map = default_theme->font_map; + //these need reconnecting, so add normally + { + const StringName *K = NULL; + while ((K = default_theme->icon_map.next(K))) { + const StringName *L = NULL; + while ((L = default_theme->icon_map[*K].next(L))) { + set_icon(*K, *L, default_theme->icon_map[*K][*L]); + } + } + } + + { + const StringName *K = NULL; + while ((K = default_theme->style_map.next(K))) { + const StringName *L = NULL; + while ((L = default_theme->style_map[*K].next(L))) { + set_stylebox(*K, *L, default_theme->style_map[*K][*L]); + } + } + } + + { + const StringName *K = NULL; + while ((K = default_theme->font_map.next(K))) { + const StringName *L = NULL; + while ((L = default_theme->font_map[*K].next(L))) { + set_font(*K, *L, default_theme->font_map[*K][*L]); + } + } + } + + //these are ok to just copy + color_map = default_theme->color_map; constant_map = default_theme->constant_map; + shader_map = default_theme->shader_map; + _change_notify(); emit_changed(); } @@ -661,6 +742,8 @@ void Theme::_bind_methods() { ClassDB::bind_method(D_METHOD("clear_constant", "name", "type"), &Theme::clear_constant); ClassDB::bind_method(D_METHOD("get_constant_list", "type"), &Theme::_get_constant_list); + ClassDB::bind_method(D_METHOD("clear"), &Theme::clear); + ClassDB::bind_method(D_METHOD("set_default_font", "font"), &Theme::set_default_theme_font); ClassDB::bind_method(D_METHOD("get_default_font"), &Theme::get_default_theme_font); @@ -678,411 +761,3 @@ Theme::Theme() { Theme::~Theme() { } - -RES ResourceFormatLoaderTheme::load(const String &p_path, const String &p_original_path, Error *r_error) { - if (r_error) - *r_error = ERR_CANT_OPEN; - - Error err; - FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - - ERR_EXPLAIN("Unable to open theme file: " + p_path); - ERR_FAIL_COND_V(err, RES()); - String base_path = p_path.get_base_dir(); - Ref<Theme> theme(memnew(Theme)); - Map<StringName, Variant> library; - if (r_error) - *r_error = ERR_FILE_CORRUPT; - - bool reading_library = false; - int line = 0; - - while (!f->eof_reached()) { - - String l = f->get_line().strip_edges(); - line++; - - int comment = l.find(";"); - if (comment != -1) - l = l.substr(0, comment); - if (l == "") - continue; - - if (l.begins_with("[")) { - if (l == "[library]") { - reading_library = true; - } else if (l == "[theme]") { - reading_library = false; - } else { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Unknown section type: '" + l + "'."); - ERR_FAIL_V(RES()); - } - continue; - } - - int eqpos = l.find("="); - if (eqpos == -1) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Expected '='."); - ERR_FAIL_V(RES()); - } - - String right = l.substr(eqpos + 1, l.length()).strip_edges(); - if (right == "") { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Expected value after '='."); - ERR_FAIL_V(RES()); - } - - Variant value; - - if (right.is_valid_integer()) { - //is number - value = right.to_int(); - } else if (right.is_valid_html_color()) { - //is html color - value = Color::html(right); - } else if (right.begins_with("@")) { //reference - - String reference = right.substr(1, right.length()); - if (!library.has(reference)) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid reference to '" + reference + "'."); - ERR_FAIL_V(RES()); - } - - value = library[reference]; - - } else if (right.begins_with("default")) { //use default - //do none - } else { - //attempt to parse a constructor - int popenpos = right.find("("); - - if (popenpos == -1) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid constructor syntax: " + right); - ERR_FAIL_V(RES()); - } - - int pclosepos = right.find_last(")"); - - if (pclosepos == -1) { - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid constructor parameter syntax: " + right); - ERR_FAIL_V(RES()); - } - - String type = right.substr(0, popenpos); - String param = right.substr(popenpos + 1, pclosepos - popenpos - 1); - - if (type == "icon") { - - String path; - - if (param.is_abs_path()) - path = param; - else - path = base_path + "/" + param; - - Ref<Texture> texture = ResourceLoader::load(path); - if (!texture.is_valid()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Couldn't find icon at path: " + path); - ERR_FAIL_V(RES()); - } - - value = texture; - - } else if (type == "sbox") { - - String path; - - if (param.is_abs_path()) - path = param; - else - path = base_path + "/" + param; - - Ref<StyleBox> stylebox = ResourceLoader::load(path); - if (!stylebox.is_valid()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Couldn't find stylebox at path: " + path); - ERR_FAIL_V(RES()); - } - - value = stylebox; - - } else if (type == "sboxt") { - - Vector<String> params = param.split(","); - if (params.size() != 5 && params.size() != 9) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid param count for sboxt(): '" + right + "'."); - ERR_FAIL_V(RES()); - } - - String path = params[0]; - - if (!param.is_abs_path()) - path = base_path + "/" + path; - - Ref<Texture> tex = ResourceLoader::load(path); - if (tex.is_null()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Could not open texture for sboxt at path: '" + params[0] + "'."); - ERR_FAIL_V(RES()); - } - - Ref<StyleBoxTexture> sbtex(memnew(StyleBoxTexture)); - - sbtex->set_texture(tex); - - for (int i = 0; i < 4; i++) { - if (!params[i + 1].is_valid_integer()) { - - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid expand margin parameter for sboxt #" + itos(i + 1) + ", expected integer constant, got: '" + params[i + 1] + "'."); - ERR_FAIL_V(RES()); - } - - int margin = params[i + 1].to_int(); - sbtex->set_expand_margin_size(Margin(i), margin); - } - - if (params.size() == 9) { - - for (int i = 0; i < 4; i++) { - - if (!params[i + 5].is_valid_integer()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid expand margin parameter for sboxt #" + itos(i + 5) + ", expected integer constant, got: '" + params[i + 5] + "'."); - ERR_FAIL_V(RES()); - } - - int margin = params[i + 5].to_int(); - sbtex->set_margin_size(Margin(i), margin); - } - } - - value = sbtex; - } else if (type == "sboxf") { - - Vector<String> params = param.split(","); - if (params.size() < 2) { - - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid param count for sboxf(): '" + right + "'."); - ERR_FAIL_V(RES()); - } - - Ref<StyleBoxFlat> sbflat(memnew(StyleBoxFlat)); - - if (!params[0].is_valid_integer()) { - - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Expected integer numeric constant for parameter 0 (border size)."); - ERR_FAIL_V(RES()); - } - - sbflat->set_border_width_all(params[0].to_int()); - - if (!params[0].is_valid_integer()) { - - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Expected integer numeric constant for parameter 0 (border size)."); - ERR_FAIL_V(RES()); - } - - int left = MIN(params.size() - 1, 3); - - int ccodes = 0; - - for (int i = 0; i < left; i++) { - - if (params[i + 1].is_valid_html_color()) - ccodes++; - else - break; - } - - Color normal; - Color bright; - Color dark; - - if (ccodes < 1) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Expected at least 1, 2 or 3 html color codes."); - ERR_FAIL_V(RES()); - } else if (ccodes == 1) { - - normal = Color::html(params[1]); - bright = Color::html(params[1]); - dark = Color::html(params[1]); - } else if (ccodes == 2) { - - normal = Color::html(params[1]); - bright = Color::html(params[2]); - dark = Color::html(params[2]); - } else { - - normal = Color::html(params[1]); - bright = Color::html(params[2]); - dark = Color::html(params[3]); - } - - sbflat->set_border_color_all(bright); - // sbflat->set_dark_color(dark); - sbflat->set_bg_color(normal); - - if (params.size() == ccodes + 5) { - //margins - for (int i = 0; i < 4; i++) { - - if (!params[i + ccodes + 1].is_valid_integer()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid expand margin parameter for sboxf #" + itos(i + ccodes + 1) + ", expected integer constant, got: '" + params[i + ccodes + 1] + "'."); - ERR_FAIL_V(RES()); - } - - //int margin = params[i+ccodes+1].to_int(); - //sbflat->set_margin_size(Margin(i),margin); - } - } else if (params.size() != ccodes + 1) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid amount of margin parameters for sboxt."); - ERR_FAIL_V(RES()); - } - - value = sbflat; - - } else { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid constructor type: '" + type + "'."); - ERR_FAIL_V(RES()); - } - } - - //parse left and do something with it - String left = l.substr(0, eqpos); - - if (reading_library) { - - left = left.strip_edges(); - if (!left.is_valid_identifier()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": <LibraryItem> is not a valid identifier."); - ERR_FAIL_V(RES()); - } - if (library.has(left)) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Already in library: '" + left + "'."); - ERR_FAIL_V(RES()); - } - - library[left] = value; - } else { - - int pointpos = left.find("."); - if (pointpos == -1) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Expected 'control.item=..' assign syntax."); - ERR_FAIL_V(RES()); - } - - String control = left.substr(0, pointpos).strip_edges(); - if (!control.is_valid_identifier()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": <Control> is not a valid identifier."); - ERR_FAIL_V(RES()); - } - String item = left.substr(pointpos + 1, left.size()).strip_edges(); - if (!item.is_valid_identifier()) { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": <Item> is not a valid identifier."); - ERR_FAIL_V(RES()); - } - - if (value.get_type() == Variant::NIL) { - //try to use exiting - if (Theme::get_default()->has_stylebox(item, control)) - value = Theme::get_default()->get_stylebox(item, control); - else if (Theme::get_default()->has_font(item, control)) - value = Theme::get_default()->get_font(item, control); - else if (Theme::get_default()->has_icon(item, control)) - value = Theme::get_default()->get_icon(item, control); - else if (Theme::get_default()->has_color(item, control)) - value = Theme::get_default()->get_color(item, control); - else if (Theme::get_default()->has_constant(item, control)) - value = Theme::get_default()->get_constant(item, control); - else { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Default not present for: '" + control + "." + item + "'."); - ERR_FAIL_V(RES()); - } - } - - if (value.get_type() == Variant::OBJECT) { - - Ref<Resource> res = value; - if (!res.is_valid()) { - - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid resource (NULL)."); - ERR_FAIL_V(RES()); - } - - if (Object::cast_to<StyleBox>(*res)) { - theme->set_stylebox(item, control, res); - } else if (Object::cast_to<Font>(*res)) { - theme->set_font(item, control, res); - } else if (Object::cast_to<Font>(*res)) { - theme->set_font(item, control, res); - } else if (Object::cast_to<Texture>(*res)) { - theme->set_icon(item, control, res); - } else { - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Invalid resource type."); - ERR_FAIL_V(RES()); - } - } else if (value.get_type() == Variant::COLOR) { - - theme->set_color(item, control, value); - - } else if (value.get_type() == Variant::INT) { - - theme->set_constant(item, control, value); - - } else { - - memdelete(f); - ERR_EXPLAIN(p_path + ":" + itos(line) + ": Couldn't even determine what this setting is! what did you do!?"); - ERR_FAIL_V(RES()); - } - } - } - - f->close(); - memdelete(f); - - if (r_error) - *r_error = OK; - - return theme; -} - -void ResourceFormatLoaderTheme::get_recognized_extensions(List<String> *p_extensions) const { - - p_extensions->push_back("theme"); -} - -bool ResourceFormatLoaderTheme::handles_type(const String &p_type) const { - - return p_type == "Theme"; -} - -String ResourceFormatLoaderTheme::get_resource_type(const String &p_path) const { - - if (p_path.get_extension().to_lower() == "theme") - return "Theme"; - return ""; -} diff --git a/scene/resources/theme.h b/scene/resources/theme.h index 0b76e95f18..ba47c5fb3c 100644 --- a/scene/resources/theme.h +++ b/scene/resources/theme.h @@ -47,12 +47,6 @@ class Theme : public Resource { RES_BASE_EXTENSION("theme"); static Ref<Theme> default_theme; - - //keep a reference count to font, so each time the font changes, we emit theme changed too - Map<Ref<Font>, int> font_refcount; - - void _ref_font(Ref<Font> p_sc); - void _unref_font(Ref<Font> p_sc); void _emit_theme_changed(); HashMap<StringName, HashMap<StringName, Ref<Texture> > > icon_map; @@ -190,17 +184,10 @@ public: void get_type_list(List<StringName> *p_list) const; void copy_default_theme(); + void clear(); Theme(); ~Theme(); }; -class ResourceFormatLoaderTheme : public ResourceFormatLoader { -public: - virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); - virtual void get_recognized_extensions(List<String> *p_extensions) const; - virtual bool handles_type(const String &p_type) const; - virtual String get_resource_type(const String &p_path) const; -}; - #endif diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index f852ecd7eb..88dbc67e01 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -129,6 +129,22 @@ bool TileSet::_set(const StringName &p_name, const Variant &p_value) { } p.pop_front(); } + } else if (what == "z_index_map") { + tile_map[id].autotile_data.z_index_map.clear(); + Array p = p_value; + Vector3 val; + Vector2 v; + int z_index; + while (p.size() > 0) { + val = p[0]; + if (val.z > 1) { + v.x = val.x; + v.y = val.y; + z_index = (int)val.z; + tile_map[id].autotile_data.z_index_map[v] = z_index; + } + p.pop_front(); + } } } else if (what == "shape") tile_set_shape(id, 0, p_value); @@ -228,6 +244,19 @@ bool TileSet::_get(const StringName &p_name, Variant &r_ret) const { } } r_ret = p; + } else if (what == "z_index_map") { + Array p; + Vector3 v; + for (Map<Vector2, int>::Element *E = tile_map[id].autotile_data.z_index_map.front(); E; E = E->next()) { + if (E->value() != 0) { + //Don't save default value + v.x = E->key().x; + v.y = E->key().y; + v.z = E->value(); + p.push_back(v); + } + } + r_ret = p; } } else if (what == "shape") r_ret = tile_get_shape(id, 0); @@ -278,6 +307,7 @@ void TileSet::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/occluder_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/navpoly_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/priority_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); + p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/z_index_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); } else if (tile_get_tile_mode(id) == ATLAS_TILE) { p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "autotile/icon_coordinate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "autotile/tile_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); @@ -476,6 +506,23 @@ int TileSet::autotile_get_subtile_priority(int p_id, const Vector2 &p_coord) { return 1; } +void TileSet::autotile_set_z_index(int p_id, const Vector2 &p_coord, int p_z_index) { + + ERR_FAIL_COND(!tile_map.has(p_id)); + tile_map[p_id].autotile_data.z_index_map[p_coord] = p_z_index; + emit_changed(); +} + +int TileSet::autotile_get_z_index(int p_id, const Vector2 &p_coord) { + + ERR_FAIL_COND_V(!tile_map.has(p_id), 1); + if (tile_map[p_id].autotile_data.z_index_map.has(p_coord)) { + return tile_map[p_id].autotile_data.z_index_map[p_coord]; + } + //When not custom z index set return the default value + return 0; +} + const Map<Vector2, int> &TileSet::autotile_get_priority_map(int p_id) const { static Map<Vector2, int> dummy; diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h index 1802bf12b6..2ab771b1b0 100644 --- a/scene/resources/tile_set.h +++ b/scene/resources/tile_set.h @@ -87,6 +87,7 @@ public: Map<Vector2, Ref<OccluderPolygon2D> > occluder_map; Map<Vector2, Ref<NavigationPolygon> > navpoly_map; Map<Vector2, int> priority_map; + Map<Vector2, int> z_index_map; // Default size to prevent invalid value explicit AutotileData() : @@ -172,6 +173,9 @@ public: int autotile_get_subtile_priority(int p_id, const Vector2 &p_coord); const Map<Vector2, int> &autotile_get_priority_map(int p_id) const; + void autotile_set_z_index(int p_id, const Vector2 &p_coord, int p_z_index); + int autotile_get_z_index(int p_id, const Vector2 &p_coord); + void autotile_set_bitmask(int p_id, Vector2 p_coord, uint16_t p_flag); uint16_t autotile_get_bitmask(int p_id, Vector2 p_coord); const Map<Vector2, uint16_t> &autotile_get_bitmask_map(int p_id); diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 96b9cfa137..3d247ab7ad 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -106,7 +106,7 @@ void VisualShaderNode::_bind_methods() { ClassDB::bind_method(D_METHOD("_get_default_input_values"), &VisualShaderNode::_get_default_input_values); ADD_PROPERTY(PropertyInfo(Variant::INT, "output_port_for_preview"), "set_output_port_for_preview", "get_output_port_for_preview"); - ADD_PROPERTYNZ(PropertyInfo(Variant::ARRAY, "default_input_values", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_default_input_values", "_get_default_input_values"); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "default_input_values", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_default_input_values", "_get_default_input_values"); ADD_SIGNAL(MethodInfo("editor_refresh_request")); } diff --git a/servers/audio/audio_rb_resampler.cpp b/servers/audio/audio_rb_resampler.cpp index 84a87de2e2..d9b3579812 100644 --- a/servers/audio/audio_rb_resampler.cpp +++ b/servers/audio/audio_rb_resampler.cpp @@ -79,53 +79,27 @@ uint32_t AudioRBResampler::_resample(AudioFrame *p_dest, int p_todo, int32_t p_i p_dest[i] = AudioFrame(v0, v1); } - // For now, channels higher than stereo are almost ignored + // This will probably never be used, but added anyway if (C == 4) { - // FIXME: v2 and v3 are not being used (thus were commented out to prevent - // compilation warnings, but they should likely be uncommented *and* used). - // See also C == 6 with similar issues. float v0 = rb[(pos << 2) + 0]; float v1 = rb[(pos << 2) + 1]; - /* - float v2 = rb[(pos << 2) + 2]; - float v3 = rb[(pos << 2) + 3]; - */ float v0n = rb[(pos_next << 2) + 0]; float v1n = rb[(pos_next << 2) + 1]; - /* - float v2n = rb[(pos_next << 2) + 2]; - float v3n = rb[(pos_next << 2) + 3]; - */ - v0 += (v0n - v0) * frac; v1 += (v1n - v1) * frac; - /* - v2 += (v2n - v2) * frac; - v3 += (v3n - v3) * frac; - */ p_dest[i] = AudioFrame(v0, v1); } if (C == 6) { - // FIXME: Lot of unused assignments here, but it seems like intermediate calculations - // should be done as for C == 2 (C == 4 also has some unused assignments). float v0 = rb[(pos * 6) + 0]; float v1 = rb[(pos * 6) + 1]; - /* - float v2 = rb[(pos * 6) + 2]; - float v3 = rb[(pos * 6) + 3]; - float v4 = rb[(pos * 6) + 4]; - float v5 = rb[(pos * 6) + 5]; float v0n = rb[(pos_next * 6) + 0]; float v1n = rb[(pos_next * 6) + 1]; - float v2n = rb[(pos_next * 6) + 2]; - float v3n = rb[(pos_next * 6) + 3]; - float v4n = rb[(pos_next * 6) + 4]; - float v5n = rb[(pos_next * 6) + 5]; - */ + v0 += (v0n - v0) * frac; + v1 += (v1n - v1) * frac; p_dest[i] = AudioFrame(v0, v1); } } diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp index 7de0695e8c..02a0bed964 100644 --- a/servers/audio/audio_stream.cpp +++ b/servers/audio/audio_stream.cpp @@ -136,16 +136,20 @@ void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_fr Vector<int32_t> buf = AudioDriver::get_singleton()->get_input_buffer(); unsigned int input_size = AudioDriver::get_singleton()->get_input_size(); + int mix_rate = AudioDriver::get_singleton()->get_mix_rate(); + int playback_delay = MIN(((50 * mix_rate) / 1000) * 2, buf.size() >> 1); +#ifdef DEBUG_ENABLED + unsigned int input_position = AudioDriver::get_singleton()->get_input_position(); +#endif - // p_frames is multiplied by two since an AudioFrame is stereo - if ((p_frames + MICROPHONE_PLAYBACK_DELAY * 2) > input_size) { + if (playback_delay > input_size) { for (int i = 0; i < p_frames; i++) { p_buffer[i] = AudioFrame(0.0f, 0.0f); } input_ofs = 0; } else { for (int i = 0; i < p_frames; i++) { - if (input_size >= input_ofs) { + if (input_size > input_ofs) { float l = (buf[input_ofs++] >> 16) / 32768.f; if (input_ofs >= buf.size()) { input_ofs = 0; @@ -162,6 +166,12 @@ void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_fr } } +#ifdef DEBUG_ENABLED + if (input_ofs > input_position && (input_ofs - input_position) < (p_frames * 2)) { + print_verbose(String(get_class_name()) + " buffer underrun: input_position=" + itos(input_position) + " input_ofs=" + itos(input_ofs) + " input_size=" + itos(input_size)); + } +#endif + AudioDriver::get_singleton()->unlock(); } diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h index 2740f86d55..f6ed45cc9c 100644 --- a/servers/audio/audio_stream.h +++ b/servers/audio/audio_stream.h @@ -122,8 +122,6 @@ class AudioStreamPlaybackMicrophone : public AudioStreamPlaybackResampled { GDCLASS(AudioStreamPlaybackMicrophone, AudioStreamPlayback) friend class AudioStreamMicrophone; - static const int MICROPHONE_PLAYBACK_DELAY = 256; - bool active; unsigned int input_ofs; diff --git a/servers/audio/effects/audio_effect_filter.h b/servers/audio/effects/audio_effect_filter.h index 11978882bc..e8f12e5efa 100644 --- a/servers/audio/effects/audio_effect_filter.h +++ b/servers/audio/effects/audio_effect_filter.h @@ -96,6 +96,11 @@ VARIANT_ENUM_CAST(AudioEffectFilter::FilterDB) class AudioEffectLowPassFilter : public AudioEffectFilter { GDCLASS(AudioEffectLowPassFilter, AudioEffectFilter) + + void _validate_property(PropertyInfo &property) const { + if (property.name == "gain") property.usage = 0; + } + public: AudioEffectLowPassFilter() : AudioEffectFilter(AudioFilterSW::LOWPASS) {} @@ -103,6 +108,10 @@ public: class AudioEffectHighPassFilter : public AudioEffectFilter { GDCLASS(AudioEffectHighPassFilter, AudioEffectFilter) + void _validate_property(PropertyInfo &property) const { + if (property.name == "gain") property.usage = 0; + } + public: AudioEffectHighPassFilter() : AudioEffectFilter(AudioFilterSW::HIGHPASS) {} @@ -110,6 +119,10 @@ public: class AudioEffectBandPassFilter : public AudioEffectFilter { GDCLASS(AudioEffectBandPassFilter, AudioEffectFilter) + void _validate_property(PropertyInfo &property) const { + if (property.name == "gain") property.usage = 0; + } + public: AudioEffectBandPassFilter() : AudioEffectFilter(AudioFilterSW::BANDPASS) {} diff --git a/servers/audio/effects/reverb.cpp b/servers/audio/effects/reverb.cpp index ef23e4aaf3..b032c91da2 100644 --- a/servers/audio/effects/reverb.cpp +++ b/servers/audio/effects/reverb.cpp @@ -36,22 +36,22 @@ const float Reverb::comb_tunings[MAX_COMBS] = { //freeverb comb tunings - 0.025306122448979593, - 0.026938775510204082, - 0.028956916099773241, - 0.03074829931972789, - 0.032244897959183672, - 0.03380952380952381, - 0.035306122448979592, - 0.036666666666666667 + 0.025306122448979593f, + 0.026938775510204082f, + 0.028956916099773241f, + 0.03074829931972789f, + 0.032244897959183672f, + 0.03380952380952381f, + 0.035306122448979592f, + 0.036666666666666667f }; const float Reverb::allpass_tunings[MAX_ALLPASS] = { //freeverb allpass tunings - 0.0051020408163265302, - 0.007732426303854875, - 0.01, - 0.012607709750566893 + 0.0051020408163265302f, + 0.007732426303854875f, + 0.01f, + 0.012607709750566893f }; void Reverb::process(float *p_src, float *p_dst, int p_frames) { diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index fead2f54da..6fd996c3d3 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -80,6 +80,14 @@ double AudioDriver::get_mix_time() const { return total; } +void AudioDriver::input_buffer_init(int driver_buffer_frames) { + + const int input_buffer_channels = 2; + input_buffer.resize(driver_buffer_frames * input_buffer_channels * 4); + input_position = 0; + input_size = 0; +} + void AudioDriver::input_buffer_write(int32_t sample) { input_buffer.write[input_position++] = sample; @@ -452,6 +460,14 @@ void AudioServer::_mix_step() { to_mix = buffer_size; } +bool AudioServer::thread_has_channel_mix_buffer(int p_bus, int p_buffer) const { + if (p_bus < 0 || p_bus >= buses.size()) + return false; + if (p_buffer < 0 || p_buffer >= buses[p_bus]->channels.size()) + return false; + return true; +} + AudioFrame *AudioServer::thread_get_channel_mix_buffer(int p_bus, int p_buffer) { ERR_FAIL_INDEX_V(p_bus, buses.size(), NULL); @@ -926,6 +942,7 @@ void AudioServer::init() { channel_disable_threshold_db = GLOBAL_DEF_RST("audio/channel_disable_threshold_db", -60.0); channel_disable_frames = float(GLOBAL_DEF_RST("audio/channel_disable_time", 2.0)) * get_mix_rate(); + ProjectSettings::get_singleton()->set_custom_property_info("audio/channel_disable_time", PropertyInfo(Variant::REAL, "audio/channel_disable_time", PROPERTY_HINT_RANGE, "0,5,0.01,or_greater")); buffer_size = 1024; //hardcoded for now init_channels_and_buffers(); @@ -1008,7 +1025,7 @@ void AudioServer::update() { void AudioServer::load_default_bus_layout() { - if (FileAccess::exists("res://default_bus_layout.tres")) { + if (ResourceLoader::exists("res://default_bus_layout.tres")) { Ref<AudioBusLayout> default_layout = ResourceLoader::load("res://default_bus_layout.tres"); if (default_layout.is_valid()) { set_bus_layout(default_layout); @@ -1297,6 +1314,7 @@ void AudioServer::_bind_methods() { ADD_SIGNAL(MethodInfo("bus_layout_changed")); BIND_ENUM_CONSTANT(SPEAKER_MODE_STEREO); + BIND_ENUM_CONSTANT(SPEAKER_SURROUND_31); BIND_ENUM_CONSTANT(SPEAKER_SURROUND_51); BIND_ENUM_CONSTANT(SPEAKER_SURROUND_71); } diff --git a/servers/audio_server.h b/servers/audio_server.h index ba6569eb38..52fa84e3e6 100644 --- a/servers/audio_server.h +++ b/servers/audio_server.h @@ -59,6 +59,7 @@ protected: void audio_server_process(int p_frames, int32_t *p_buffer, bool p_update_mix_time = true); void update_mix_time(int p_frames); + void input_buffer_init(int driver_buffer_frames); void input_buffer_write(int32_t sample); #ifdef DEBUG_ENABLED @@ -281,6 +282,7 @@ public: } //do not use from outside audio thread + bool thread_has_channel_mix_buffer(int p_bus, int p_buffer) const; AudioFrame *thread_get_channel_mix_buffer(int p_bus, int p_buffer); int thread_get_mix_buffer_size() const; int thread_find_bus_index(const StringName &p_name); diff --git a/servers/physics/area_pair_sw.cpp b/servers/physics/area_pair_sw.cpp index d2fef0ab77..5e295edcd1 100644 --- a/servers/physics/area_pair_sw.cpp +++ b/servers/physics/area_pair_sw.cpp @@ -147,10 +147,10 @@ Area2PairSW::~Area2PairSW() { if (colliding) { - if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) + if (area_b->has_area_monitor_callback()) area_b->remove_area_from_query(area_a, shape_a, shape_b); - if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) + if (area_a->has_area_monitor_callback()) area_a->remove_area_from_query(area_b, shape_b, shape_a); } diff --git a/servers/physics/collision_solver_sat.cpp b/servers/physics/collision_solver_sat.cpp index 087ae570fb..f17f6f7014 100644 --- a/servers/physics/collision_solver_sat.cpp +++ b/servers/physics/collision_solver_sat.cpp @@ -98,7 +98,6 @@ static void _generate_contacts_edge_edge(const Vector3 *p_points_A, int p_point_ Vector3 c = rel_A.cross(rel_B).cross(rel_B); - //if ( Math::abs(rel_A.dot(c) )<_EDGE_IS_VALID_SUPPORT_TRESHOLD ) { if (Math::abs(rel_A.dot(c)) < CMP_EPSILON) { // should handle somehow.. diff --git a/servers/physics/collision_solver_sw.cpp b/servers/physics/collision_solver_sw.cpp index 2f2f6d2908..86ef719f6f 100644 --- a/servers/physics/collision_solver_sw.cpp +++ b/servers/physics/collision_solver_sw.cpp @@ -31,7 +31,6 @@ #include "collision_solver_sw.h" #include "collision_solver_sat.h" -#include "collision_solver_sat.h" #include "gjk_epa.h" #define collision_solver sat_calculate_penetration diff --git a/servers/physics/joints/generic_6dof_joint_sw.cpp b/servers/physics/joints/generic_6dof_joint_sw.cpp index 9b1a41e80d..3a965ff800 100644 --- a/servers/physics/joints/generic_6dof_joint_sw.cpp +++ b/servers/physics/joints/generic_6dof_joint_sw.cpp @@ -83,7 +83,7 @@ int G6DOFRotationalLimitMotorSW::testLimitValue(real_t test_value) { real_t G6DOFRotationalLimitMotorSW::solveAngularLimits( real_t timeStep, Vector3 &axis, real_t jacDiagABInv, BodySW *body0, BodySW *body1) { - if (needApplyTorques() == false) return 0.0f; + if (!needApplyTorques()) return 0.0f; real_t target_velocity = m_targetVelocity; real_t maxMotorForce = m_maxMotorForce; @@ -503,6 +503,24 @@ void Generic6DOFJointSW::set_param(Vector3::Axis p_axis, PhysicsServer::G6DOFJoi case PhysicsServer::G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT: { // Not implemented in GodotPhysics backend } break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT: { + // Not implemented in GodotPhysics backend + } break; case PhysicsServer::G6DOF_JOINT_MAX: break; // Can't happen, but silences warning } } @@ -585,6 +603,24 @@ real_t Generic6DOFJointSW::get_param(Vector3::Axis p_axis, PhysicsServer::G6DOFJ case PhysicsServer::G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT: { // Not implemented in GodotPhysics backend } break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT: { + // Not implemented in GodotPhysics backend + } break; case PhysicsServer::G6DOF_JOINT_MAX: break; // Can't happen, but silences warning } return 0; @@ -610,6 +646,12 @@ void Generic6DOFJointSW::set_flag(Vector3::Axis p_axis, PhysicsServer::G6DOFJoin case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR: { // Not implemented in GodotPhysics backend } break; + case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING: { + // Not implemented in GodotPhysics backend + } break; case PhysicsServer::G6DOF_JOINT_FLAG_MAX: break; // Can't happen, but silences warning } } @@ -632,6 +674,12 @@ bool Generic6DOFJointSW::get_flag(Vector3::Axis p_axis, PhysicsServer::G6DOFJoin case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR: { // Not implemented in GodotPhysics backend } break; + case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING: { + // Not implemented in GodotPhysics backend + } break; + case PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING: { + // Not implemented in GodotPhysics backend + } break; case PhysicsServer::G6DOF_JOINT_FLAG_MAX: break; // Can't happen, but silences warning } diff --git a/servers/physics/joints/generic_6dof_joint_sw.h b/servers/physics/joints/generic_6dof_joint_sw.h index b350546c5d..035525c9e6 100644 --- a/servers/physics/joints/generic_6dof_joint_sw.h +++ b/servers/physics/joints/generic_6dof_joint_sw.h @@ -118,14 +118,12 @@ public: //! Is limited bool isLimited() { - if (m_loLimit >= m_hiLimit) return false; - return true; + return (m_loLimit < m_hiLimit); } //! Need apply correction bool needApplyTorques() { - if (m_currentLimit == 0 && m_enableMotor == false) return false; - return true; + return (m_enableMotor || m_currentLimit != 0); } //! calculates error diff --git a/servers/physics/physics_server_sw.cpp b/servers/physics/physics_server_sw.cpp index 76a6138817..fddb531a4f 100644 --- a/servers/physics/physics_server_sw.cpp +++ b/servers/physics/physics_server_sw.cpp @@ -40,6 +40,12 @@ #include "joints/pin_joint_sw.h" #include "joints/slider_joint_sw.h" +#define FLUSH_QUERY_CHECK \ + if (flushing_queries) { \ + ERR_EXPLAIN("Can't change this state while flushing queries. Use call_deferred()/set_deferred() to change monitoring state instead"); \ + ERR_FAIL(); \ + } + RID PhysicsServerSW::shape_create(ShapeType p_shape) { ShapeSW *shape = NULL; @@ -352,6 +358,8 @@ void PhysicsServerSW::area_clear_shapes(RID p_area) { void PhysicsServerSW::area_set_shape_disabled(RID p_area, int p_shape_idx, bool p_disabled) { + FLUSH_QUERY_CHECK + AreaSW *area = area_owner.get(p_area); ERR_FAIL_COND(!area); ERR_FAIL_INDEX(p_shape_idx, area->get_shape_count()); @@ -435,6 +443,8 @@ void PhysicsServerSW::area_set_collision_mask(RID p_area, uint32_t p_mask) { void PhysicsServerSW::area_set_monitorable(RID p_area, bool p_monitorable) { + FLUSH_QUERY_CHECK + AreaSW *area = area_owner.get(p_area); ERR_FAIL_COND(!area); @@ -582,6 +592,8 @@ RID PhysicsServerSW::body_get_shape(RID p_body, int p_shape_idx) const { void PhysicsServerSW::body_set_shape_disabled(RID p_body, int p_shape_idx, bool p_disabled) { + FLUSH_QUERY_CHECK + BodySW *body = body_owner.get(p_body); ERR_FAIL_COND(!body); ERR_FAIL_INDEX(p_shape_idx, body->get_shape_count()); @@ -1459,6 +1471,8 @@ void PhysicsServerSW::flush_queries() { doing_sync = true; + flushing_queries = true; + uint64_t time_beg = OS::get_singleton()->get_ticks_usec(); for (Set<const SpaceSW *>::Element *E = active_spaces.front(); E; E = E->next()) { @@ -1467,6 +1481,8 @@ void PhysicsServerSW::flush_queries() { space->call_queries(); } + flushing_queries = false; + if (ScriptDebugger::get_singleton() && ScriptDebugger::get_singleton()->is_profiling()) { uint64_t total_time[SpaceSW::ELAPSED_TIME_MAX]; @@ -1580,6 +1596,7 @@ PhysicsServerSW::PhysicsServerSW() { collision_pairs = 0; active = true; + flushing_queries = false; }; PhysicsServerSW::~PhysicsServerSW(){ diff --git a/servers/physics/physics_server_sw.h b/servers/physics/physics_server_sw.h index 4131c5e248..c361d00fcc 100644 --- a/servers/physics/physics_server_sw.h +++ b/servers/physics/physics_server_sw.h @@ -51,6 +51,8 @@ class PhysicsServerSW : public PhysicsServer { int active_objects; int collision_pairs; + bool flushing_queries; + StepSW *stepper; Set<const SpaceSW *> active_spaces; @@ -346,6 +348,9 @@ public: virtual void generic_6dof_joint_set_flag(RID p_joint, Vector3::Axis, G6DOFJointAxisFlag p_flag, bool p_enable); virtual bool generic_6dof_joint_get_flag(RID p_joint, Vector3::Axis, G6DOFJointAxisFlag p_flag); + virtual void generic_6dof_joint_set_precision(RID p_joint, int precision) {} + virtual int generic_6dof_joint_get_precision(RID p_joint) { return 0; } + virtual JointType joint_get_type(RID p_joint) const; virtual void joint_set_solver_priority(RID p_joint, int p_priority); @@ -365,6 +370,8 @@ public: virtual void flush_queries(); virtual void finish(); + virtual bool is_flushing_queries() const { return flushing_queries; } + int get_process_info(ProcessInfo p_info); PhysicsServerSW(); diff --git a/servers/physics/shape_sw.cpp b/servers/physics/shape_sw.cpp index e1c985f44f..e7fc821c2c 100644 --- a/servers/physics/shape_sw.cpp +++ b/servers/physics/shape_sw.cpp @@ -1047,7 +1047,7 @@ void FaceShapeSW::get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_su /** FIND SUPPORT VERTEX **/ int vert_support_idx = -1; - real_t support_max; + real_t support_max = 0; for (int i = 0; i < 3; i++) { diff --git a/servers/physics/space_sw.cpp b/servers/physics/space_sw.cpp index 731749b8ce..3b5344f020 100644 --- a/servers/physics/space_sw.cpp +++ b/servers/physics/space_sw.cpp @@ -544,14 +544,24 @@ int SpaceSW::test_body_ray_separation(BodySW *p_body, const Transform &p_transfo AABB body_aabb; + bool shapes_found = false; + for (int i = 0; i < p_body->get_shape_count(); i++) { - if (i == 0) + if (p_body->is_shape_set_as_disabled(i)) + continue; + + if (!shapes_found) { body_aabb = p_body->get_shape_aabb(i); - else + shapes_found = true; + } else { body_aabb = body_aabb.merge(p_body->get_shape_aabb(i)); + } } + if (!shapes_found) { + return 0; + } // Undo the currently transform the physics server is aware of and apply the provided one body_aabb = p_transform.xform(p_body->get_inv_transform().xform(body_aabb)); body_aabb = body_aabb.grow(p_margin); @@ -691,13 +701,23 @@ bool SpaceSW::test_body_motion(BodySW *p_body, const Transform &p_from, const Ve r_result->collider_shape = 0; } AABB body_aabb; + bool shapes_found = false; for (int i = 0; i < p_body->get_shape_count(); i++) { - if (i == 0) + if (p_body->is_shape_set_as_disabled(i)) + continue; + + if (!shapes_found) { body_aabb = p_body->get_shape_aabb(i); - else + shapes_found = true; + } else { body_aabb = body_aabb.merge(p_body->get_shape_aabb(i)); + } + } + + if (!shapes_found) { + return false; } // Undo the currently transform the physics server is aware of and apply the provided one @@ -1183,6 +1203,7 @@ SpaceSW::SpaceSW() { body_linear_velocity_sleep_threshold = GLOBAL_DEF("physics/3d/sleep_threshold_linear", 0.1); body_angular_velocity_sleep_threshold = GLOBAL_DEF("physics/3d/sleep_threshold_angular", (8.0 / 180.0 * Math_PI)); body_time_to_sleep = GLOBAL_DEF("physics/3d/time_before_sleep", 0.5); + ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/time_before_sleep", PropertyInfo(Variant::REAL, "physics/3d/time_before_sleep", PROPERTY_HINT_RANGE, "0,5,0.01,or_greater")); body_angular_velocity_damp_ratio = 10; broadphase = BroadPhaseSW::create_func(); diff --git a/servers/physics_2d/area_pair_2d_sw.cpp b/servers/physics_2d/area_pair_2d_sw.cpp index 9d515d2183..cdd35cf657 100644 --- a/servers/physics_2d/area_pair_2d_sw.cpp +++ b/servers/physics_2d/area_pair_2d_sw.cpp @@ -147,10 +147,10 @@ Area2Pair2DSW::~Area2Pair2DSW() { if (colliding) { - if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) + if (area_b->has_area_monitor_callback()) area_b->remove_area_from_query(area_a, shape_a, shape_b); - if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) + if (area_a->has_area_monitor_callback()) area_a->remove_area_from_query(area_b, shape_b, shape_a); } diff --git a/servers/physics_2d/body_2d_sw.cpp b/servers/physics_2d/body_2d_sw.cpp index aa063d6c1e..52362386d2 100644 --- a/servers/physics_2d/body_2d_sw.cpp +++ b/servers/physics_2d/body_2d_sw.cpp @@ -511,8 +511,7 @@ void Body2DSW::integrate_forces(real_t p_step) { if (continuous_cd_mode != Physics2DServer::CCD_MODE_DISABLED) { - motion = new_transform.get_origin() - get_transform().get_origin(); - //linear_velocity*p_step; + motion = linear_velocity * p_step; do_motion = true; } } diff --git a/servers/physics_2d/body_pair_2d_sw.cpp b/servers/physics_2d/body_pair_2d_sw.cpp index 2633edf7bb..93a05b74ef 100644 --- a/servers/physics_2d/body_pair_2d_sw.cpp +++ b/servers/physics_2d/body_pair_2d_sw.cpp @@ -138,7 +138,7 @@ void BodyPair2DSW::_validate_contacts() { Contact &c = contacts[i]; bool erase = false; - if (c.reused == false) { + if (!c.reused) { //was left behind in previous frame erase = true; } else { diff --git a/servers/physics_2d/broad_phase_2d_hash_grid.cpp b/servers/physics_2d/broad_phase_2d_hash_grid.cpp index 950f0f9d24..95195c8fff 100644 --- a/servers/physics_2d/broad_phase_2d_hash_grid.cpp +++ b/servers/physics_2d/broad_phase_2d_hash_grid.cpp @@ -635,11 +635,15 @@ BroadPhase2DSW *BroadPhase2DHashGrid::_create() { BroadPhase2DHashGrid::BroadPhase2DHashGrid() { hash_table_size = GLOBAL_DEF("physics/2d/bp_hash_table_size", 4096); + ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/bp_hash_table_size", PropertyInfo(Variant::INT, "physics/2d/bp_hash_table_size", PROPERTY_HINT_RANGE, "0,8192,1,or_greater")); hash_table_size = Math::larger_prime(hash_table_size); hash_table = memnew_arr(PosBin *, hash_table_size); cell_size = GLOBAL_DEF("physics/2d/cell_size", 128); + ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/cell_size", PropertyInfo(Variant::INT, "physics/2d/cell_size", PROPERTY_HINT_RANGE, "0,512,1,or_greater")); + large_object_min_surface = GLOBAL_DEF("physics/2d/large_object_surface_threshold_in_cells", 512); + ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/large_object_surface_threshold_in_cells", PropertyInfo(Variant::INT, "physics/2d/large_object_surface_threshold_in_cells", PROPERTY_HINT_RANGE, "0,1024,1,or_greater")); for (uint32_t i = 0; i < hash_table_size; i++) hash_table[i] = NULL; diff --git a/servers/physics_2d/collision_object_2d_sw.cpp b/servers/physics_2d/collision_object_2d_sw.cpp index 4dd5b2040f..2f5b484040 100644 --- a/servers/physics_2d/collision_object_2d_sw.cpp +++ b/servers/physics_2d/collision_object_2d_sw.cpp @@ -244,6 +244,7 @@ CollisionObject2DSW::CollisionObject2DSW(Type p_type) { type = p_type; space = NULL; instance_id = 0; + canvas_instance_id = 0; collision_mask = 1; collision_layer = 1; pickable = true; diff --git a/servers/physics_2d/collision_object_2d_sw.h b/servers/physics_2d/collision_object_2d_sw.h index f2b2363499..f256910f52 100644 --- a/servers/physics_2d/collision_object_2d_sw.h +++ b/servers/physics_2d/collision_object_2d_sw.h @@ -49,6 +49,7 @@ private: Type type; RID self; ObjectID instance_id; + ObjectID canvas_instance_id; bool pickable; struct Shape { @@ -102,6 +103,9 @@ public: _FORCE_INLINE_ void set_instance_id(const ObjectID &p_instance_id) { instance_id = p_instance_id; } _FORCE_INLINE_ ObjectID get_instance_id() const { return instance_id; } + _FORCE_INLINE_ void set_canvas_instance_id(const ObjectID &p_canvas_instance_id) { canvas_instance_id = p_canvas_instance_id; } + _FORCE_INLINE_ ObjectID get_canvas_instance_id() const { return canvas_instance_id; } + void _shape_changed(); _FORCE_INLINE_ Type get_type() const { return type; } diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp index 000e38c4a2..45310ec4b3 100644 --- a/servers/physics_2d/physics_2d_server_sw.cpp +++ b/servers/physics_2d/physics_2d_server_sw.cpp @@ -36,6 +36,12 @@ #include "core/project_settings.h" #include "core/script_language.h" +#define FLUSH_QUERY_CHECK \ + if (flushing_queries) { \ + ERR_EXPLAIN("Can't change this state while flushing queries. Use call_deferred() or set_deferred() to change monitoring state instead"); \ + ERR_FAIL(); \ + } + RID Physics2DServerSW::_shape_create(ShapeType p_shape) { Shape2DSW *shape = NULL; @@ -169,7 +175,9 @@ void Physics2DServerSW::_shape_col_cbk(const Vector2 &p_point_A, const Vector2 & cbk->invalid_by_dir++; return; } - if (cbk->valid_dir.dot((p_point_A - p_point_B).normalized()) < 0.7071) { + Vector2 rel_dir = (p_point_A - p_point_B).normalized(); + + if (cbk->valid_dir.dot(rel_dir) < 0.7071) { //sqrt(2)/2.0 - 45 degrees cbk->invalid_by_dir++; /* @@ -399,6 +407,8 @@ void Physics2DServerSW::area_set_shape_transform(RID p_area, int p_shape_idx, co void Physics2DServerSW::area_set_shape_disabled(RID p_area, int p_shape, bool p_disabled) { + FLUSH_QUERY_CHECK + Area2DSW *area = area_owner.get(p_area); ERR_FAIL_COND(!area); @@ -469,6 +479,27 @@ ObjectID Physics2DServerSW::area_get_object_instance_id(RID p_area) const { return area->get_instance_id(); } +void Physics2DServerSW::area_attach_canvas_instance_id(RID p_area, ObjectID p_ID) { + + if (space_owner.owns(p_area)) { + Space2DSW *space = space_owner.get(p_area); + p_area = space->get_default_area()->get_self(); + } + Area2DSW *area = area_owner.get(p_area); + ERR_FAIL_COND(!area); + area->set_canvas_instance_id(p_ID); +} +ObjectID Physics2DServerSW::area_get_canvas_instance_id(RID p_area) const { + + if (space_owner.owns(p_area)) { + Space2DSW *space = space_owner.get(p_area); + p_area = space->get_default_area()->get_self(); + } + Area2DSW *area = area_owner.get(p_area); + ERR_FAIL_COND_V(!area, 0); + return area->get_canvas_instance_id(); +} + void Physics2DServerSW::area_set_param(RID p_area, AreaParameter p_param, const Variant &p_value) { if (space_owner.owns(p_area)) { @@ -516,6 +547,8 @@ void Physics2DServerSW::area_set_pickable(RID p_area, bool p_pickable) { void Physics2DServerSW::area_set_monitorable(RID p_area, bool p_monitorable) { + FLUSH_QUERY_CHECK + Area2DSW *area = area_owner.get(p_area); ERR_FAIL_COND(!area); @@ -594,6 +627,8 @@ RID Physics2DServerSW::body_get_space(RID p_body) const { void Physics2DServerSW::body_set_mode(RID p_body, BodyMode p_mode) { + FLUSH_QUERY_CHECK + Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND(!body); @@ -696,6 +731,8 @@ void Physics2DServerSW::body_clear_shapes(RID p_body) { void Physics2DServerSW::body_set_shape_disabled(RID p_body, int p_shape_idx, bool p_disabled) { + FLUSH_QUERY_CHECK + Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND(!body); @@ -744,6 +781,22 @@ uint32_t Physics2DServerSW::body_get_object_instance_id(RID p_body) const { return body->get_instance_id(); }; +void Physics2DServerSW::body_attach_canvas_instance_id(RID p_body, uint32_t p_ID) { + + Body2DSW *body = body_owner.get(p_body); + ERR_FAIL_COND(!body); + + body->set_canvas_instance_id(p_ID); +}; + +uint32_t Physics2DServerSW::body_get_canvas_instance_id(RID p_body) const { + + Body2DSW *body = body_owner.get(p_body); + ERR_FAIL_COND_V(!body, 0); + + return body->get_canvas_instance_id(); +}; + void Physics2DServerSW::body_set_collision_layer(RID p_body, uint32_t p_layer) { Body2DSW *body = body_owner.get(p_body); @@ -1309,6 +1362,8 @@ void Physics2DServerSW::flush_queries() { if (!active) return; + flushing_queries = true; + uint64_t time_beg = OS::get_singleton()->get_ticks_usec(); for (Set<const Space2DSW *>::Element *E = active_spaces.front(); E; E = E->next()) { @@ -1317,6 +1372,8 @@ void Physics2DServerSW::flush_queries() { space->call_queries(); } + flushing_queries = false; + if (ScriptDebugger::get_singleton() && ScriptDebugger::get_singleton()->is_profiling()) { uint64_t total_time[Space2DSW::ELAPSED_TIME_MAX]; @@ -1395,6 +1452,7 @@ Physics2DServerSW::Physics2DServerSW() { active_objects = 0; collision_pairs = 0; using_threads = int(ProjectSettings::get_singleton()->get("physics/2d/thread_model")) == 2; + flushing_queries = false; }; Physics2DServerSW::~Physics2DServerSW(){ diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h index d4fc44b1d7..4f33873219 100644 --- a/servers/physics_2d/physics_2d_server_sw.h +++ b/servers/physics_2d/physics_2d_server_sw.h @@ -54,6 +54,8 @@ class Physics2DServerSW : public Physics2DServer { bool using_threads; + bool flushing_queries; + Step2DSW *stepper; Set<const Space2DSW *> active_spaces; @@ -144,6 +146,9 @@ public: virtual void area_attach_object_instance_id(RID p_area, ObjectID p_ID); virtual ObjectID area_get_object_instance_id(RID p_area) const; + virtual void area_attach_canvas_instance_id(RID p_area, ObjectID p_ID); + virtual ObjectID area_get_canvas_instance_id(RID p_area) const; + virtual void area_set_param(RID p_area, AreaParameter p_param, const Variant &p_value); virtual void area_set_transform(RID p_area, const Transform2D &p_transform); @@ -188,6 +193,9 @@ public: virtual void body_attach_object_instance_id(RID p_body, uint32_t p_ID); virtual uint32_t body_get_object_instance_id(RID p_body) const; + virtual void body_attach_canvas_instance_id(RID p_body, uint32_t p_ID); + virtual uint32_t body_get_canvas_instance_id(RID p_body) const; + virtual void body_set_continuous_collision_detection_mode(RID p_body, CCDMode p_mode); virtual CCDMode body_get_continuous_collision_detection_mode(RID p_body) const; @@ -272,6 +280,8 @@ public: virtual void end_sync(); virtual void finish(); + virtual bool is_flushing_queries() const { return flushing_queries; } + int get_process_info(ProcessInfo p_info); Physics2DServerSW(); diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.h b/servers/physics_2d/physics_2d_server_wrap_mt.h index 5f5fd3866f..e736854077 100644 --- a/servers/physics_2d/physics_2d_server_wrap_mt.h +++ b/servers/physics_2d/physics_2d_server_wrap_mt.h @@ -154,6 +154,9 @@ public: FUNC2(area_attach_object_instance_id, RID, ObjectID); FUNC1RC(ObjectID, area_get_object_instance_id, RID); + FUNC2(area_attach_canvas_instance_id, RID, ObjectID); + FUNC1RC(ObjectID, area_get_canvas_instance_id, RID); + FUNC3(area_set_param, RID, AreaParameter, const Variant &); FUNC2(area_set_transform, RID, const Transform2D &); @@ -199,6 +202,9 @@ public: FUNC2(body_attach_object_instance_id, RID, uint32_t); FUNC1RC(uint32_t, body_get_object_instance_id, RID); + FUNC2(body_attach_canvas_instance_id, RID, uint32_t); + FUNC1RC(uint32_t, body_get_canvas_instance_id, RID); + FUNC2(body_set_continuous_collision_detection_mode, RID, CCDMode); FUNC1RC(CCDMode, body_get_continuous_collision_detection_mode, RID); @@ -306,6 +312,10 @@ public: virtual void flush_queries(); virtual void finish(); + virtual bool is_flushing_queries() const { + return physics_2d_server->is_flushing_queries(); + } + int get_process_info(ProcessInfo p_info) { return physics_2d_server->get_process_info(p_info); } diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp index f36328c985..720742c198 100644 --- a/servers/physics_2d/space_2d_sw.cpp +++ b/servers/physics_2d/space_2d_sw.cpp @@ -31,9 +31,9 @@ #include "space_2d_sw.h" #include "collision_solver_2d_sw.h" +#include "core/os/os.h" #include "core/pair.h" #include "physics_2d_server_sw.h" - _FORCE_INLINE_ static bool _can_collide_with(CollisionObject2DSW *p_object, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) { if (!(p_object->get_collision_layer() & p_collision_mask)) { @@ -49,7 +49,7 @@ _FORCE_INLINE_ static bool _can_collide_with(CollisionObject2DSW *p_object, uint return true; } -int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point) { +int Physics2DDirectSpaceStateSW::_intersect_point_impl(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point, bool p_filter_by_canvas, ObjectID p_canvas_instance_id) { if (p_result_max <= 0) return 0; @@ -75,6 +75,9 @@ int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeRe if (p_pick_point && !col_obj->is_pickable()) continue; + if (p_filter_by_canvas && col_obj->get_canvas_instance_id() != p_canvas_instance_id) + continue; + int shape_idx = space->intersection_query_subindex_results[i]; Shape2DSW *shape = col_obj->get_shape(shape_idx); @@ -100,6 +103,16 @@ int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeRe return cc; } +int Physics2DDirectSpaceStateSW::intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point) { + + return _intersect_point_impl(p_point, r_results, p_result_max, p_exclude, p_collision_mask, p_collide_with_bodies, p_collide_with_areas, p_pick_point); +} + +int Physics2DDirectSpaceStateSW::intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_instance_id, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point) { + + return _intersect_point_impl(p_point, r_results, p_result_max, p_exclude, p_collision_mask, p_collide_with_bodies, p_collide_with_areas, p_pick_point, true, p_canvas_instance_id); +} + bool Physics2DDirectSpaceStateSW::intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) { ERR_FAIL_COND_V(space->locked, false); @@ -352,6 +365,8 @@ struct _RestCallbackData2D { const CollisionObject2DSW *object; const CollisionObject2DSW *best_object; + int local_shape; + int best_local_shape; int shape; int best_shape; Vector2 best_contact; @@ -382,6 +397,7 @@ static void _rest_cbk_result(const Vector2 &p_point_A, const Vector2 &p_point_B, rd->best_normal = contact_rel / len; rd->best_object = rd->object; rd->best_shape = rd->shape; + rd->best_local_shape = rd->local_shape; } bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_shape_xform, const Vector2 &p_motion, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas) { @@ -415,6 +431,7 @@ bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Transform2D &p_sh rcd.valid_depth = 0; rcd.object = col_obj; rcd.shape = shape_idx; + rcd.local_shape = 0; bool sc = CollisionSolver2DSW::solve(shape, p_shape_xform, p_motion, col_obj->get_shape(shape_idx), col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), _rest_cbk_result, &rcd, NULL, p_margin); if (!sc) continue; @@ -487,12 +504,23 @@ int Space2DSW::test_body_ray_separation(Body2DSW *p_body, const Transform2D &p_t Rect2 body_aabb; + bool shapes_found = false; + for (int i = 0; i < p_body->get_shape_count(); i++) { - if (i == 0) + if (p_body->is_shape_set_as_disabled(i)) + continue; + + if (!shapes_found) { body_aabb = p_body->get_shape_aabb(i); - else + shapes_found = true; + } else { body_aabb = body_aabb.merge(p_body->get_shape_aabb(i)); + } + } + + if (!shapes_found) { + return 0; } // Undo the currently transform the physics server is aware of and apply the provided one @@ -555,9 +583,11 @@ int Space2DSW::test_body_ray_separation(Body2DSW *p_body, const Transform2D &p_t } } + Transform2D col_obj_shape_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx); + if (col_obj->is_shape_set_as_one_way_collision(shape_idx)) { - cbk.valid_dir = body_shape_xform.get_axis(1).normalized(); + cbk.valid_dir = col_obj_shape_xform.get_axis(1).normalized(); cbk.valid_depth = p_margin; //only valid depth is the collision margin cbk.invalid_by_dir = 0; @@ -568,7 +598,7 @@ int Space2DSW::test_body_ray_separation(Body2DSW *p_body, const Transform2D &p_t } Shape2DSW *against_shape = col_obj->get_shape(shape_idx); - if (CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), cbkres, cbkptr, NULL, p_margin)) { + if (CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj_shape_xform, Vector2(), cbkres, cbkptr, NULL, p_margin)) { if (cbk.amount > 0) { collided = true; } @@ -647,12 +677,23 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co } Rect2 body_aabb; + bool shapes_found = false; + for (int i = 0; i < p_body->get_shape_count(); i++) { - if (i == 0) + if (p_body->is_shape_set_as_disabled(i)) + continue; + + if (!shapes_found) { body_aabb = p_body->get_shape_aabb(i); - else + shapes_found = true; + } else { body_aabb = body_aabb.merge(p_body->get_shape_aabb(i)); + } + } + + if (!shapes_found) { + return false; } // Undo the currently transform the physics server is aware of and apply the provided one @@ -663,6 +704,8 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co ExcludedShapeSW excluded_shape_pairs[max_excluded_shape_pairs]; int excluded_shape_pair_count = 0; + float separation_margin = MIN(p_margin, MAX(0.0, p_motion.length() - CMP_EPSILON)); //don't separate by more than the intended motion + Transform2D body_transform = p_from; { @@ -710,24 +753,42 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co } } + Transform2D col_obj_shape_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx); + if (col_obj->is_shape_set_as_one_way_collision(shape_idx)) { - cbk.valid_dir = body_shape_xform.get_axis(1).normalized(); + cbk.valid_dir = col_obj_shape_xform.get_axis(1).normalized(); + cbk.valid_depth = p_margin; //only valid depth is the collision margin cbk.invalid_by_dir = 0; + if (col_obj->get_type() == CollisionObject2DSW::TYPE_BODY) { + const Body2DSW *b = static_cast<const Body2DSW *>(col_obj); + if (b->get_mode() == Physics2DServer::BODY_MODE_KINEMATIC || b->get_mode() == Physics2DServer::BODY_MODE_RIGID) { + //fix for moving platforms (kinematic and dynamic), margin is increased by how much it moved in the given direction + Vector2 lv = b->get_linear_velocity(); + //compute displacement from linear velocity + Vector2 motion = lv * Physics2DDirectBodyStateSW::singleton->step; + float motion_len = motion.length(); + motion.normalize(); + cbk.valid_depth += motion_len * MAX(motion.dot(-cbk.valid_dir), 0.0); + } + } } else { cbk.valid_dir = Vector2(); cbk.valid_depth = 0; cbk.invalid_by_dir = 0; } + int current_collisions = cbk.amount; + bool did_collide = false; + Shape2DSW *against_shape = col_obj->get_shape(shape_idx); - if (CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), cbkres, cbkptr, NULL, p_margin)) { - collided = cbk.amount > 0; + if (CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj_shape_xform, Vector2(), cbkres, cbkptr, NULL, separation_margin)) { + did_collide = cbk.amount > current_collisions; } - if (!collided && cbk.invalid_by_dir > 0) { + if (!did_collide && cbk.invalid_by_dir > 0) { //this shape must be excluded if (excluded_shape_pair_count < max_excluded_shape_pairs) { ExcludedShapeSW esp; @@ -737,6 +798,10 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co excluded_shape_pairs[excluded_shape_pair_count++] = esp; } } + + if (did_collide) { + collided = true; + } } } @@ -824,14 +889,14 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co continue; } - Transform2D col_obj_xform = col_obj->get_transform() * col_obj->get_shape_transform(col_shape_idx); + Transform2D col_obj_shape_xform = col_obj->get_transform() * col_obj->get_shape_transform(col_shape_idx); //test initial overlap, does it collide if going all the way? - if (!CollisionSolver2DSW::solve(body_shape, body_shape_xform, p_motion, against_shape, col_obj_xform, Vector2(), NULL, NULL, NULL, 0)) { + if (!CollisionSolver2DSW::solve(body_shape, body_shape_xform, p_motion, against_shape, col_obj_shape_xform, Vector2(), NULL, NULL, NULL, 0)) { continue; } //test initial overlap - if (CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj_xform, Vector2(), NULL, NULL, NULL, 0)) { + if (CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj_shape_xform, Vector2(), NULL, NULL, NULL, 0)) { if (col_obj->is_shape_set_as_one_way_collision(col_shape_idx)) { continue; @@ -851,7 +916,7 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co real_t ofs = (low + hi) * 0.5; Vector2 sep = mnormal; //important optimization for this to work fast enough - bool collided = CollisionSolver2DSW::solve(body_shape, body_shape_xform, p_motion * ofs, against_shape, col_obj_xform, Vector2(), NULL, NULL, &sep, 0); + bool collided = CollisionSolver2DSW::solve(body_shape, body_shape_xform, p_motion * ofs, against_shape, col_obj_shape_xform, Vector2(), NULL, NULL, &sep, 0); if (collided) { @@ -869,12 +934,12 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co cbk.max = 1; cbk.amount = 0; cbk.ptr = cd; - cbk.valid_dir = body_shape_xform.get_axis(1).normalized(); + cbk.valid_dir = col_obj_shape_xform.get_axis(1).normalized(); cbk.valid_depth = 10e20; Vector2 sep = mnormal; //important optimization for this to work fast enough - bool collided = CollisionSolver2DSW::solve(body_shape, body_shape_xform, p_motion * (hi + contact_max_allowed_penetration), col_obj->get_shape(col_shape_idx), col_obj_xform, Vector2(), Physics2DServerSW::_shape_col_cbk, &cbk, &sep, 0); + bool collided = CollisionSolver2DSW::solve(body_shape, body_shape_xform, p_motion * (hi + contact_max_allowed_penetration), col_obj->get_shape(col_shape_idx), col_obj_shape_xform, Vector2(), Physics2DServerSW::_shape_col_cbk, &cbk, &sep, 0); if (!collided || cbk.amount == 0) { continue; } @@ -907,16 +972,10 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co bool collided = false; if (safe >= 1) { - //not collided - collided = false; - if (r_result) { - - r_result->motion = p_motion; - r_result->remainder = Vector2(); - r_result->motion += (body_transform.get_origin() - p_from.get_origin()); - } + best_shape = -1; //no best shape with cast, reset to -1 + } - } else { + { //it collided, let's get the rest info in unsafe advance Transform2D ugt = body_transform; @@ -927,52 +986,61 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co rcd.best_object = NULL; rcd.best_shape = 0; - Transform2D body_shape_xform = ugt * p_body->get_shape_transform(best_shape); - Shape2DSW *body_shape = p_body->get_shape(best_shape); + //optimization + int from_shape = best_shape != -1 ? best_shape : 0; + int to_shape = best_shape != -1 ? best_shape + 1 : p_body->get_shape_count(); - body_aabb.position += p_motion * unsafe; + for (int j = from_shape; j < to_shape; j++) { + Transform2D body_shape_xform = ugt * p_body->get_shape_transform(j); + Shape2DSW *body_shape = p_body->get_shape(j); - int amount = _cull_aabb_for_body(p_body, body_aabb); + body_aabb.position += p_motion * unsafe; + + int amount = _cull_aabb_for_body(p_body, body_aabb); - for (int i = 0; i < amount; i++) { + for (int i = 0; i < amount; i++) { - const CollisionObject2DSW *col_obj = intersection_query_results[i]; - int shape_idx = intersection_query_subindex_results[i]; + const CollisionObject2DSW *col_obj = intersection_query_results[i]; + int shape_idx = intersection_query_subindex_results[i]; - if (CollisionObject2DSW::TYPE_BODY == col_obj->get_type()) { - const Body2DSW *b = static_cast<const Body2DSW *>(col_obj); - if (p_infinite_inertia && Physics2DServer::BODY_MODE_STATIC != b->get_mode() && Physics2DServer::BODY_MODE_KINEMATIC != b->get_mode()) { - continue; + if (CollisionObject2DSW::TYPE_BODY == col_obj->get_type()) { + const Body2DSW *b = static_cast<const Body2DSW *>(col_obj); + if (p_infinite_inertia && Physics2DServer::BODY_MODE_STATIC != b->get_mode() && Physics2DServer::BODY_MODE_KINEMATIC != b->get_mode()) { + continue; + } } - } - Shape2DSW *against_shape = col_obj->get_shape(shape_idx); + Shape2DSW *against_shape = col_obj->get_shape(shape_idx); - bool excluded = false; - for (int k = 0; k < excluded_shape_pair_count; k++) { + bool excluded = false; + for (int k = 0; k < excluded_shape_pair_count; k++) { - if (excluded_shape_pairs[k].local_shape == body_shape && excluded_shape_pairs[k].against_object == col_obj && excluded_shape_pairs[k].against_shape_index == shape_idx) { - excluded = true; - break; + if (excluded_shape_pairs[k].local_shape == body_shape && excluded_shape_pairs[k].against_object == col_obj && excluded_shape_pairs[k].against_shape_index == shape_idx) { + excluded = true; + break; + } } - } - if (excluded) - continue; + if (excluded) + continue; - if (col_obj->is_shape_set_as_one_way_collision(shape_idx)) { + Transform2D col_obj_shape_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx); - rcd.valid_dir = body_shape_xform.get_axis(1).normalized(); - rcd.valid_depth = 10e20; - } else { - rcd.valid_dir = Vector2(); - rcd.valid_depth = 0; - } + if (col_obj->is_shape_set_as_one_way_collision(shape_idx)) { - rcd.object = col_obj; - rcd.shape = shape_idx; - bool sc = CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), Vector2(), _rest_cbk_result, &rcd, NULL, p_margin); - if (!sc) - continue; + rcd.valid_dir = col_obj_shape_xform.get_axis(1).normalized(); + rcd.valid_depth = 10e20; + } else { + rcd.valid_dir = Vector2(); + rcd.valid_depth = 0; + } + + rcd.object = col_obj; + rcd.shape = shape_idx; + rcd.local_shape = j; + bool sc = CollisionSolver2DSW::solve(body_shape, body_shape_xform, Vector2(), against_shape, col_obj_shape_xform, Vector2(), _rest_cbk_result, &rcd, NULL, p_margin); + if (!sc) + continue; + } } if (rcd.best_len != 0) { @@ -981,7 +1049,7 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co r_result->collider = rcd.best_object->get_self(); r_result->collider_id = rcd.best_object->get_instance_id(); r_result->collider_shape = rcd.best_shape; - r_result->collision_local_shape = best_shape; + r_result->collision_local_shape = rcd.best_local_shape; r_result->collision_normal = rcd.best_normal; r_result->collision_point = rcd.best_contact; r_result->collider_metadata = rcd.best_object->get_shape_metadata(rcd.best_shape); @@ -996,16 +1064,14 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co } collided = true; - } else { - if (r_result) { + } + } - r_result->motion = p_motion; - r_result->remainder = Vector2(); - r_result->motion += (body_transform.get_origin() - p_from.get_origin()); - } + if (!collided && r_result) { - collided = false; - } + r_result->motion = p_motion; + r_result->remainder = Vector2(); + r_result->motion += (body_transform.get_origin() - p_from.get_origin()); } return collided; @@ -1233,6 +1299,7 @@ Space2DSW::Space2DSW() { body_linear_velocity_sleep_threshold = GLOBAL_DEF("physics/2d/sleep_threshold_linear", 2.0); body_angular_velocity_sleep_threshold = GLOBAL_DEF("physics/2d/sleep_threshold_angular", (8.0 / 180.0 * Math_PI)); body_time_to_sleep = GLOBAL_DEF("physics/2d/time_before_sleep", 0.5); + ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/time_before_sleep", PropertyInfo(Variant::REAL, "physics/2d/time_before_sleep", PROPERTY_HINT_RANGE, "0,5,0.01,or_greater")); broadphase = BroadPhase2DSW::create_func(); broadphase->set_pair_callback(_broadphase_pair, this); diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h index c894eb9c40..bf4ea12eb5 100644 --- a/servers/physics_2d/space_2d_sw.h +++ b/servers/physics_2d/space_2d_sw.h @@ -45,10 +45,13 @@ class Physics2DDirectSpaceStateSW : public Physics2DDirectSpaceState { GDCLASS(Physics2DDirectSpaceStateSW, Physics2DDirectSpaceState); + int _intersect_point_impl(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_pick_point, bool p_filter_by_canvas = false, ObjectID p_canvas_instance_id = 0); + public: Space2DSW *space; virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false); + virtual int intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_instance_id, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false); virtual bool intersect_ray(const Vector2 &p_from, const Vector2 &p_to, RayResult &r_result, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false); virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false); virtual bool cast_motion(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_mask = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false); diff --git a/servers/physics_2d/step_2d_sw.cpp b/servers/physics_2d/step_2d_sw.cpp index 0fb7af0c94..e4e1b03623 100644 --- a/servers/physics_2d/step_2d_sw.cpp +++ b/servers/physics_2d/step_2d_sw.cpp @@ -222,7 +222,7 @@ void Step2DSW::step(Space2DSW *p_space, real_t p_delta, int p_iterations) { Constraint2DSW *prev_ci = NULL; while (ci) { - if (_setup_island(ci, p_delta) == true) { + if (_setup_island(ci, p_delta)) { //removed the root from the island graph because it is not to be processed diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp index 3ca6e29f0b..2ed8a4c478 100644 --- a/servers/physics_2d_server.cpp +++ b/servers/physics_2d_server.cpp @@ -328,7 +328,7 @@ Array Physics2DDirectSpaceState::_cast_motion(const Ref<Physics2DShapeQueryParam return ret; } -Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas) { +Array Physics2DDirectSpaceState::_intersect_point_impl(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_filter_by_canvas, ObjectID p_canvas_instance_id) { Set<RID> exclude; for (int i = 0; i < p_exclude.size(); i++) @@ -337,7 +337,12 @@ Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_ Vector<ShapeResult> ret; ret.resize(p_max_results); - int rc = intersect_point(p_point, ret.ptrw(), ret.size(), exclude, p_layers, p_collide_with_bodies, p_collide_with_areas); + int rc; + if (p_filter_by_canvas) + rc = intersect_point(p_point, ret.ptrw(), ret.size(), exclude, p_layers, p_collide_with_bodies, p_collide_with_areas); + else + rc = intersect_point_on_canvas(p_point, p_canvas_instance_id, ret.ptrw(), ret.size(), exclude, p_layers, p_collide_with_bodies, p_collide_with_areas); + if (rc == 0) return Array(); @@ -356,6 +361,16 @@ Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_ return r; } +Array Physics2DDirectSpaceState::_intersect_point(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas) { + + return _intersect_point_impl(p_point, p_max_results, p_exclude, p_layers, p_collide_with_bodies, p_collide_with_areas); +} + +Array Physics2DDirectSpaceState::_intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_intance_id, int p_max_results, const Vector<RID> &p_exclude, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas) { + + return _intersect_point_impl(p_point, p_max_results, p_exclude, p_layers, p_collide_with_bodies, p_collide_with_areas, true, p_canvas_intance_id); +} + Array Physics2DDirectSpaceState::_collide_shape(const Ref<Physics2DShapeQueryParameters> &p_shape_query, int p_max_results) { ERR_FAIL_COND_V(!p_shape_query.is_valid(), Array()); @@ -400,6 +415,7 @@ Physics2DDirectSpaceState::Physics2DDirectSpaceState() { void Physics2DDirectSpaceState::_bind_methods() { ClassDB::bind_method(D_METHOD("intersect_point", "point", "max_results", "exclude", "collision_layer", "collide_with_bodies", "collide_with_areas"), &Physics2DDirectSpaceState::_intersect_point, DEFVAL(32), DEFVAL(Array()), DEFVAL(0x7FFFFFFF), DEFVAL(true), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("intersect_point_on_canvas", "point", "canvas_instance_id", "max_results", "exclude", "collision_layer", "collide_with_bodies", "collide_with_areas"), &Physics2DDirectSpaceState::_intersect_point_on_canvas, DEFVAL(32), DEFVAL(Array()), DEFVAL(0x7FFFFFFF), DEFVAL(true), DEFVAL(false)); ClassDB::bind_method(D_METHOD("intersect_ray", "from", "to", "exclude", "collision_layer", "collide_with_bodies", "collide_with_areas"), &Physics2DDirectSpaceState::_intersect_ray, DEFVAL(Array()), DEFVAL(0x7FFFFFFF), DEFVAL(true), DEFVAL(false)); ClassDB::bind_method(D_METHOD("intersect_shape", "shape", "max_results"), &Physics2DDirectSpaceState::_intersect_shape, DEFVAL(32)); ClassDB::bind_method(D_METHOD("cast_motion", "shape"), &Physics2DDirectSpaceState::_cast_motion); @@ -575,6 +591,9 @@ void Physics2DServer::_bind_methods() { ClassDB::bind_method(D_METHOD("area_attach_object_instance_id", "area", "id"), &Physics2DServer::area_attach_object_instance_id); ClassDB::bind_method(D_METHOD("area_get_object_instance_id", "area"), &Physics2DServer::area_get_object_instance_id); + ClassDB::bind_method(D_METHOD("area_attach_canvas_instance_id", "area", "id"), &Physics2DServer::area_attach_canvas_instance_id); + ClassDB::bind_method(D_METHOD("area_get_canvas_instance_id", "area"), &Physics2DServer::area_get_canvas_instance_id); + ClassDB::bind_method(D_METHOD("area_set_monitor_callback", "area", "receiver", "method"), &Physics2DServer::area_set_monitor_callback); ClassDB::bind_method(D_METHOD("area_set_area_monitor_callback", "area", "receiver", "method"), &Physics2DServer::area_set_area_monitor_callback); ClassDB::bind_method(D_METHOD("area_set_monitorable", "area", "monitorable"), &Physics2DServer::area_set_monitorable); @@ -606,6 +625,9 @@ void Physics2DServer::_bind_methods() { ClassDB::bind_method(D_METHOD("body_attach_object_instance_id", "body", "id"), &Physics2DServer::body_attach_object_instance_id); ClassDB::bind_method(D_METHOD("body_get_object_instance_id", "body"), &Physics2DServer::body_get_object_instance_id); + ClassDB::bind_method(D_METHOD("body_attach_canvas_instance_id", "body", "id"), &Physics2DServer::body_attach_canvas_instance_id); + ClassDB::bind_method(D_METHOD("body_get_canvas_instance_id", "body"), &Physics2DServer::body_get_canvas_instance_id); + ClassDB::bind_method(D_METHOD("body_set_continuous_collision_detection_mode", "body", "mode"), &Physics2DServer::body_set_continuous_collision_detection_mode); ClassDB::bind_method(D_METHOD("body_get_continuous_collision_detection_mode", "body"), &Physics2DServer::body_get_continuous_collision_detection_mode); diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h index 7c23fcdaea..32e1dd1a08 100644 --- a/servers/physics_2d_server.h +++ b/servers/physics_2d_server.h @@ -147,8 +147,9 @@ class Physics2DDirectSpaceState : public Object { GDCLASS(Physics2DDirectSpaceState, Object); Dictionary _intersect_ray(const Vector2 &p_from, const Vector2 &p_to, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, bool p_collide_with_bodies = true, bool p_collide_with_areas = false); - Array _intersect_point(const Vector2 &p_point, int p_max_results = 32, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, bool p_collide_with_bodies = true, bool p_collide_with_areas = false); + Array _intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_intance_id, int p_max_results = 32, const Vector<RID> &p_exclude = Vector<RID>(), uint32_t p_layers = 0, bool p_collide_with_bodies = true, bool p_collide_with_areas = false); + Array _intersect_point_impl(const Vector2 &p_point, int p_max_results, const Vector<RID> &p_exclud, uint32_t p_layers, bool p_collide_with_bodies, bool p_collide_with_areas, bool p_filter_by_canvas = false, ObjectID p_canvas_instance_id = 0); Array _intersect_shape(const Ref<Physics2DShapeQueryParameters> &p_shape_query, int p_max_results = 32); Array _cast_motion(const Ref<Physics2DShapeQueryParameters> &p_shape_query); Array _collide_shape(const Ref<Physics2DShapeQueryParameters> &p_shape_query, int p_max_results = 32); @@ -181,6 +182,7 @@ public: }; virtual int intersect_point(const Vector2 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false) = 0; + virtual int intersect_point_on_canvas(const Vector2 &p_point, ObjectID p_canvas_instance_id, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false, bool p_pick_point = false) = 0; virtual int intersect_shape(const RID &p_shape, const Transform2D &p_xform, const Vector2 &p_motion, float p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude = Set<RID>(), uint32_t p_collision_layer = 0xFFFFFFFF, bool p_collide_with_bodies = true, bool p_collide_with_areas = false) = 0; @@ -348,6 +350,9 @@ public: virtual void area_attach_object_instance_id(RID p_area, ObjectID p_ID) = 0; virtual ObjectID area_get_object_instance_id(RID p_area) const = 0; + virtual void area_attach_canvas_instance_id(RID p_area, ObjectID p_ID) = 0; + virtual ObjectID area_get_canvas_instance_id(RID p_area) const = 0; + virtual void area_set_param(RID p_area, AreaParameter p_param, const Variant &p_value) = 0; virtual void area_set_transform(RID p_area, const Transform2D &p_transform) = 0; @@ -401,6 +406,9 @@ public: virtual void body_attach_object_instance_id(RID p_body, uint32_t p_ID) = 0; virtual uint32_t body_get_object_instance_id(RID p_body) const = 0; + virtual void body_attach_canvas_instance_id(RID p_body, uint32_t p_ID) = 0; + virtual uint32_t body_get_canvas_instance_id(RID p_body) const = 0; + enum CCDMode { CCD_MODE_DISABLED, CCD_MODE_CAST_RAY, @@ -576,6 +584,8 @@ public: virtual void end_sync() = 0; virtual void finish() = 0; + virtual bool is_flushing_queries() const = 0; + enum ProcessInfo { INFO_ACTIVE_OBJECTS, diff --git a/servers/physics_server.h b/servers/physics_server.h index d80d76305a..9fb5e958c3 100644 --- a/servers/physics_server.h +++ b/servers/physics_server.h @@ -697,6 +697,9 @@ public: G6DOF_JOINT_LINEAR_DAMPING, G6DOF_JOINT_LINEAR_MOTOR_TARGET_VELOCITY, G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT, + G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, + G6DOF_JOINT_LINEAR_SPRING_DAMPING, + G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, G6DOF_JOINT_ANGULAR_LOWER_LIMIT, G6DOF_JOINT_ANGULAR_UPPER_LIMIT, G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS, @@ -706,6 +709,9 @@ public: G6DOF_JOINT_ANGULAR_ERP, G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY, G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT, + G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, + G6DOF_JOINT_ANGULAR_SPRING_DAMPING, + G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, G6DOF_JOINT_MAX }; @@ -713,6 +719,8 @@ public: G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT, G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, + G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, + G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, G6DOF_JOINT_FLAG_ENABLE_MOTOR, G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR, G6DOF_JOINT_FLAG_MAX @@ -726,6 +734,9 @@ public: virtual void generic_6dof_joint_set_flag(RID p_joint, Vector3::Axis, G6DOFJointAxisFlag p_flag, bool p_enable) = 0; virtual bool generic_6dof_joint_get_flag(RID p_joint, Vector3::Axis, G6DOFJointAxisFlag p_flag) = 0; + virtual void generic_6dof_joint_set_precision(RID p_joint, int precision) = 0; + virtual int generic_6dof_joint_get_precision(RID p_joint) = 0; + /* QUERY API */ enum AreaBodyStatus { @@ -744,6 +755,8 @@ public: virtual void flush_queries() = 0; virtual void finish() = 0; + virtual bool is_flushing_queries() const = 0; + enum ProcessInfo { INFO_ACTIVE_OBJECTS, diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 8c3736a1bf..f78b4aaf5f 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -62,7 +62,7 @@ public: virtual void environment_set_dof_blur_near(RID p_env, bool p_enable, float p_distance, float p_transition, float p_far_amount, VS::EnvironmentDOFBlurQuality p_quality) = 0; virtual void environment_set_dof_blur_far(RID p_env, bool p_enable, float p_distance, float p_transition, float p_far_amount, VS::EnvironmentDOFBlurQuality p_quality) = 0; - virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale) = 0; + virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale) = 0; virtual void environment_set_fog(RID p_env, bool p_enable, float p_begin, float p_end, RID p_gradient_texture) = 0; virtual void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_int, float p_fade_out, float p_depth_tolerance, bool p_roughness) = 0; @@ -73,7 +73,7 @@ public: virtual void environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, RID p_ramp) = 0; virtual void environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount) = 0; - virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve) = 0; + virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve) = 0; virtual void environment_set_fog_height(RID p_env, bool p_enable, float p_min_height, float p_max_height, float p_height_curve) = 0; virtual bool is_environment(RID p_env) = 0; @@ -120,9 +120,7 @@ public: Vector<Color> lightmap_capture_data; //in a array (12 values) to avoid wasting space if unused. Alpha is unused, but needed to send to shader virtual void base_removed() = 0; - virtual void base_changed() = 0; - virtual void base_material_changed() = 0; - + virtual void base_changed(bool p_aabb, bool p_materials) = 0; InstanceBase() : dependency_item(this) { @@ -520,6 +518,8 @@ public: virtual void particles_set_fractional_delta(RID p_particles, bool p_enable) = 0; virtual void particles_restart(RID p_particles) = 0; + virtual bool particles_is_inactive(RID p_particles) const = 0; + virtual void particles_set_draw_order(RID p_particles, VS::ParticlesDrawOrder p_order) = 0; virtual void particles_set_draw_passes(RID p_particles, int p_count) = 0; @@ -800,8 +800,6 @@ public: RID particles; RID texture; RID normal_map; - int h_frames; - int v_frames; CommandParticles() { type = TYPE_PARTICLES; } }; diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index 67a810bf1c..1acec7ccaf 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -131,7 +131,6 @@ const char *ShaderLanguage::token_names[TK_MAX] = { "TYPE_USAMPLER3D", "TYPE_SAMPLERCUBE", "INTERPOLATION_FLAT", - "INTERPOLATION_NO_PERSPECTIVE", "INTERPOLATION_SMOOTH", "PRECISION_LOW", "PRECISION_MID", @@ -271,7 +270,6 @@ const ShaderLanguage::KeyWord ShaderLanguage::keyword_list[] = { { TK_TYPE_USAMPLER3D, "usampler3D" }, { TK_TYPE_SAMPLERCUBE, "samplerCube" }, { TK_INTERPOLATION_FLAT, "flat" }, - { TK_INTERPOLATION_NO_PERSPECTIVE, "noperspective" }, { TK_INTERPOLATION_SMOOTH, "smooth" }, { TK_PRECISION_LOW, "lowp" }, { TK_PRECISION_MID, "mediump" }, @@ -691,6 +689,30 @@ String ShaderLanguage::token_debug(const String &p_code) { return output; } +bool ShaderLanguage::is_token_variable_datatype(TokenType p_type) { + return ( + p_type == TK_TYPE_VOID || + p_type == TK_TYPE_BOOL || + p_type == TK_TYPE_BVEC2 || + p_type == TK_TYPE_BVEC3 || + p_type == TK_TYPE_BVEC4 || + p_type == TK_TYPE_INT || + p_type == TK_TYPE_IVEC2 || + p_type == TK_TYPE_IVEC3 || + p_type == TK_TYPE_IVEC4 || + p_type == TK_TYPE_UINT || + p_type == TK_TYPE_UVEC2 || + p_type == TK_TYPE_UVEC3 || + p_type == TK_TYPE_UVEC4 || + p_type == TK_TYPE_FLOAT || + p_type == TK_TYPE_VEC2 || + p_type == TK_TYPE_VEC3 || + p_type == TK_TYPE_VEC4 || + p_type == TK_TYPE_MAT2 || + p_type == TK_TYPE_MAT3 || + p_type == TK_TYPE_MAT4); +} + bool ShaderLanguage::is_token_datatype(TokenType p_type) { return ( @@ -735,7 +757,6 @@ bool ShaderLanguage::is_token_interpolation(TokenType p_type) { return ( p_type == TK_INTERPOLATION_FLAT || - p_type == TK_INTERPOLATION_NO_PERSPECTIVE || p_type == TK_INTERPOLATION_SMOOTH); } @@ -743,8 +764,6 @@ ShaderLanguage::DataInterpolation ShaderLanguage::get_token_interpolation(TokenT if (p_type == TK_INTERPOLATION_FLAT) return INTERPOLATION_FLAT; - else if (p_type == TK_INTERPOLATION_NO_PERSPECTIVE) - return INTERPOLATION_NO_PERSPECTIVE; else return INTERPOLATION_SMOOTH; } @@ -1196,6 +1215,15 @@ bool ShaderLanguage::_validate_operator(OperatorNode *p_op, DataType *r_ret_type } else if (p_op->op == OP_ASSIGN_MUL && na == TYPE_MAT4 && nb == TYPE_VEC4) { valid = true; ret_type = TYPE_MAT4; + } else if (p_op->op == OP_ASSIGN_MUL && na == TYPE_VEC2 && nb == TYPE_MAT2) { + valid = true; + ret_type = TYPE_VEC2; + } else if (p_op->op == OP_ASSIGN_MUL && na == TYPE_VEC3 && nb == TYPE_MAT3) { + valid = true; + ret_type = TYPE_VEC3; + } else if (p_op->op == OP_ASSIGN_MUL && na == TYPE_VEC4 && nb == TYPE_MAT4) { + valid = true; + ret_type = TYPE_VEC4; } } break; case OP_ASSIGN_BIT_AND: @@ -2013,6 +2041,12 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { }; +const ShaderLanguage::BuiltinFuncOutArgs ShaderLanguage::builtin_func_out_args[] = { + //constructors + { "modf", 1 }, + { NULL, 0 } +}; + bool ShaderLanguage::_validate_function_call(BlockNode *p_block, OperatorNode *p_func, DataType *r_ret_type) { ERR_FAIL_COND_V(p_func->op != OP_CALL && p_func->op != OP_CONSTRUCT, NULL); @@ -2056,6 +2090,41 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, OperatorNode *p if (!fail) { + //make sure its not an out argument used in the wrong way + int outarg_idx = 0; + while (builtin_func_out_args[outarg_idx].name) { + + if (String(name) == builtin_func_out_args[outarg_idx].name) { + int arg_idx = builtin_func_out_args[outarg_idx].argument; + + if (arg_idx < argcount) { + + if (p_func->arguments[arg_idx + 1]->type != Node::TYPE_VARIABLE) { + _set_error("Argument " + itos(arg_idx + 1) + " of function '" + String(name) + "' is not a variable"); + return false; + } + StringName var_name = static_cast<const VariableNode *>(p_func->arguments[arg_idx + 1])->name; + + const BlockNode *b = p_block; + bool valid = false; + while (b) { + if (b->variables.has(var_name)) { + valid = true; + break; + } + b = b->parent_block; + } + + if (!valid) { + _set_error("Argument " + itos(arg_idx + 1) + " of function '" + String(name) + "' can only take a local variable"); + return false; + } + } + } + + outarg_idx++; + } + if (r_ret_type) *r_ret_type = builtin_func_defs[idx].rettype; @@ -2288,7 +2357,7 @@ bool ShaderLanguage::is_sampler_type(DataType p_type) { p_type == TYPE_SAMPLERCUBE; } -Variant ShaderLanguage::constant_value_to_variant(const Vector<ShaderLanguage::ConstantNode::Value> &p_value, DataType p_type) { +Variant ShaderLanguage::constant_value_to_variant(const Vector<ShaderLanguage::ConstantNode::Value> &p_value, DataType p_type, ShaderLanguage::ShaderNode::Uniform::Hint p_hint) { if (p_value.size() > 0) { Variant value; switch (p_type) { @@ -2332,7 +2401,11 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector<ShaderLanguage::C value = Variant(Vector3(p_value[0].real, p_value[1].real, p_value[2].real)); break; case ShaderLanguage::TYPE_VEC4: - value = Variant(Plane(p_value[0].real, p_value[1].real, p_value[2].real, p_value[3].real)); + if (p_hint == ShaderLanguage::ShaderNode::Uniform::HINT_COLOR) { + value = Variant(Color(p_value[0].real, p_value[1].real, p_value[2].real, p_value[3].real)); + } else { + value = Variant(Plane(p_value[0].real, p_value[1].real, p_value[2].real, p_value[3].real)); + } break; case ShaderLanguage::TYPE_MAT2: value = Variant(Transform2D(p_value[0].real, p_value[2].real, p_value[1].real, p_value[3].real, 0.0, 0.0)); @@ -2498,7 +2571,7 @@ bool ShaderLanguage::_get_completable_identifier(BlockNode *p_block, CompletionT identifier = StringName(); - TkPos pos; + TkPos pos = { 0, 0 }; Token tk = _get_token(); @@ -3506,6 +3579,7 @@ ShaderLanguage::Node *ShaderLanguage::_reduce_expression(BlockNode *p_block, Sha nv.sint = -cn->values[i].sint; } break; case TYPE_UINT: { + // FIXME: This can't work on uint nv.uint = -cn->values[i].uint; } break; case TYPE_FLOAT: { @@ -3562,6 +3636,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui } } + if (!is_token_variable_datatype(tk.type)) { + _set_error("Invalid data type for variable (samplers not allowed)"); + return ERR_PARSE_ERROR; + } + DataType type = get_token_datatype(tk.type); tk = _get_token(); @@ -4217,6 +4296,11 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct return ERR_PARSE_ERROR; } + if (!is_token_variable_datatype(tk.type)) { + _set_error("Invalid data type for function return (samplers not allowed)"); + return ERR_PARSE_ERROR; + } + type = get_token_datatype(tk.type); _get_completable_identifier(NULL, COMPLETION_MAIN_FUNCTION, name); diff --git a/servers/visual/shader_language.h b/servers/visual/shader_language.h index 08c4d06992..2d1851928e 100644 --- a/servers/visual/shader_language.h +++ b/servers/visual/shader_language.h @@ -80,7 +80,6 @@ public: TK_TYPE_USAMPLER3D, TK_TYPE_SAMPLERCUBE, TK_INTERPOLATION_FLAT, - TK_INTERPOLATION_NO_PERSPECTIVE, TK_INTERPOLATION_SMOOTH, TK_PRECISION_LOW, TK_PRECISION_MID, @@ -210,7 +209,6 @@ public: enum DataInterpolation { INTERPOLATION_FLAT, - INTERPOLATION_NO_PERSPECTIVE, INTERPOLATION_SMOOTH, }; @@ -333,6 +331,7 @@ public: virtual DataType get_datatype() const { return datatype_cache; } VariableNode() { + type = TYPE_VARIABLE; datatype_cache = TYPE_VOID; } @@ -534,6 +533,7 @@ public: static String get_token_text(Token p_token); static bool is_token_datatype(TokenType p_type); + static bool is_token_variable_datatype(TokenType p_type); static DataType get_token_datatype(TokenType p_type); static bool is_token_interpolation(TokenType p_type); static DataInterpolation get_token_interpolation(TokenType p_type); @@ -548,7 +548,7 @@ public: static int get_cardinality(DataType p_type); static bool is_scalar_type(DataType p_type); static bool is_sampler_type(DataType p_type); - static Variant constant_value_to_variant(const Vector<ShaderLanguage::ConstantNode::Value> &p_value, DataType p_type); + static Variant constant_value_to_variant(const Vector<ShaderLanguage::ConstantNode::Value> &p_value, DataType p_type, ShaderLanguage::ShaderNode::Uniform::Hint p_hint = ShaderLanguage::ShaderNode::Uniform::HINT_NONE); static void get_keyword_list(List<String> *r_keywords); static void get_builtin_funcs(List<String> *r_keywords); @@ -642,6 +642,12 @@ private: const DataType args[MAX_ARGS]; }; + struct BuiltinFuncOutArgs { //arguments used as out in built in funcions + + const char *name; + int argument; + }; + CompletionType completion_type; int completion_line; BlockNode *completion_block; @@ -652,6 +658,7 @@ private: bool _get_completable_identifier(BlockNode *p_block, CompletionType p_type, StringName &identifier); static const BuiltinFuncDef builtin_func_defs[]; + static const BuiltinFuncOutArgs builtin_func_out_args[]; bool _validate_function_call(BlockNode *p_block, OperatorNode *p_func, DataType *r_ret_type); bool _parse_function_arguments(BlockNode *p_block, const Map<StringName, BuiltInInfo> &p_builtin_types, OperatorNode *p_func, int *r_complete_arg = NULL); diff --git a/servers/visual/shader_types.cpp b/servers/visual/shader_types.cpp index 57e8d86468..baafe2f8d0 100644 --- a/servers/visual/shader_types.cpp +++ b/servers/visual/shader_types.cpp @@ -109,6 +109,7 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["EMISSION"] = ShaderLanguage::TYPE_VEC3; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["SCREEN_TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["DEPTH_TEXTURE"] = ShaderLanguage::TYPE_SAMPLER2D; + shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["DEPTH"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["SCREEN_UV"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["POINT_COORD"] = constt(ShaderLanguage::TYPE_VEC2); shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["ALPHA_SCISSOR"] = ShaderLanguage::TYPE_FLOAT; @@ -198,6 +199,7 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["TIME"] = constt(ShaderLanguage::TYPE_FLOAT); shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["INSTANCE_CUSTOM"] = constt(ShaderLanguage::TYPE_VEC4); shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["AT_LIGHT_PASS"] = constt(ShaderLanguage::TYPE_BOOL); + shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].built_ins["TEXTURE_PIXEL_SIZE"] = constt(ShaderLanguage::TYPE_VEC2); shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"].can_discard = false; shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["FRAGCOORD"] = constt(ShaderLanguage::TYPE_VEC4); diff --git a/servers/visual/visual_server_canvas.cpp b/servers/visual/visual_server_canvas.cpp index 16cda0326d..26fb3cc493 100644 --- a/servers/visual/visual_server_canvas.cpp +++ b/servers/visual/visual_server_canvas.cpp @@ -51,6 +51,23 @@ void VisualServerCanvas::_render_canvas_item_tree(Item *p_canvas_item, const Tra } } +void _collect_ysort_children(VisualServerCanvas::Item *p_canvas_item, Transform2D p_transform, VisualServerCanvas::Item **r_items, int &r_index) { + int child_item_count = p_canvas_item->child_items.size(); + VisualServerCanvas::Item **child_items = p_canvas_item->child_items.ptrw(); + for (int i = 0; i < child_item_count; i++) { + if (r_items) { + r_items[r_index] = child_items[i]; + child_items[i]->ysort_xform = p_transform; + child_items[i]->ysort_pos = p_transform.xform(child_items[i]->xform.elements[2]); + } + + r_index++; + + if (child_items[i]->sort_y) + _collect_ysort_children(child_items[i], p_transform * child_items[i]->xform, r_items, r_index); + } +} + void VisualServerCanvas::_render_canvas_item(Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, int p_z, RasterizerCanvas::Item **z_list, RasterizerCanvas::Item **z_last_list, Item *p_canvas_clip, Item *p_material_owner) { Item *ci = p_canvas_item; @@ -58,10 +75,10 @@ void VisualServerCanvas::_render_canvas_item(Item *p_canvas_item, const Transfor if (!ci->visible) return; - if (p_canvas_item->children_order_dirty) { + if (ci->children_order_dirty) { - p_canvas_item->child_items.sort_custom<ItemIndexSort>(); - p_canvas_item->children_order_dirty = false; + ci->child_items.sort_custom<ItemIndexSort>(); + ci->children_order_dirty = false; } Rect2 rect = ci->get_rect(); @@ -82,8 +99,7 @@ void VisualServerCanvas::_render_canvas_item(Item *p_canvas_item, const Transfor return; int child_item_count = ci->child_items.size(); - Item **child_items = (Item **)alloca(child_item_count * sizeof(Item *)); - copymem(child_items, ci->child_items.ptr(), child_item_count * sizeof(Item *)); + Item **child_items = ci->child_items.ptrw(); if (ci->clip) { if (p_canvas_clip != NULL) { @@ -99,6 +115,17 @@ void VisualServerCanvas::_render_canvas_item(Item *p_canvas_item, const Transfor if (ci->sort_y) { + if (ci->ysort_children_count == -1) { + ci->ysort_children_count = 0; + _collect_ysort_children(ci, Transform2D(), NULL, ci->ysort_children_count); + } + + child_item_count = ci->ysort_children_count; + child_items = (Item **)alloca(child_item_count * sizeof(Item *)); + + int i = 0; + _collect_ysort_children(ci, Transform2D(), child_items, i); + SortArray<Item *, ItemPtrSort> sorter; sorter.sort(child_items, child_item_count); } @@ -110,9 +137,13 @@ void VisualServerCanvas::_render_canvas_item(Item *p_canvas_item, const Transfor for (int i = 0; i < child_item_count; i++) { - if (!child_items[i]->behind) + if (!child_items[i]->behind || (ci->sort_y && child_items[i]->sort_y)) continue; - _render_canvas_item(child_items[i], xform, p_clip_rect, modulate, p_z, z_list, z_last_list, (Item *)ci->final_clip_owner, p_material_owner); + if (ci->sort_y) { + _render_canvas_item(child_items[i], xform * child_items[i]->ysort_xform, p_clip_rect, modulate, p_z, z_list, z_last_list, (Item *)ci->final_clip_owner, p_material_owner); + } else { + _render_canvas_item(child_items[i], xform, p_clip_rect, modulate, p_z, z_list, z_last_list, (Item *)ci->final_clip_owner, p_material_owner); + } } if (ci->copy_back_buffer) { @@ -148,9 +179,13 @@ void VisualServerCanvas::_render_canvas_item(Item *p_canvas_item, const Transfor for (int i = 0; i < child_item_count; i++) { - if (child_items[i]->behind) + if (child_items[i]->behind || (ci->sort_y && child_items[i]->sort_y)) continue; - _render_canvas_item(child_items[i], xform, p_clip_rect, modulate, p_z, z_list, z_last_list, (Item *)ci->final_clip_owner, p_material_owner); + if (ci->sort_y) { + _render_canvas_item(child_items[i], xform * child_items[i]->ysort_xform, p_clip_rect, modulate, p_z, z_list, z_last_list, (Item *)ci->final_clip_owner, p_material_owner); + } else { + _render_canvas_item(child_items[i], xform, p_clip_rect, modulate, p_z, z_list, z_last_list, (Item *)ci->final_clip_owner, p_material_owner); + } } } @@ -300,6 +335,12 @@ void VisualServerCanvas::canvas_item_set_parent(RID p_item, RID p_parent) { Item *item_owner = canvas_item_owner.get(canvas_item->parent); item_owner->child_items.erase(canvas_item); + + Item *ysort_owner = item_owner; + while (ysort_owner && ysort_owner->sort_y) { + item_owner->ysort_children_count = -1; + ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : NULL; + } } canvas_item->parent = RID(); @@ -319,6 +360,12 @@ void VisualServerCanvas::canvas_item_set_parent(RID p_item, RID p_parent) { item_owner->child_items.push_back(canvas_item); item_owner->children_order_dirty = true; + Item *ysort_owner = item_owner; + while (ysort_owner && ysort_owner->sort_y) { + item_owner->ysort_children_count = -1; + ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : NULL; + } + } else { ERR_EXPLAIN("Invalid parent"); @@ -689,7 +736,7 @@ void VisualServerCanvas::canvas_item_add_polygon(RID p_item, const Vector<Point2 if (indices.empty()) { ERR_EXPLAIN("Bad Polygon!"); - ERR_FAIL_V(); + ERR_FAIL(); } Item::CommandPolygon *polygon = memnew(Item::CommandPolygon); @@ -776,7 +823,7 @@ void VisualServerCanvas::canvas_item_add_mesh(RID p_item, const RID &p_mesh, RID canvas_item->commands.push_back(m); } -void VisualServerCanvas::canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal, int p_h_frames, int p_v_frames) { +void VisualServerCanvas::canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal) { Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); @@ -786,8 +833,6 @@ void VisualServerCanvas::canvas_item_add_particles(RID p_item, RID p_particles, part->particles = p_particles; part->texture = p_texture; part->normal_map = p_normal; - part->h_frames = p_h_frames; - part->v_frames = p_v_frames; //take the chance and request processing for them, at least once until they become visible again VSG::storage->particles_request_process(p_particles); @@ -828,6 +873,7 @@ void VisualServerCanvas::canvas_item_set_sort_children_by_y(RID p_item, bool p_e ERR_FAIL_COND(!canvas_item); canvas_item->sort_y = p_enable; + canvas_item->ysort_children_count = -1; } void VisualServerCanvas::canvas_item_set_z_index(RID p_item, int p_z) { @@ -1304,6 +1350,12 @@ bool VisualServerCanvas::free(RID p_rid) { Item *item_owner = canvas_item_owner.get(canvas_item->parent); item_owner->child_items.erase(canvas_item); + + Item *ysort_owner = item_owner; + while (ysort_owner && ysort_owner->sort_y) { + item_owner->ysort_children_count = -1; + ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : NULL; + } } } diff --git a/servers/visual/visual_server_canvas.h b/servers/visual/visual_server_canvas.h index 966b51d341..4b7422b15a 100644 --- a/servers/visual/visual_server_canvas.h +++ b/servers/visual/visual_server_canvas.h @@ -48,6 +48,9 @@ public: bool use_parent_material; int index; bool children_order_dirty; + int ysort_children_count; + Transform2D ysort_xform; + Vector2 ysort_pos; Vector<Item *> child_items; @@ -61,6 +64,9 @@ public: use_parent_material = false; z_relative = true; index = 0; + ysort_children_count = -1; + ysort_xform = Transform2D(); + ysort_pos = Vector2(); } }; @@ -76,10 +82,10 @@ public: _FORCE_INLINE_ bool operator()(const Item *p_left, const Item *p_right) const { - if (Math::abs(p_left->xform.elements[2].y - p_right->xform.elements[2].y) < CMP_EPSILON) - return p_left->xform.elements[2].x < p_right->xform.elements[2].x; + if (Math::abs(p_left->ysort_pos.y - p_right->ysort_pos.y) < CMP_EPSILON) + return p_left->ysort_pos.x < p_right->ysort_pos.x; else - return p_left->xform.elements[2].y < p_right->xform.elements[2].y; + return p_left->ysort_pos.y < p_right->ysort_pos.y; } }; @@ -186,7 +192,7 @@ public: void canvas_item_add_triangle_array(RID p_item, const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), const Vector<int> &p_bones = Vector<int>(), const Vector<float> &p_weights = Vector<float>(), RID p_texture = RID(), int p_count = -1, RID p_normal_map = RID()); void canvas_item_add_mesh(RID p_item, const RID &p_mesh, RID p_texture = RID(), RID p_normal_map = RID()); void canvas_item_add_multimesh(RID p_item, RID p_mesh, RID p_texture = RID(), RID p_normal_map = RID()); - void canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal, int p_h_frames, int p_v_frames); + void canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal); void canvas_item_add_set_transform(RID p_item, const Transform2D &p_transform); void canvas_item_add_clip_ignore(RID p_item, bool p_ignore); void canvas_item_set_sort_children_by_y(RID p_item, bool p_enable); diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index 62ba2eab69..f3a442be99 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -474,7 +474,7 @@ public: BIND2(viewport_set_transparent_background, RID, bool) BIND2(viewport_set_global_canvas_transform, RID, const Transform2D &) - BIND3(viewport_set_canvas_layer, RID, RID, int) + BIND4(viewport_set_canvas_stacking, RID, RID, int, int) BIND2(viewport_set_shadow_atlas_size, RID, int) BIND3(viewport_set_shadow_atlas_quadrant_subdivision, RID, int, int) BIND2(viewport_set_msaa, RID, ViewportMSAA) @@ -504,14 +504,14 @@ public: BIND6(environment_set_dof_blur_near, RID, bool, float, float, float, EnvironmentDOFBlurQuality) BIND6(environment_set_dof_blur_far, RID, bool, float, float, float, EnvironmentDOFBlurQuality) - BIND10(environment_set_glow, RID, bool, int, float, float, float, EnvironmentGlowBlendMode, float, float, bool) + BIND11(environment_set_glow, RID, bool, int, float, float, float, EnvironmentGlowBlendMode, float, float, float, bool) BIND9(environment_set_tonemap, RID, EnvironmentToneMapper, float, float, bool, float, float, float, float) BIND6(environment_set_adjustment, RID, bool, float, float, float, RID) BIND5(environment_set_fog, RID, bool, const Color &, const Color &, float) - BIND6(environment_set_fog_depth, RID, bool, float, float, bool, float) + BIND7(environment_set_fog_depth, RID, bool, float, float, float, bool, float) BIND5(environment_set_fog_height, RID, bool, float, float, float) /* SCENARIO API */ @@ -599,7 +599,7 @@ public: BIND10(canvas_item_add_triangle_array, RID, const Vector<int> &, const Vector<Point2> &, const Vector<Color> &, const Vector<Point2> &, const Vector<int> &, const Vector<float> &, RID, int, RID) BIND4(canvas_item_add_mesh, RID, const RID &, RID, RID) BIND4(canvas_item_add_multimesh, RID, RID, RID, RID) - BIND6(canvas_item_add_particles, RID, RID, RID, RID, int, int) + BIND4(canvas_item_add_particles, RID, RID, RID, RID) BIND2(canvas_item_add_set_transform, RID, const Transform2D &) BIND2(canvas_item_add_clip_ignore, RID, bool) BIND2(canvas_item_set_sort_children_by_y, RID, bool) diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp index cd0702d20b..1deca7bc66 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -601,8 +601,9 @@ void VisualServerScene::instance_set_surface_material(RID p_instance, int p_surf Instance *instance = instance_owner.get(p_instance); ERR_FAIL_COND(!instance); - if (instance->update_item.in_list()) { - _update_dirty_instance(instance); + if (instance->base_type == VS::INSTANCE_MESH) { + //may not have been updated yet + instance->materials.resize(VSG::storage->mesh_get_surface_count(instance->base)); } ERR_FAIL_INDEX(p_surface, instance->materials.size()); @@ -611,7 +612,7 @@ void VisualServerScene::instance_set_surface_material(RID p_instance, int p_surf VSG::storage->material_remove_instance_owner(instance->materials[p_surface], instance); } instance->materials.write[p_surface] = p_material; - instance->base_material_changed(); + instance->base_changed(false, true); if (instance->materials[p_surface].is_valid()) { VSG::storage->material_add_instance_owner(instance->materials[p_surface], instance); @@ -839,7 +840,7 @@ void VisualServerScene::instance_geometry_set_cast_shadows_setting(RID p_instanc ERR_FAIL_COND(!instance); instance->cast_shadows = p_shadow_casting_setting; - instance->base_material_changed(); // to actually compute if shadows are visible or not + instance->base_changed(false, true); // to actually compute if shadows are visible or not } void VisualServerScene::instance_geometry_set_material_override(RID p_instance, RID p_material) { @@ -850,7 +851,7 @@ void VisualServerScene::instance_geometry_set_material_override(RID p_instance, VSG::storage->material_remove_instance_owner(instance->material_override, instance); } instance->material_override = p_material; - instance->base_material_changed(); + instance->base_changed(false, true); if (instance->material_override.is_valid()) { VSG::storage->material_add_instance_owner(instance->material_override, instance); @@ -1263,13 +1264,15 @@ void VisualServerScene::_update_instance_lightmap_captures(Instance *p_instance) } } -void VisualServerScene::_light_instance_update_shadow(Instance *p_instance, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_shadow_atlas, Scenario *p_scenario) { +bool VisualServerScene::_light_instance_update_shadow(Instance *p_instance, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_shadow_atlas, Scenario *p_scenario) { InstanceLightData *light = static_cast<InstanceLightData *>(p_instance->base_data); Transform light_transform = p_instance->transform; light_transform.orthonormalize(); //scale does not count on lights + bool animated_material_found = false; + switch (VSG::storage->light_get_type(p_instance->base)) { case VS::LIGHT_DIRECTIONAL: { @@ -1302,6 +1305,10 @@ void VisualServerScene::_light_instance_update_shadow(Instance *p_instance, cons continue; } + if (static_cast<InstanceGeometryData *>(instance->base_data)->material_is_animated) { + animated_material_found = true; + } + float max, min; instance->transformed_aabb.project_range_in_plane(base, min, max); @@ -1557,6 +1564,10 @@ void VisualServerScene::_light_instance_update_shadow(Instance *p_instance, cons SWAP(instance_shadow_cull_result[j], instance_shadow_cull_result[cull_count]); j--; } else { + if (static_cast<InstanceGeometryData *>(instance->base_data)->material_is_animated) { + animated_material_found = true; + } + instance->depth = near_plane.distance_to(instance->transform.origin); instance->depth_layer = 0; } @@ -1608,6 +1619,9 @@ void VisualServerScene::_light_instance_update_shadow(Instance *p_instance, cons SWAP(instance_shadow_cull_result[j], instance_shadow_cull_result[cull_count]); j--; } else { + if (static_cast<InstanceGeometryData *>(instance->base_data)->material_is_animated) { + animated_material_found = true; + } instance->depth = near_plane.distance_to(instance->transform.origin); instance->depth_layer = 0; } @@ -1644,6 +1658,9 @@ void VisualServerScene::_light_instance_update_shadow(Instance *p_instance, cons SWAP(instance_shadow_cull_result[j], instance_shadow_cull_result[cull_count]); j--; } else { + if (static_cast<InstanceGeometryData *>(instance->base_data)->material_is_animated) { + animated_material_found = true; + } instance->depth = near_plane.distance_to(instance->transform.origin); instance->depth_layer = 0; } @@ -1654,6 +1671,8 @@ void VisualServerScene::_light_instance_update_shadow(Instance *p_instance, cons } break; } + + return animated_material_found; } void VisualServerScene::render_camera(RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas) { @@ -1893,9 +1912,14 @@ void VisualServerScene::_prepare_scene(const Transform p_cam_transform, const Ca if (ins->base_type == VS::INSTANCE_PARTICLES) { //particles visible? process them - VSG::storage->particles_request_process(ins->base); - //particles visible? request redraw - VisualServerRaster::redraw_request(); + if (VSG::storage->particles_is_inactive(ins->base)) { + //but if nothing is going on, don't do it. + keep = false; + } else { + VSG::storage->particles_request_process(ins->base); + //particles visible? request redraw + VisualServerRaster::redraw_request(); + } } if (geom->lighting_dirty) { @@ -2095,7 +2119,7 @@ void VisualServerScene::_prepare_scene(const Transform p_cam_transform, const Ca if (redraw) { //must redraw! - _light_instance_update_shadow(ins, p_cam_transform, p_cam_projection, p_cam_orthogonal, p_shadow_atlas, scenario); + light->shadow_dirty = _light_instance_update_shadow(ins, p_cam_transform, p_cam_projection, p_cam_orthogonal, p_shadow_atlas, scenario); } } } @@ -2831,7 +2855,7 @@ void VisualServerScene::_bake_gi_probe(Instance *p_gi_probe) { RID rid = E->key(); const InstanceGIProbeData::LightCache &lc = E->get(); - if ((!probe_data->dynamic.light_cache_changes.has(rid) || !(probe_data->dynamic.light_cache_changes[rid] == lc)) && lc.visible) { + if ((!probe_data->dynamic.light_cache_changes.has(rid) || probe_data->dynamic.light_cache_changes[rid] != lc) && lc.visible) { //erase light data _bake_gi_probe_light(header, cells, local_data, leaves, leaf_count, lc, -1); @@ -2844,7 +2868,7 @@ void VisualServerScene::_bake_gi_probe(Instance *p_gi_probe) { RID rid = E->key(); const InstanceGIProbeData::LightCache &lc = E->get(); - if ((!probe_data->dynamic.light_cache.has(rid) || !(probe_data->dynamic.light_cache[rid] == lc)) && lc.visible) { + if ((!probe_data->dynamic.light_cache.has(rid) || probe_data->dynamic.light_cache[rid] != lc) && lc.visible) { //add light data _bake_gi_probe_light(header, cells, local_data, leaves, leaf_count, lc, 1); @@ -3061,7 +3085,7 @@ bool VisualServerScene::_check_gi_probe(Instance *p_gi_probe) { lc.transform = probe_data->dynamic.light_to_cell_xform * E->get()->transform; lc.visible = E->get()->visible; - if (!probe_data->dynamic.light_cache.has(E->get()->self) || !(probe_data->dynamic.light_cache[E->get()->self] == lc)) { + if (!probe_data->dynamic.light_cache.has(E->get()->self) || probe_data->dynamic.light_cache[E->get()->self] != lc) { all_equal = false; } @@ -3081,7 +3105,7 @@ bool VisualServerScene::_check_gi_probe(Instance *p_gi_probe) { lc.transform = probe_data->dynamic.light_to_cell_xform * E->get()->transform; lc.visible = E->get()->visible; - if (!probe_data->dynamic.light_cache.has(E->get()->self) || !(probe_data->dynamic.light_cache[E->get()->self] == lc)) { + if (!probe_data->dynamic.light_cache.has(E->get()->self) || probe_data->dynamic.light_cache[E->get()->self] != lc) { all_equal = false; } @@ -3164,7 +3188,7 @@ void VisualServerScene::render_probes() { force_lighting = true; } - if (probe->invalid == false && probe->dynamic.enabled) { + if (!probe->invalid && probe->dynamic.enabled) { switch (probe->dynamic.updating_stage) { case GI_UPDATE_STAGE_CHECK: { @@ -3243,11 +3267,13 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(p_instance->base_data); bool can_cast_shadows = true; + bool is_animated = false; if (p_instance->cast_shadows == VS::SHADOW_CASTING_SETTING_OFF) { can_cast_shadows = false; } else if (p_instance->material_override.is_valid()) { can_cast_shadows = VSG::storage->material_casts_shadows(p_instance->material_override); + is_animated = VSG::storage->material_is_animated(p_instance->material_override); } else { if (p_instance->base_type == VS::INSTANCE_MESH) { @@ -3262,12 +3288,15 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { if (!mat.is_valid()) { cast_shadows = true; - break; - } + } else { - if (VSG::storage->material_casts_shadows(mat)) { - cast_shadows = true; - break; + if (VSG::storage->material_casts_shadows(mat)) { + cast_shadows = true; + } + + if (VSG::storage->material_is_animated(mat)) { + is_animated = true; + } } } @@ -3289,12 +3318,15 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { if (!mat.is_valid()) { cast_shadows = true; - break; - } - if (VSG::storage->material_casts_shadows(mat)) { - cast_shadows = true; - break; + } else { + + if (VSG::storage->material_casts_shadows(mat)) { + cast_shadows = true; + } + if (VSG::storage->material_is_animated(mat)) { + is_animated = true; + } } } @@ -3311,6 +3343,10 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { } else { can_cast_shadows = false; } + + if (mat.is_valid() && VSG::storage->material_is_animated(mat)) { + is_animated = true; + } } else if (p_instance->base_type == VS::INSTANCE_PARTICLES) { bool cast_shadows = false; @@ -3330,12 +3366,15 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { if (!mat.is_valid()) { cast_shadows = true; - break; - } + } else { - if (VSG::storage->material_casts_shadows(mat)) { - cast_shadows = true; - break; + if (VSG::storage->material_casts_shadows(mat)) { + cast_shadows = true; + } + + if (VSG::storage->material_is_animated(mat)) { + is_animated = true; + } } } } @@ -3355,6 +3394,8 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { geom->can_cast_shadows = can_cast_shadows; } + + geom->material_is_animated = is_animated; } } diff --git a/servers/visual/visual_server_scene.h b/servers/visual/visual_server_scene.h index bcd6d1d972..38c5258116 100644 --- a/servers/visual/visual_server_scene.h +++ b/servers/visual/visual_server_scene.h @@ -192,14 +192,9 @@ public: singleton->instance_set_base(self, RID()); } - virtual void base_changed() { + virtual void base_changed(bool p_aabb, bool p_materials) { - singleton->_instance_queue_update(this, true, true); - } - - virtual void base_material_changed() { - - singleton->_instance_queue_update(this, false, true); + singleton->_instance_queue_update(this, p_aabb, p_materials); } Instance() : @@ -247,6 +242,7 @@ public: List<Instance *> lighting; bool lighting_dirty; bool can_cast_shadows; + bool material_is_animated; List<Instance *> reflection_probes; bool reflection_dirty; @@ -261,6 +257,7 @@ public: lighting_dirty = false; reflection_dirty = true; can_cast_shadows = true; + material_is_animated = true; gi_probes_dirty = true; } }; @@ -355,6 +352,11 @@ public: visible == p_cache.visible); } + bool operator!=(const LightCache &p_cache) { + + return !operator==(p_cache); + } + LightCache() { type = VS::LIGHT_DIRECTIONAL; @@ -483,7 +485,7 @@ public: _FORCE_INLINE_ void _update_dirty_instance(Instance *p_instance); _FORCE_INLINE_ void _update_instance_lightmap_captures(Instance *p_instance); - _FORCE_INLINE_ void _light_instance_update_shadow(Instance *p_instance, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_shadow_atlas, Scenario *p_scenario); + _FORCE_INLINE_ bool _light_instance_update_shadow(Instance *p_instance, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_shadow_atlas, Scenario *p_scenario); void _prepare_scene(const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_force_environment, uint32_t p_visible_layers, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe); void _render_scene(const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_force_environment, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe, int p_reflection_probe_pass); diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp index b286533590..571b71db85 100644 --- a/servers/visual/visual_server_viewport.cpp +++ b/servers/visual/visual_server_viewport.cpp @@ -137,7 +137,7 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E } } - canvas_map[Viewport::CanvasKey(E->key(), E->get().layer)] = &E->get(); + canvas_map[Viewport::CanvasKey(E->key(), E->get().layer, E->get().sublayer)] = &E->get(); } if (lights_with_shadow) { @@ -176,7 +176,7 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E VSG::rasterizer->restore_render_target(); - if (scenario_draw_canvas_bg && canvas_map.front() && canvas_map.front()->key().layer > scenario_canvas_max_layer) { + if (scenario_draw_canvas_bg && canvas_map.front() && canvas_map.front()->key().get_layer() > scenario_canvas_max_layer) { Ref<ARVRInterface> arvr_interface = ARVRServer::get_singleton()->get_primary_interface(); if (!can_draw_3d) { @@ -209,7 +209,7 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E VSG::canvas->render_canvas(canvas, xform, canvas_lights, lights_with_mask, clip_rect); i++; - if (scenario_draw_canvas_bg && E->key().layer >= scenario_canvas_max_layer) { + if (scenario_draw_canvas_bg && E->key().get_layer() >= scenario_canvas_max_layer) { Ref<ARVRInterface> arvr_interface = ARVRServer::get_singleton()->get_primary_interface(); if (!can_draw_3d) { @@ -496,6 +496,7 @@ void VisualServerViewport::viewport_attach_canvas(RID p_viewport, RID p_canvas) canvas->viewports.insert(p_viewport); viewport->canvas_map[p_canvas] = Viewport::CanvasData(); viewport->canvas_map[p_canvas].layer = 0; + viewport->canvas_map[p_canvas].sublayer = 0; viewport->canvas_map[p_canvas].canvas = canvas; } @@ -534,13 +535,14 @@ void VisualServerViewport::viewport_set_global_canvas_transform(RID p_viewport, viewport->global_transform = p_transform; } -void VisualServerViewport::viewport_set_canvas_layer(RID p_viewport, RID p_canvas, int p_layer) { +void VisualServerViewport::viewport_set_canvas_stacking(RID p_viewport, RID p_canvas, int p_layer, int p_sublayer) { Viewport *viewport = viewport_owner.getornull(p_viewport); ERR_FAIL_COND(!viewport); ERR_FAIL_COND(!viewport->canvas_map.has(p_canvas)); viewport->canvas_map[p_canvas].layer = p_layer; + viewport->canvas_map[p_canvas].sublayer = p_sublayer; } void VisualServerViewport::viewport_set_shadow_atlas_size(RID p_viewport, int p_size) { diff --git a/servers/visual/visual_server_viewport.h b/servers/visual/visual_server_viewport.h index cb7912d6f4..66baa48458 100644 --- a/servers/visual/visual_server_viewport.h +++ b/servers/visual/visual_server_viewport.h @@ -78,17 +78,21 @@ public: struct CanvasKey { - int layer; + int64_t stacking; RID canvas; bool operator<(const CanvasKey &p_canvas) const { - if (layer == p_canvas.layer) return canvas < p_canvas.canvas; - return layer < p_canvas.layer; + if (stacking == p_canvas.stacking) + return canvas < p_canvas.canvas; + return stacking < p_canvas.stacking; + } + CanvasKey() { + stacking = 0; } - CanvasKey() { layer = 0; } - CanvasKey(const RID &p_canvas, int p_layer) { + CanvasKey(const RID &p_canvas, int p_layer, int p_sublayer) { canvas = p_canvas; - layer = p_layer; + stacking = ((int64_t)p_layer << 32) + p_sublayer; } + int get_layer() const { return stacking >> 32; } }; struct CanvasData { @@ -96,6 +100,7 @@ public: CanvasBase *canvas; Transform2D transform; int layer; + int sublayer; }; Transform2D global_transform; @@ -176,7 +181,7 @@ public: void viewport_set_transparent_background(RID p_viewport, bool p_enabled); void viewport_set_global_canvas_transform(RID p_viewport, const Transform2D &p_transform); - void viewport_set_canvas_layer(RID p_viewport, RID p_canvas, int p_layer); + void viewport_set_canvas_stacking(RID p_viewport, RID p_canvas, int p_layer, int p_sublayer); void viewport_set_shadow_atlas_size(RID p_viewport, int p_size); void viewport_set_shadow_atlas_quadrant_subdivision(RID p_viewport, int p_quadrant, int p_subdiv); diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index e4d69121f0..37f6323b8f 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -400,7 +400,7 @@ public: FUNC2(viewport_set_transparent_background, RID, bool) FUNC2(viewport_set_global_canvas_transform, RID, const Transform2D &) - FUNC3(viewport_set_canvas_layer, RID, RID, int) + FUNC4(viewport_set_canvas_stacking, RID, RID, int, int) FUNC2(viewport_set_shadow_atlas_size, RID, int) FUNC3(viewport_set_shadow_atlas_quadrant_subdivision, RID, int, int) FUNC2(viewport_set_msaa, RID, ViewportMSAA) @@ -430,14 +430,14 @@ public: FUNC6(environment_set_dof_blur_near, RID, bool, float, float, float, EnvironmentDOFBlurQuality) FUNC6(environment_set_dof_blur_far, RID, bool, float, float, float, EnvironmentDOFBlurQuality) - FUNC10(environment_set_glow, RID, bool, int, float, float, float, EnvironmentGlowBlendMode, float, float, bool) + FUNC11(environment_set_glow, RID, bool, int, float, float, float, EnvironmentGlowBlendMode, float, float, float, bool) FUNC9(environment_set_tonemap, RID, EnvironmentToneMapper, float, float, bool, float, float, float, float) FUNC6(environment_set_adjustment, RID, bool, float, float, float, RID) FUNC5(environment_set_fog, RID, bool, const Color &, const Color &, float) - FUNC6(environment_set_fog_depth, RID, bool, float, float, bool, float) + FUNC7(environment_set_fog_depth, RID, bool, float, float, float, bool, float) FUNC5(environment_set_fog_height, RID, bool, float, float, float) FUNCRID(scenario) @@ -516,7 +516,7 @@ public: FUNC10(canvas_item_add_triangle_array, RID, const Vector<int> &, const Vector<Point2> &, const Vector<Color> &, const Vector<Point2> &, const Vector<int> &, const Vector<float> &, RID, int, RID) FUNC4(canvas_item_add_mesh, RID, const RID &, RID, RID) FUNC4(canvas_item_add_multimesh, RID, RID, RID, RID) - FUNC6(canvas_item_add_particles, RID, RID, RID, RID, int, int) + FUNC4(canvas_item_add_particles, RID, RID, RID, RID) FUNC2(canvas_item_add_set_transform, RID, const Transform2D &) FUNC2(canvas_item_add_clip_ignore, RID, bool) FUNC2(canvas_item_set_sort_children_by_y, RID, bool) diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 9d684d33d6..34cc1cbd66 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -343,7 +343,7 @@ RID VisualServer::get_white_texture() { #define SMALL_VEC2 Vector2(0.00001, 0.00001) #define SMALL_VEC3 Vector3(0.00001, 0.00001, 0.00001) -Error VisualServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_stride, PoolVector<uint8_t> &r_vertex_array, int p_vertex_array_len, PoolVector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> r_bone_aabb) { +Error VisualServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_stride, PoolVector<uint8_t> &r_vertex_array, int p_vertex_array_len, PoolVector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> &r_bone_aabb) { PoolVector<uint8_t>::Write vw = r_vertex_array.write(); @@ -1890,7 +1890,7 @@ void VisualServer::_bind_methods() { ClassDB::bind_method(D_METHOD("viewport_set_canvas_transform", "viewport", "canvas", "offset"), &VisualServer::viewport_set_canvas_transform); ClassDB::bind_method(D_METHOD("viewport_set_transparent_background", "viewport", "enabled"), &VisualServer::viewport_set_transparent_background); ClassDB::bind_method(D_METHOD("viewport_set_global_canvas_transform", "viewport", "transform"), &VisualServer::viewport_set_global_canvas_transform); - ClassDB::bind_method(D_METHOD("viewport_set_canvas_layer", "viewport", "canvas", "layer"), &VisualServer::viewport_set_canvas_layer); + ClassDB::bind_method(D_METHOD("viewport_set_canvas_stacking", "viewport", "canvas", "layer", "sublayer"), &VisualServer::viewport_set_canvas_stacking); ClassDB::bind_method(D_METHOD("viewport_set_shadow_atlas_size", "viewport", "size"), &VisualServer::viewport_set_shadow_atlas_size); ClassDB::bind_method(D_METHOD("viewport_set_shadow_atlas_quadrant_subdivision", "viewport", "quadrant", "subdivision"), &VisualServer::viewport_set_shadow_atlas_quadrant_subdivision); ClassDB::bind_method(D_METHOD("viewport_set_msaa", "viewport", "msaa"), &VisualServer::viewport_set_msaa); @@ -1909,13 +1909,15 @@ void VisualServer::_bind_methods() { ClassDB::bind_method(D_METHOD("environment_set_ambient_light", "env", "color", "energy", "sky_contibution"), &VisualServer::environment_set_ambient_light, DEFVAL(1.0), DEFVAL(0.0)); ClassDB::bind_method(D_METHOD("environment_set_dof_blur_near", "env", "enable", "distance", "transition", "far_amount", "quality"), &VisualServer::environment_set_dof_blur_near); ClassDB::bind_method(D_METHOD("environment_set_dof_blur_far", "env", "enable", "distance", "transition", "far_amount", "quality"), &VisualServer::environment_set_dof_blur_far); - ClassDB::bind_method(D_METHOD("environment_set_glow", "env", "enable", "level_flags", "intensity", "strength", "bloom_threshold", "blend_mode", "hdr_bleed_threshold", "hdr_bleed_scale", "bicubic_upscale"), &VisualServer::environment_set_glow); + ClassDB::bind_method(D_METHOD("environment_set_glow", "env", "enable", "level_flags", "intensity", "strength", "bloom_threshold", "blend_mode", "hdr_bleed_threshold", "hdr_bleed_scale", "hdr_luminance_cap", "bicubic_upscale"), &VisualServer::environment_set_glow); ClassDB::bind_method(D_METHOD("environment_set_tonemap", "env", "tone_mapper", "exposure", "white", "auto_exposure", "min_luminance", "max_luminance", "auto_exp_speed", "auto_exp_grey"), &VisualServer::environment_set_tonemap); ClassDB::bind_method(D_METHOD("environment_set_adjustment", "env", "enable", "brightness", "contrast", "saturation", "ramp"), &VisualServer::environment_set_adjustment); ClassDB::bind_method(D_METHOD("environment_set_ssr", "env", "enable", "max_steps", "fade_in", "fade_out", "depth_tolerance", "roughness"), &VisualServer::environment_set_ssr); ClassDB::bind_method(D_METHOD("environment_set_ssao", "env", "enable", "radius", "intensity", "radius2", "intensity2", "bias", "light_affect", "ao_channel_affect", "color", "quality", "blur", "bilateral_sharpness"), &VisualServer::environment_set_ssao); ClassDB::bind_method(D_METHOD("environment_set_fog", "env", "enable", "color", "sun_color", "sun_amount"), &VisualServer::environment_set_fog); - ClassDB::bind_method(D_METHOD("environment_set_fog_depth", "env", "enable", "depth_begin", "depth_curve", "transmit", "transmit_curve"), &VisualServer::environment_set_fog_depth); + + ClassDB::bind_method(D_METHOD("environment_set_fog_depth", "env", "enable", "depth_begin", "depth_end", "depth_curve", "transmit", "transmit_curve"), &VisualServer::environment_set_fog_depth); + ClassDB::bind_method(D_METHOD("environment_set_fog_height", "env", "enable", "min_height", "max_height", "height_curve"), &VisualServer::environment_set_fog_height); ClassDB::bind_method(D_METHOD("scenario_create"), &VisualServer::scenario_create); @@ -1978,7 +1980,7 @@ void VisualServer::_bind_methods() { ClassDB::bind_method(D_METHOD("canvas_item_add_triangle_array", "item", "indices", "points", "colors", "uvs", "bones", "weights", "texture", "count", "normal_map"), &VisualServer::canvas_item_add_triangle_array, DEFVAL(Vector<Point2>()), DEFVAL(Vector<int>()), DEFVAL(Vector<float>()), DEFVAL(RID()), DEFVAL(-1), DEFVAL(RID())); ClassDB::bind_method(D_METHOD("canvas_item_add_mesh", "item", "mesh", "texture", "normal_map"), &VisualServer::canvas_item_add_mesh, DEFVAL(RID())); ClassDB::bind_method(D_METHOD("canvas_item_add_multimesh", "item", "mesh", "texture", "normal_map"), &VisualServer::canvas_item_add_multimesh, DEFVAL(RID())); - ClassDB::bind_method(D_METHOD("canvas_item_add_particles", "item", "particles", "texture", "normal_map", "h_frames", "v_frames"), &VisualServer::canvas_item_add_particles); + ClassDB::bind_method(D_METHOD("canvas_item_add_particles", "item", "particles", "texture", "normal_map"), &VisualServer::canvas_item_add_particles); ClassDB::bind_method(D_METHOD("canvas_item_add_set_transform", "item", "transform"), &VisualServer::canvas_item_add_set_transform); ClassDB::bind_method(D_METHOD("canvas_item_add_clip_ignore", "item", "ignore"), &VisualServer::canvas_item_add_clip_ignore); ClassDB::bind_method(D_METHOD("canvas_item_set_sort_children_by_y", "item", "enabled"), &VisualServer::canvas_item_set_sort_children_by_y); @@ -2370,6 +2372,7 @@ VisualServer::VisualServer() { GLOBAL_DEF("rendering/quality/directional_shadow/size", 4096); GLOBAL_DEF("rendering/quality/directional_shadow/size.mobile", 2048); + ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/directional_shadow/size", PropertyInfo(Variant::INT, "rendering/quality/directional_shadow/size", PROPERTY_HINT_RANGE, "256,16384")); GLOBAL_DEF("rendering/quality/shadow_atlas/size", 4096); GLOBAL_DEF("rendering/quality/shadow_atlas/size.mobile", 2048); ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/shadow_atlas/size", PropertyInfo(Variant::INT, "rendering/quality/shadow_atlas/size", PROPERTY_HINT_RANGE, "256,16384")); @@ -2400,6 +2403,8 @@ VisualServer::VisualServer() { GLOBAL_DEF("rendering/quality/depth_prepass/enable", true); GLOBAL_DEF("rendering/quality/depth_prepass/disable_for_vendors", "PowerVR,Mali,Adreno"); + + GLOBAL_DEF("rendering/quality/filters/use_nearest_mipmap_filter", false); } VisualServer::~VisualServer() { diff --git a/servers/visual_server.h b/servers/visual_server.h index 9d98fca21b..ad2819a95a 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -61,7 +61,7 @@ protected: RID white_texture; RID test_material; - Error _surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_stride, PoolVector<uint8_t> &r_vertex_array, int p_vertex_array_len, PoolVector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> r_bone_aabb); + Error _surface_set_data(Array p_arrays, uint32_t p_format, uint32_t *p_offsets, uint32_t p_stride, PoolVector<uint8_t> &r_vertex_array, int p_vertex_array_len, PoolVector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> &r_bone_aabb); static VisualServer *(*create_func)(); static void _bind_methods(); @@ -644,7 +644,7 @@ public: virtual void viewport_set_transparent_background(RID p_viewport, bool p_enabled) = 0; virtual void viewport_set_global_canvas_transform(RID p_viewport, const Transform2D &p_transform) = 0; - virtual void viewport_set_canvas_layer(RID p_viewport, RID p_canvas, int p_layer) = 0; + virtual void viewport_set_canvas_stacking(RID p_viewport, RID p_canvas, int p_layer, int p_sublayer) = 0; virtual void viewport_set_shadow_atlas_size(RID p_viewport, int p_size) = 0; virtual void viewport_set_shadow_atlas_quadrant_subdivision(RID p_viewport, int p_quadrant, int p_subdiv) = 0; @@ -733,7 +733,7 @@ public: GLOW_BLEND_MODE_SOFTLIGHT, GLOW_BLEND_MODE_REPLACE, }; - virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, bool p_bicubic_upscale) = 0; + virtual void environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale) = 0; enum EnvironmentToneMapper { ENV_TONE_MAPPER_LINEAR, @@ -763,7 +763,7 @@ public: virtual void environment_set_ssao(RID p_env, bool p_enable, float p_radius, float p_intensity, float p_radius2, float p_intensity2, float p_bias, float p_light_affect, float p_ao_channel_affect, const Color &p_color, EnvironmentSSAOQuality p_quality, EnvironmentSSAOBlur p_blur, float p_bilateral_sharpness) = 0; virtual void environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount) = 0; - virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_curve, bool p_transmit, float p_transmit_curve) = 0; + virtual void environment_set_fog_depth(RID p_env, bool p_enable, float p_depth_begin, float p_depth_end, float p_depth_curve, bool p_transmit, float p_transmit_curve) = 0; virtual void environment_set_fog_height(RID p_env, bool p_enable, float p_min_height, float p_max_height, float p_height_curve) = 0; /* SCENARIO API */ @@ -895,7 +895,7 @@ public: virtual void canvas_item_add_triangle_array(RID p_item, const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), const Vector<int> &p_bones = Vector<int>(), const Vector<float> &p_weights = Vector<float>(), RID p_texture = RID(), int p_count = -1, RID p_normal_map = RID()) = 0; virtual void canvas_item_add_mesh(RID p_item, const RID &p_mesh, RID p_texture = RID(), RID p_normal_map = RID()) = 0; virtual void canvas_item_add_multimesh(RID p_item, RID p_mesh, RID p_texture = RID(), RID p_normal_map = RID()) = 0; - virtual void canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal_map, int p_h_frames, int p_v_frames) = 0; + virtual void canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal_map) = 0; virtual void canvas_item_add_set_transform(RID p_item, const Transform2D &p_transform) = 0; virtual void canvas_item_add_clip_ignore(RID p_item, bool p_ignore) = 0; virtual void canvas_item_set_sort_children_by_y(RID p_item, bool p_enable) = 0; diff --git a/thirdparty/README.md b/thirdparty/README.md index 7fdd9e20b0..55b693af96 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -128,7 +128,7 @@ Files extracted from upstream source: ## glad - Upstream: https://github.com/Dav1dde/glad -- Version: 0.1.25 +- Version: 0.1.28 - License: MIT The files we package are automatically generated. @@ -264,9 +264,7 @@ File extracted from upstream source: - From `roles/ws` exclude `ext` folder. - From `tls` exclude `openssl` folder. - Also copy `win32helpers/` from `win32port/` inside `thirdparty/libwebsockets` -- A small fix has been added in `libwebsockets/libwebsockets.h` to `#include <sys/socket.h>` for the BSD family. - This change has been PRed upstream, and should be merged before the next update. Remember to check and remove this line. -- Another fix has been added to allow building for 32-bits UWP, replacing `GetFileSize[Ex]` and `CreateFileW` with supported functions. +- A fix has been added to allow building for 32-bits UWP, replacing `GetFileSize[Ex]` and `CreateFileW` with supported functions. There is a diff for this change in `thirdparty/libwebsockets/uwp_fixes.diff` Important: `lws_config.h` and `lws_config_private.h` contains custom diff --git a/thirdparty/enet/godot.cpp b/thirdparty/enet/godot.cpp index 6ba7cf0000..73a09f9b1d 100644 --- a/thirdparty/enet/godot.cpp +++ b/thirdparty/enet/godot.cpp @@ -33,7 +33,7 @@ */ #include "core/io/ip.h" -#include "core/io/packet_peer_udp.h" +#include "core/io/net_socket.h" #include "core/os/os.h" // This must be last for windows to compile (tested with MinGW) @@ -90,6 +90,16 @@ int enet_address_get_host(const ENetAddress *address, char *name, size_t nameLen return -1; } +ENetSocket enet_socket_create(ENetSocketType type) { + + NetSocket *socket = NetSocket::create(); + IP::Type ip_type = IP::TYPE_ANY; + socket->open(NetSocket::TYPE_UDP, ip_type); + socket->set_blocking_enabled(false); + + return socket; +} + int enet_socket_bind(ENetSocket socket, const ENetAddress *address) { IP_Address ip; @@ -99,23 +109,15 @@ int enet_socket_bind(ENetSocket socket, const ENetAddress *address) { ip.set_ipv6(address->host); } - PacketPeerUDP *sock = (PacketPeerUDP *)socket; - if (sock->listen(address->port, ip) != OK) { + NetSocket *sock = (NetSocket *)socket; + if (sock->bind(ip, address->port) != OK) { return -1; } return 0; } -ENetSocket enet_socket_create(ENetSocketType type) { - - PacketPeerUDP *socket = memnew(PacketPeerUDP); - socket->set_blocking_mode(false); - - return socket; -} - void enet_socket_destroy(ENetSocket socket) { - PacketPeerUDP *sock = (PacketPeerUDP *)socket; + NetSocket *sock = (NetSocket *)socket; sock->close(); memdelete(sock); } @@ -124,13 +126,12 @@ int enet_socket_send(ENetSocket socket, const ENetAddress *address, const ENetBu ERR_FAIL_COND_V(address == NULL, -1); - PacketPeerUDP *sock = (PacketPeerUDP *)socket; + NetSocket *sock = (NetSocket *)socket; IP_Address dest; Error err; size_t i = 0; dest.set_ipv6(address->host); - sock->set_dest_address(dest, address->port); // Create a single packet. PoolVector<uint8_t> out; @@ -148,7 +149,8 @@ int enet_socket_send(ENetSocket socket, const ENetAddress *address, const ENetBu pos += buffers[i].dataLength; } - err = sock->put_packet((const uint8_t *)&w[0], size); + int sent = 0; + err = sock->sendto((const uint8_t *)&w[0], size, sent, dest, address->port); if (err != OK) { if (err == ERR_BUSY) { // Blocking call @@ -159,32 +161,36 @@ int enet_socket_send(ENetSocket socket, const ENetAddress *address, const ENetBu return -1; } - return size; + return sent; } int enet_socket_receive(ENetSocket socket, ENetAddress *address, ENetBuffer *buffers, size_t bufferCount) { ERR_FAIL_COND_V(bufferCount != 1, -1); - PacketPeerUDP *sock = (PacketPeerUDP *)socket; + NetSocket *sock = (NetSocket *)socket; - int pc = sock->get_available_packet_count(); - if (pc < 1) { - return pc; - } + Error ret = sock->poll(NetSocket::POLL_TYPE_IN, 0); - const uint8_t *buffer; - int buffer_size; - Error err = sock->get_packet(&buffer, buffer_size); - if (err) + if (ret == ERR_BUSY) + return 0; + + if (ret != OK) return -1; - copymem(buffers[0].data, buffer, buffer_size); + int read; + IP_Address ip; - enet_address_set_ip(address, sock->get_packet_address().get_ipv6(), 16); - address->port = sock->get_packet_port(); + Error err = sock->recvfrom((uint8_t *)buffers[0].data, buffers[0].dataLength, read, ip, address->port); + if (err == ERR_BUSY) + return 0; + + if (err != OK) + return -1; + + enet_address_set_ip(address, ip.get_ipv6(), 16); - return buffer_size; + return read; } // Not implemented diff --git a/thirdparty/glad/glad.c b/thirdparty/glad/glad.c index 35469e9031..8cc09e46e1 100644 --- a/thirdparty/glad/glad.c +++ b/thirdparty/glad/glad.c @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.25 on Sat Jul 28 10:59:43 2018. + OpenGL loader generated by glad 0.1.28 on Thu Nov 22 16:50:04 2018. Language/Generator: C/C++ Specification: gl @@ -13,11 +13,12 @@ Loader: True Local files: False Omit khrplatform: False + Reproducible: False Commandline: --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="GL_ARB_debug_output,GL_ARB_framebuffer_object,GL_EXT_framebuffer_object" Online: - http://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_debug_output&extensions=GL_ARB_framebuffer_object&extensions=GL_EXT_framebuffer_object + https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_debug_output&extensions=GL_ARB_framebuffer_object&extensions=GL_EXT_framebuffer_object */ #include <stdio.h> @@ -154,7 +155,7 @@ int gladLoadGL(void) { return status; } -struct gladGLversionStruct GLVersion; +struct gladGLversionStruct GLVersion = { 0, 0 }; #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) #define _GLAD_IS_SOME_NEW_VERSION 1 @@ -179,7 +180,11 @@ static int get_exts(void) { num_exts_i = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); if (num_exts_i > 0) { - exts_i = (char **)realloc((void *)exts_i, (size_t)num_exts_i * (sizeof *exts_i)); + char **tmp_exts_i = (char **)realloc((void *)exts_i, (size_t)num_exts_i * (sizeof *exts_i)); + if (tmp_exts_i == NULL) { + return 0; + } + exts_i = tmp_exts_i; } if (exts_i == NULL) { @@ -253,766 +258,766 @@ static int has_ext(const char *ext) { return 0; } -int GLAD_GL_VERSION_1_0; -int GLAD_GL_VERSION_1_1; -int GLAD_GL_VERSION_1_2; -int GLAD_GL_VERSION_1_3; -int GLAD_GL_VERSION_1_4; -int GLAD_GL_VERSION_1_5; -int GLAD_GL_VERSION_2_0; -int GLAD_GL_VERSION_2_1; -int GLAD_GL_VERSION_3_0; -int GLAD_GL_VERSION_3_1; -int GLAD_GL_VERSION_3_2; -int GLAD_GL_VERSION_3_3; -PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -PFNGLWINDOWPOS2SPROC glad_glWindowPos2s; -PFNGLWINDOWPOS2IPROC glad_glWindowPos2i; -PFNGLWINDOWPOS2FPROC glad_glWindowPos2f; -PFNGLWINDOWPOS2DPROC glad_glWindowPos2d; -PFNGLVERTEX2FVPROC glad_glVertex2fv; -PFNGLINDEXIPROC glad_glIndexi; -PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -PFNGLRECTDVPROC glad_glRectdv; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -PFNGLEVALCOORD2DPROC glad_glEvalCoord2d; -PFNGLEVALCOORD2FPROC glad_glEvalCoord2f; -PFNGLINDEXDPROC glad_glIndexd; -PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -PFNGLINDEXFPROC glad_glIndexf; -PFNGLBINDSAMPLERPROC glad_glBindSampler; -PFNGLLINEWIDTHPROC glad_glLineWidth; -PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -PFNGLGETMAPFVPROC glad_glGetMapfv; -PFNGLINDEXSPROC glad_glIndexs; -PFNGLCOMPILESHADERPROC glad_glCompileShader; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv; -PFNGLINDEXFVPROC glad_glIndexfv; -PFNGLFOGIVPROC glad_glFogiv; -PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv; -PFNGLLIGHTMODELIVPROC glad_glLightModeliv; -PFNGLCOLOR4UIPROC glad_glColor4ui; -PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv; -PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -PFNGLFOGFVPROC glad_glFogfv; -PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -PFNGLENABLEIPROC glad_glEnablei; -PFNGLVERTEX4IVPROC glad_glVertex4iv; -PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv; -PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv; -PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; -PFNGLCREATESHADERPROC glad_glCreateShader; -PFNGLISBUFFERPROC glad_glIsBuffer; -PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -PFNGLVERTEX4FVPROC glad_glVertex4fv; -PFNGLBINDTEXTUREPROC glad_glBindTexture; -PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv; -PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv; -PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -PFNGLPOINTSIZEPROC glad_glPointSize; -PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -PFNGLCOLOR4BVPROC glad_glColor4bv; -PFNGLRASTERPOS2FPROC glad_glRasterPos2f; -PFNGLRASTERPOS2DPROC glad_glRasterPos2d; -PFNGLLOADIDENTITYPROC glad_glLoadIdentity; -PFNGLRASTERPOS2IPROC glad_glRasterPos2i; -PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -PFNGLCOLOR3BPROC glad_glColor3b; -PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -PFNGLEDGEFLAGPROC glad_glEdgeFlag; -PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -PFNGLVERTEX3DPROC glad_glVertex3d; -PFNGLVERTEX3FPROC glad_glVertex3f; -PFNGLVERTEX3IPROC glad_glVertex3i; -PFNGLCOLOR3IPROC glad_glColor3i; -PFNGLUNIFORM3FPROC glad_glUniform3f; -PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -PFNGLCOLOR3SPROC glad_glColor3s; -PFNGLVERTEX3SPROC glad_glVertex3s; -PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -PFNGLCOLORMASKIPROC glad_glColorMaski; -PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv; -PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -PFNGLVERTEX2IVPROC glad_glVertex2iv; -PFNGLCOLOR3SVPROC glad_glColor3sv; -PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -PFNGLNORMALPOINTERPROC glad_glNormalPointer; -PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -PFNGLVERTEX4SVPROC glad_glVertex4sv; -PFNGLPASSTHROUGHPROC glad_glPassThrough; -PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -PFNGLFOGIPROC glad_glFogi; -PFNGLBEGINPROC glad_glBegin; -PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv; -PFNGLCOLOR3UBVPROC glad_glColor3ubv; -PFNGLVERTEXPOINTERPROC glad_glVertexPointer; -PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv; -PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -PFNGLDRAWARRAYSPROC glad_glDrawArrays; -PFNGLUNIFORM1UIPROC glad_glUniform1ui; -PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d; -PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f; -PFNGLLIGHTFVPROC glad_glLightfv; -PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -PFNGLCLEARPROC glad_glClear; -PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i; -PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s; -PFNGLISENABLEDPROC glad_glIsEnabled; -PFNGLSTENCILOPPROC glad_glStencilOp; -PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -PFNGLTRANSLATEFPROC glad_glTranslatef; -PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -PFNGLTRANSLATEDPROC glad_glTranslated; -PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv; -PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv; -PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; -PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -PFNGLFOGCOORDFVPROC glad_glFogCoordfv; -PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv; -PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -PFNGLINDEXSVPROC glad_glIndexsv; -PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -PFNGLVERTEX3IVPROC glad_glVertex3iv; -PFNGLBITMAPPROC glad_glBitmap; -PFNGLMATERIALIPROC glad_glMateriali; -PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -PFNGLGETQUERYIVPROC glad_glGetQueryiv; -PFNGLTEXCOORD4FPROC glad_glTexCoord4f; -PFNGLTEXCOORD4DPROC glad_glTexCoord4d; -PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -PFNGLTEXCOORD4IPROC glad_glTexCoord4i; -PFNGLMATERIALFPROC glad_glMaterialf; -PFNGLTEXCOORD4SPROC glad_glTexCoord4s; -PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -PFNGLISSHADERPROC glad_glIsShader; -PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s; -PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -PFNGLVERTEX3DVPROC glad_glVertex3dv; -PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -PFNGLENABLEPROC glad_glEnable; -PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -PFNGLCOLOR4FVPROC glad_glColor4fv; -PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv; -PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv; -PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv; -PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i; -PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv; -PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv; -PFNGLTEXGENFPROC glad_glTexGenf; -PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -PFNGLGETPOINTERVPROC glad_glGetPointerv; -PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -PFNGLNORMAL3FVPROC glad_glNormal3fv; -PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s; -PFNGLDEPTHRANGEPROC glad_glDepthRange; -PFNGLFRUSTUMPROC glad_glFrustum; -PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv; -PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -PFNGLPUSHMATRIXPROC glad_glPushMatrix; -PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv; -PFNGLORTHOPROC glad_glOrtho; -PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv; -PFNGLCLEARINDEXPROC glad_glClearIndex; -PFNGLMAP1DPROC glad_glMap1d; -PFNGLMAP1FPROC glad_glMap1f; -PFNGLFLUSHPROC glad_glFlush; -PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -PFNGLINDEXIVPROC glad_glIndexiv; -PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv; -PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -PFNGLPIXELZOOMPROC glad_glPixelZoom; -PFNGLFENCESYNCPROC glad_glFenceSync; -PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -PFNGLCOLORP3UIPROC glad_glColorP3ui; -PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -PFNGLLIGHTIPROC glad_glLighti; -PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -PFNGLLIGHTFPROC glad_glLightf; -PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -PFNGLGENSAMPLERSPROC glad_glGenSamplers; -PFNGLCLAMPCOLORPROC glad_glClampColor; -PFNGLUNIFORM4IVPROC glad_glUniform4iv; -PFNGLCLEARSTENCILPROC glad_glClearStencil; -PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv; -PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv; -PFNGLGENTEXTURESPROC glad_glGenTextures; -PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv; -PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -PFNGLINDEXPOINTERPROC glad_glIndexPointer; -PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -PFNGLISSYNCPROC glad_glIsSync; -PFNGLVERTEX2FPROC glad_glVertex2f; -PFNGLVERTEX2DPROC glad_glVertex2d; -PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -PFNGLUNIFORM2IPROC glad_glUniform2i; -PFNGLMAPGRID2DPROC glad_glMapGrid2d; -PFNGLMAPGRID2FPROC glad_glMapGrid2f; -PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -PFNGLVERTEX2IPROC glad_glVertex2i; -PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -PFNGLVERTEX2SPROC glad_glVertex2s; -PFNGLNORMAL3BVPROC glad_glNormal3bv; -PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv; -PFNGLVERTEX3SVPROC glad_glVertex3sv; -PFNGLGENQUERIESPROC glad_glGenQueries; -PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv; -PFNGLTEXENVFPROC glad_glTexEnvf; -PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -PFNGLFOGCOORDDPROC glad_glFogCoordd; -PFNGLFOGCOORDFPROC glad_glFogCoordf; -PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -PFNGLTEXENVIPROC glad_glTexEnvi; -PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv; -PFNGLISENABLEDIPROC glad_glIsEnabledi; -PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv; -PFNGLUNIFORM2IVPROC glad_glUniform2iv; -PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -PFNGLMATRIXMODEPROC glad_glMatrixMode; -PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer; -PFNGLGETMAPIVPROC glad_glGetMapiv; -PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -PFNGLGETSHADERIVPROC glad_glGetShaderiv; -PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d; -PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f; -PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures; -PFNGLCALLLISTPROC glad_glCallList; -PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv; -PFNGLGETDOUBLEVPROC glad_glGetDoublev; -PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv; -PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -PFNGLLIGHTMODELFPROC glad_glLightModelf; -PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -PFNGLVERTEX2SVPROC glad_glVertex2sv; -PFNGLLIGHTMODELIPROC glad_glLightModeli; -PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv; -PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -PFNGLUNIFORM3FVPROC glad_glUniform3fv; -PFNGLPIXELSTOREIPROC glad_glPixelStorei; -PFNGLCALLLISTSPROC glad_glCallLists; -PFNGLMAPBUFFERPROC glad_glMapBuffer; -PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d; -PFNGLTEXCOORD3IPROC glad_glTexCoord3i; -PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv; -PFNGLRASTERPOS3IPROC glad_glRasterPos3i; -PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b; -PFNGLRASTERPOS3DPROC glad_glRasterPos3d; -PFNGLRASTERPOS3FPROC glad_glRasterPos3f; -PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -PFNGLTEXCOORD3FPROC glad_glTexCoord3f; -PFNGLDELETESYNCPROC glad_glDeleteSync; -PFNGLTEXCOORD3DPROC glad_glTexCoord3d; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -PFNGLTEXCOORD3SPROC glad_glTexCoord3s; -PFNGLUNIFORM3IVPROC glad_glUniform3iv; -PFNGLRASTERPOS3SPROC glad_glRasterPos3s; -PFNGLPOLYGONMODEPROC glad_glPolygonMode; -PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident; -PFNGLISLISTPROC glad_glIsList; -PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv; -PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv; -PFNGLCOLOR4SPROC glad_glColor4s; -PFNGLUSEPROGRAMPROC glad_glUseProgram; -PFNGLLINESTIPPLEPROC glad_glLineStipple; -PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv; -PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv; -PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -PFNGLCOLOR4BPROC glad_glColor4b; -PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f; -PFNGLCOLOR4FPROC glad_glColor4f; -PFNGLCOLOR4DPROC glad_glColor4d; -PFNGLCOLOR4IPROC glad_glColor4i; -PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv; -PFNGLVERTEX2DVPROC glad_glVertex2dv; -PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv; -PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -PFNGLFINISHPROC glad_glFinish; -PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -PFNGLDELETESHADERPROC glad_glDeleteShader; -PFNGLDRAWELEMENTSPROC glad_glDrawElements; -PFNGLRASTERPOS2SPROC glad_glRasterPos2s; -PFNGLGETMAPDVPROC glad_glGetMapdv; -PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -PFNGLMATERIALFVPROC glad_glMaterialfv; -PFNGLVIEWPORTPROC glad_glViewport; -PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -PFNGLINDEXDVPROC glad_glIndexdv; -PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv; -PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -PFNGLCLEARDEPTHPROC glad_glClearDepth; -PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; -PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -PFNGLTEXBUFFERPROC glad_glTexBuffer; -PFNGLPOPNAMEPROC glad_glPopName; -PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -PFNGLPIXELSTOREFPROC glad_glPixelStoref; -PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; -PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv; -PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv; -PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -PFNGLRECTIPROC glad_glRecti; -PFNGLCOLOR4UBPROC glad_glColor4ub; -PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf; -PFNGLRECTFPROC glad_glRectf; -PFNGLRECTDPROC glad_glRectd; -PFNGLNORMAL3SVPROC glad_glNormal3sv; -PFNGLNEWLISTPROC glad_glNewList; -PFNGLCOLOR4USPROC glad_glColor4us; -PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -PFNGLLINKPROGRAMPROC glad_glLinkProgram; -PFNGLHINTPROC glad_glHint; -PFNGLRECTSPROC glad_glRects; -PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv; -PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv; -PFNGLGETSTRINGPROC glad_glGetString; -PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -PFNGLEDGEFLAGVPROC glad_glEdgeFlagv; -PFNGLDETACHSHADERPROC glad_glDetachShader; -PFNGLSCALEFPROC glad_glScalef; -PFNGLENDQUERYPROC glad_glEndQuery; -PFNGLSCALEDPROC glad_glScaled; -PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer; -PFNGLCOPYPIXELSPROC glad_glCopyPixels; -PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -PFNGLPOPATTRIBPROC glad_glPopAttrib; -PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -PFNGLINITNAMESPROC glad_glInitNames; -PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -PFNGLCOLOR3DVPROC glad_glColor3dv; -PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -PFNGLWAITSYNCPROC glad_glWaitSync; -PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -PFNGLCOLORMATERIALPROC glad_glColorMaterial; -PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -PFNGLUNIFORM1FPROC glad_glUniform1f; -PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -PFNGLRENDERMODEPROC glad_glRenderMode; -PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv; -PFNGLUNIFORM1IPROC glad_glUniform1i; -PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -PFNGLUNIFORM3IPROC glad_glUniform3i; -PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi; -PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -PFNGLDISABLEPROC glad_glDisable; -PFNGLLOGICOPPROC glad_glLogicOp; -PFNGLEVALPOINT2PROC glad_glEvalPoint2; -PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf; -PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i; -PFNGLUNIFORM4UIPROC glad_glUniform4ui; -PFNGLCOLOR3FPROC glad_glColor3f; -PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; -PFNGLRECTFVPROC glad_glRectfv; -PFNGLCULLFACEPROC glad_glCullFace; -PFNGLGETLIGHTFVPROC glad_glGetLightfv; -PFNGLCOLOR3DPROC glad_glColor3d; -PFNGLTEXGENDPROC glad_glTexGend; -PFNGLTEXGENIPROC glad_glTexGeni; -PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s; -PFNGLGETSTRINGIPROC glad_glGetStringi; -PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i; -PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f; -PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d; -PFNGLATTACHSHADERPROC glad_glAttachShader; -PFNGLFOGCOORDDVPROC glad_glFogCoorddv; -PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -PFNGLGETTEXGENFVPROC glad_glGetTexGenfv; -PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer; -PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -PFNGLTEXGENIVPROC glad_glTexGeniv; -PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv; -PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv; -PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; -PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us; -PFNGLNORMALP3UIPROC glad_glNormalP3ui; -PFNGLTEXENVFVPROC glad_glTexEnvfv; -PFNGLREADBUFFERPROC glad_glReadBuffer; -PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv; -PFNGLLIGHTMODELFVPROC glad_glLightModelfv; -PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -PFNGLDELETELISTSPROC glad_glDeleteLists; -PFNGLGETCLIPPLANEPROC glad_glGetClipPlane; -PFNGLVERTEX4DVPROC glad_glVertex4dv; -PFNGLTEXCOORD2DPROC glad_glTexCoord2d; -PFNGLPOPMATRIXPROC glad_glPopMatrix; -PFNGLTEXCOORD2FPROC glad_glTexCoord2f; -PFNGLCOLOR4IVPROC glad_glColor4iv; -PFNGLINDEXUBVPROC glad_glIndexubv; -PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -PFNGLTEXCOORD2IPROC glad_glTexCoord2i; -PFNGLRASTERPOS4DPROC glad_glRasterPos4d; -PFNGLRASTERPOS4FPROC glad_glRasterPos4f; -PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -PFNGLTEXCOORD2SPROC glad_glTexCoord2s; -PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -PFNGLVERTEX3FVPROC glad_glVertex3fv; -PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv; -PFNGLMATERIALIVPROC glad_glMaterialiv; -PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -PFNGLISPROGRAMPROC glad_glIsProgram; -PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -PFNGLVERTEX4SPROC glad_glVertex4s; -PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -PFNGLNORMAL3DVPROC glad_glNormal3dv; -PFNGLUNIFORM4IPROC glad_glUniform4i; -PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -PFNGLROTATEDPROC glad_glRotated; -PFNGLROTATEFPROC glad_glRotatef; -PFNGLVERTEX4IPROC glad_glVertex4i; -PFNGLREADPIXELSPROC glad_glReadPixels; -PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -PFNGLLOADNAMEPROC glad_glLoadName; -PFNGLUNIFORM4FPROC glad_glUniform4f; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -PFNGLSHADEMODELPROC glad_glShadeModel; -PFNGLMAPGRID1DPROC glad_glMapGrid1d; -PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -PFNGLMAPGRID1FPROC glad_glMapGrid1f; -PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; -PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer; -PFNGLALPHAFUNCPROC glad_glAlphaFunc; -PFNGLUNIFORM1IVPROC glad_glUniform1iv; -PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv; -PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -PFNGLSTENCILFUNCPROC glad_glStencilFunc; -PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv; -PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -PFNGLCOLOR4UIVPROC glad_glColor4uiv; -PFNGLRECTIVPROC glad_glRectiv; -PFNGLCOLORP4UIPROC glad_glColorP4ui; -PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv; -PFNGLEVALMESH2PROC glad_glEvalMesh2; -PFNGLEVALMESH1PROC glad_glEvalMesh1; -PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; -PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv; -PFNGLCOLOR4UBVPROC glad_glColor4ubv; -PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd; -PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf; -PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv; -PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -PFNGLTEXENVIVPROC glad_glTexEnviv; -PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -PFNGLGENBUFFERSPROC glad_glGenBuffers; -PFNGLSELECTBUFFERPROC glad_glSelectBuffer; -PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -PFNGLPUSHATTRIBPROC glad_glPushAttrib; -PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -PFNGLBLENDFUNCPROC glad_glBlendFunc; -PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -PFNGLLIGHTIVPROC glad_glLightiv; -PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -PFNGLTEXGENFVPROC glad_glTexGenfv; -PFNGLENDPROC glad_glEnd; -PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -PFNGLSCISSORPROC glad_glScissor; -PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -PFNGLCLIPPLANEPROC glad_glClipPlane; -PFNGLPUSHNAMEPROC glad_glPushName; -PFNGLTEXGENDVPROC glad_glTexGendv; -PFNGLINDEXUBPROC glad_glIndexub; -PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv; -PFNGLRASTERPOS4IPROC glad_glRasterPos4i; -PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd; -PFNGLCLEARCOLORPROC glad_glClearColor; -PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -PFNGLNORMAL3SPROC glad_glNormal3s; -PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -PFNGLBLENDCOLORPROC glad_glBlendColor; -PFNGLWINDOWPOS3DPROC glad_glWindowPos3d; -PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -PFNGLUNIFORM3UIPROC glad_glUniform3ui; -PFNGLCOLOR4DVPROC glad_glColor4dv; -PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -PFNGLUNIFORM2FVPROC glad_glUniform2fv; -PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub; -PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui; -PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv; -PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -PFNGLNORMAL3IVPROC glad_glNormal3iv; -PFNGLWINDOWPOS3SPROC glad_glWindowPos3s; -PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -PFNGLWINDOWPOS3IPROC glad_glWindowPos3i; -PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s; -PFNGLWINDOWPOS3FPROC glad_glWindowPos3f; -PFNGLCOLOR3USPROC glad_glColor3us; -PFNGLCOLOR3UIVPROC glad_glColor3uiv; -PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -PFNGLGETLIGHTIVPROC glad_glGetLightiv; -PFNGLDEPTHFUNCPROC glad_glDepthFunc; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -PFNGLLISTBASEPROC glad_glListBase; -PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; -PFNGLCOLOR3UBPROC glad_glColor3ub; -PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d; -PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -PFNGLCOLOR3UIPROC glad_glColor3ui; -PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i; -PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple; -PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv; -PFNGLCOLORMASKPROC glad_glColorMask; -PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -PFNGLRASTERPOS4SPROC glad_glRasterPos4s; -PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv; -PFNGLCOLOR4SVPROC glad_glColor4sv; -PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib; -PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -PFNGLFOGFPROC glad_glFogf; -PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -PFNGLISSAMPLERPROC glad_glIsSampler; -PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -PFNGLCOLOR3IVPROC glad_glColor3iv; -PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -PFNGLTEXCOORD1IPROC glad_glTexCoord1i; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -PFNGLTEXCOORD1DPROC glad_glTexCoord1d; -PFNGLTEXCOORD1FPROC glad_glTexCoord1f; -PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; -PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv; -PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -PFNGLTEXCOORD1SPROC glad_glTexCoord1s; -PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -PFNGLGENLISTSPROC glad_glGenLists; -PFNGLCOLOR3BVPROC glad_glColor3bv; -PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -PFNGLGETTEXGENDVPROC glad_glGetTexGendv; -PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -PFNGLENDLISTPROC glad_glEndList; -PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -PFNGLUNIFORM2UIPROC glad_glUniform2ui; -PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -PFNGLCOLOR3USVPROC glad_glColor3usv; -PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv; -PFNGLDISABLEIPROC glad_glDisablei; -PFNGLINDEXMASKPROC glad_glIndexMask; -PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib; -PFNGLSHADERSOURCEPROC glad_glShaderSource; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -PFNGLCLEARACCUMPROC glad_glClearAccum; -PFNGLGETSYNCIVPROC glad_glGetSynciv; -PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -PFNGLUNIFORM2FPROC glad_glUniform2f; -PFNGLBEGINQUERYPROC glad_glBeginQuery; -PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -PFNGLBINDBUFFERPROC glad_glBindBuffer; -PFNGLMAP2DPROC glad_glMap2d; -PFNGLMAP2FPROC glad_glMap2f; -PFNGLVERTEX4DPROC glad_glVertex4d; -PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv; -PFNGLBUFFERDATAPROC glad_glBufferData; -PFNGLEVALPOINT1PROC glad_glEvalPoint1; -PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv; -PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -PFNGLGETERRORPROC glad_glGetError; -PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; -PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -PFNGLGETFLOATVPROC glad_glGetFloatv; -PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; -PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv; -PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -PFNGLEVALCOORD1DPROC glad_glEvalCoord1d; -PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -PFNGLEVALCOORD1FPROC glad_glEvalCoord1f; -PFNGLPIXELMAPFVPROC glad_glPixelMapfv; -PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv; -PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -PFNGLGETINTEGERVPROC glad_glGetIntegerv; -PFNGLACCUMPROC glad_glAccum; -PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv; -PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv; -PFNGLISQUERYPROC glad_glIsQuery; -PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv; -PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -PFNGLSTENCILMASKPROC glad_glStencilMask; -PFNGLDRAWPIXELSPROC glad_glDrawPixels; -PFNGLMULTMATRIXDPROC glad_glMultMatrixd; -PFNGLMULTMATRIXFPROC glad_glMultMatrixf; -PFNGLISTEXTUREPROC glad_glIsTexture; -PFNGLGETMATERIALIVPROC glad_glGetMaterialiv; -PFNGLUNIFORM1FVPROC glad_glUniform1fv; -PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; -PFNGLLOADMATRIXDPROC glad_glLoadMatrixd; -PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -PFNGLVERTEX4FPROC glad_glVertex4f; -PFNGLRECTSVPROC glad_glRectsv; -PFNGLCOLOR4USVPROC glad_glColor4usv; -PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple; -PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays; -PFNGLNORMAL3IPROC glad_glNormal3i; -PFNGLNORMAL3FPROC glad_glNormal3f; -PFNGLNORMAL3DPROC glad_glNormal3d; -PFNGLNORMAL3BPROC glad_glNormal3b; -PFNGLPIXELMAPUSVPROC glad_glPixelMapusv; -PFNGLGETTEXGENIVPROC glad_glGetTexGeniv; -PFNGLARRAYELEMENTPROC glad_glArrayElement; -PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -PFNGLDEPTHMASKPROC glad_glDepthMask; -PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -PFNGLCOLOR3FVPROC glad_glColor3fv; -PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -PFNGLUNIFORM4FVPROC glad_glUniform4fv; -PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -PFNGLCOLORPOINTERPROC glad_glColorPointer; -PFNGLFRONTFACEPROC glad_glFrontFace; -PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -int GLAD_GL_ARB_framebuffer_object; -int GLAD_GL_EXT_framebuffer_object; -int GLAD_GL_ARB_debug_output; -PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; -PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; -PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; -PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; -PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; -PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; -PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; -PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; -PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; -PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; -PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; -PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; -PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; -PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; -PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; -PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; -PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; +int GLAD_GL_VERSION_1_0 = 0; +int GLAD_GL_VERSION_1_1 = 0; +int GLAD_GL_VERSION_1_2 = 0; +int GLAD_GL_VERSION_1_3 = 0; +int GLAD_GL_VERSION_1_4 = 0; +int GLAD_GL_VERSION_1_5 = 0; +int GLAD_GL_VERSION_2_0 = 0; +int GLAD_GL_VERSION_2_1 = 0; +int GLAD_GL_VERSION_3_0 = 0; +int GLAD_GL_VERSION_3_1 = 0; +int GLAD_GL_VERSION_3_2 = 0; +int GLAD_GL_VERSION_3_3 = 0; +PFNGLACCUMPROC glad_glAccum = NULL; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; +PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL; +PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident = NULL; +PFNGLARRAYELEMENTPROC glad_glArrayElement = NULL; +PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; +PFNGLBEGINPROC glad_glBegin = NULL; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; +PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; +PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; +PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; +PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; +PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; +PFNGLBITMAPPROC glad_glBitmap = NULL; +PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; +PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; +PFNGLBUFFERDATAPROC glad_glBufferData = NULL; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; +PFNGLCALLLISTPROC glad_glCallList = NULL; +PFNGLCALLLISTSPROC glad_glCallLists = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; +PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; +PFNGLCLEARPROC glad_glClear = NULL; +PFNGLCLEARACCUMPROC glad_glClearAccum = NULL; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; +PFNGLCLEARCOLORPROC glad_glClearColor = NULL; +PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; +PFNGLCLEARINDEXPROC glad_glClearIndex = NULL; +PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; +PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL; +PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; +PFNGLCLIPPLANEPROC glad_glClipPlane = NULL; +PFNGLCOLOR3BPROC glad_glColor3b = NULL; +PFNGLCOLOR3BVPROC glad_glColor3bv = NULL; +PFNGLCOLOR3DPROC glad_glColor3d = NULL; +PFNGLCOLOR3DVPROC glad_glColor3dv = NULL; +PFNGLCOLOR3FPROC glad_glColor3f = NULL; +PFNGLCOLOR3FVPROC glad_glColor3fv = NULL; +PFNGLCOLOR3IPROC glad_glColor3i = NULL; +PFNGLCOLOR3IVPROC glad_glColor3iv = NULL; +PFNGLCOLOR3SPROC glad_glColor3s = NULL; +PFNGLCOLOR3SVPROC glad_glColor3sv = NULL; +PFNGLCOLOR3UBPROC glad_glColor3ub = NULL; +PFNGLCOLOR3UBVPROC glad_glColor3ubv = NULL; +PFNGLCOLOR3UIPROC glad_glColor3ui = NULL; +PFNGLCOLOR3UIVPROC glad_glColor3uiv = NULL; +PFNGLCOLOR3USPROC glad_glColor3us = NULL; +PFNGLCOLOR3USVPROC glad_glColor3usv = NULL; +PFNGLCOLOR4BPROC glad_glColor4b = NULL; +PFNGLCOLOR4BVPROC glad_glColor4bv = NULL; +PFNGLCOLOR4DPROC glad_glColor4d = NULL; +PFNGLCOLOR4DVPROC glad_glColor4dv = NULL; +PFNGLCOLOR4FPROC glad_glColor4f = NULL; +PFNGLCOLOR4FVPROC glad_glColor4fv = NULL; +PFNGLCOLOR4IPROC glad_glColor4i = NULL; +PFNGLCOLOR4IVPROC glad_glColor4iv = NULL; +PFNGLCOLOR4SPROC glad_glColor4s = NULL; +PFNGLCOLOR4SVPROC glad_glColor4sv = NULL; +PFNGLCOLOR4UBPROC glad_glColor4ub = NULL; +PFNGLCOLOR4UBVPROC glad_glColor4ubv = NULL; +PFNGLCOLOR4UIPROC glad_glColor4ui = NULL; +PFNGLCOLOR4UIVPROC glad_glColor4uiv = NULL; +PFNGLCOLOR4USPROC glad_glColor4us = NULL; +PFNGLCOLOR4USVPROC glad_glColor4usv = NULL; +PFNGLCOLORMASKPROC glad_glColorMask = NULL; +PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; +PFNGLCOLORMATERIALPROC glad_glColorMaterial = NULL; +PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; +PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; +PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; +PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; +PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL; +PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; +PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; +PFNGLCOPYPIXELSPROC glad_glCopyPixels = NULL; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; +PFNGLCREATESHADERPROC glad_glCreateShader = NULL; +PFNGLCULLFACEPROC glad_glCullFace = NULL; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; +PFNGLDELETELISTSPROC glad_glDeleteLists = NULL; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; +PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; +PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; +PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; +PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; +PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; +PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; +PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; +PFNGLDISABLEPROC glad_glDisable = NULL; +PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; +PFNGLDISABLEIPROC glad_glDisablei = NULL; +PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; +PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; +PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; +PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; +PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; +PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; +PFNGLDRAWPIXELSPROC glad_glDrawPixels = NULL; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; +PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; +PFNGLEDGEFLAGPROC glad_glEdgeFlag = NULL; +PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer = NULL; +PFNGLEDGEFLAGVPROC glad_glEdgeFlagv = NULL; +PFNGLENABLEPROC glad_glEnable = NULL; +PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; +PFNGLENABLEIPROC glad_glEnablei = NULL; +PFNGLENDPROC glad_glEnd = NULL; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; +PFNGLENDLISTPROC glad_glEndList = NULL; +PFNGLENDQUERYPROC glad_glEndQuery = NULL; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; +PFNGLEVALCOORD1DPROC glad_glEvalCoord1d = NULL; +PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv = NULL; +PFNGLEVALCOORD1FPROC glad_glEvalCoord1f = NULL; +PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv = NULL; +PFNGLEVALCOORD2DPROC glad_glEvalCoord2d = NULL; +PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv = NULL; +PFNGLEVALCOORD2FPROC glad_glEvalCoord2f = NULL; +PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv = NULL; +PFNGLEVALMESH1PROC glad_glEvalMesh1 = NULL; +PFNGLEVALMESH2PROC glad_glEvalMesh2 = NULL; +PFNGLEVALPOINT1PROC glad_glEvalPoint1 = NULL; +PFNGLEVALPOINT2PROC glad_glEvalPoint2 = NULL; +PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer = NULL; +PFNGLFENCESYNCPROC glad_glFenceSync = NULL; +PFNGLFINISHPROC glad_glFinish = NULL; +PFNGLFLUSHPROC glad_glFlush = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; +PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer = NULL; +PFNGLFOGCOORDDPROC glad_glFogCoordd = NULL; +PFNGLFOGCOORDDVPROC glad_glFogCoorddv = NULL; +PFNGLFOGCOORDFPROC glad_glFogCoordf = NULL; +PFNGLFOGCOORDFVPROC glad_glFogCoordfv = NULL; +PFNGLFOGFPROC glad_glFogf = NULL; +PFNGLFOGFVPROC glad_glFogfv = NULL; +PFNGLFOGIPROC glad_glFogi = NULL; +PFNGLFOGIVPROC glad_glFogiv = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; +PFNGLFRONTFACEPROC glad_glFrontFace = NULL; +PFNGLFRUSTUMPROC glad_glFrustum = NULL; +PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; +PFNGLGENLISTSPROC glad_glGenLists = NULL; +PFNGLGENQUERIESPROC glad_glGenQueries = NULL; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; +PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; +PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; +PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; +PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; +PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; +PFNGLGETCLIPPLANEPROC glad_glGetClipPlane = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; +PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; +PFNGLGETERRORPROC glad_glGetError = NULL; +PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; +PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; +PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; +PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; +PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL; +PFNGLGETLIGHTIVPROC glad_glGetLightiv = NULL; +PFNGLGETMAPDVPROC glad_glGetMapdv = NULL; +PFNGLGETMAPFVPROC glad_glGetMapfv = NULL; +PFNGLGETMAPIVPROC glad_glGetMapiv = NULL; +PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL; +PFNGLGETMATERIALIVPROC glad_glGetMaterialiv = NULL; +PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; +PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv = NULL; +PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv = NULL; +PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv = NULL; +PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; +PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple = NULL; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; +PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; +PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; +PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; +PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; +PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; +PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; +PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; +PFNGLGETSTRINGPROC glad_glGetString = NULL; +PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; +PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; +PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL; +PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL; +PFNGLGETTEXGENDVPROC glad_glGetTexGendv = NULL; +PFNGLGETTEXGENFVPROC glad_glGetTexGenfv = NULL; +PFNGLGETTEXGENIVPROC glad_glGetTexGeniv = NULL; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; +PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; +PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; +PFNGLHINTPROC glad_glHint = NULL; +PFNGLINDEXMASKPROC glad_glIndexMask = NULL; +PFNGLINDEXPOINTERPROC glad_glIndexPointer = NULL; +PFNGLINDEXDPROC glad_glIndexd = NULL; +PFNGLINDEXDVPROC glad_glIndexdv = NULL; +PFNGLINDEXFPROC glad_glIndexf = NULL; +PFNGLINDEXFVPROC glad_glIndexfv = NULL; +PFNGLINDEXIPROC glad_glIndexi = NULL; +PFNGLINDEXIVPROC glad_glIndexiv = NULL; +PFNGLINDEXSPROC glad_glIndexs = NULL; +PFNGLINDEXSVPROC glad_glIndexsv = NULL; +PFNGLINDEXUBPROC glad_glIndexub = NULL; +PFNGLINDEXUBVPROC glad_glIndexubv = NULL; +PFNGLINITNAMESPROC glad_glInitNames = NULL; +PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays = NULL; +PFNGLISBUFFERPROC glad_glIsBuffer = NULL; +PFNGLISENABLEDPROC glad_glIsEnabled = NULL; +PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; +PFNGLISLISTPROC glad_glIsList = NULL; +PFNGLISPROGRAMPROC glad_glIsProgram = NULL; +PFNGLISQUERYPROC glad_glIsQuery = NULL; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; +PFNGLISSAMPLERPROC glad_glIsSampler = NULL; +PFNGLISSHADERPROC glad_glIsShader = NULL; +PFNGLISSYNCPROC glad_glIsSync = NULL; +PFNGLISTEXTUREPROC glad_glIsTexture = NULL; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; +PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL; +PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL; +PFNGLLIGHTMODELIPROC glad_glLightModeli = NULL; +PFNGLLIGHTMODELIVPROC glad_glLightModeliv = NULL; +PFNGLLIGHTFPROC glad_glLightf = NULL; +PFNGLLIGHTFVPROC glad_glLightfv = NULL; +PFNGLLIGHTIPROC glad_glLighti = NULL; +PFNGLLIGHTIVPROC glad_glLightiv = NULL; +PFNGLLINESTIPPLEPROC glad_glLineStipple = NULL; +PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; +PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; +PFNGLLISTBASEPROC glad_glListBase = NULL; +PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL; +PFNGLLOADMATRIXDPROC glad_glLoadMatrixd = NULL; +PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL; +PFNGLLOADNAMEPROC glad_glLoadName = NULL; +PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd = NULL; +PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf = NULL; +PFNGLLOGICOPPROC glad_glLogicOp = NULL; +PFNGLMAP1DPROC glad_glMap1d = NULL; +PFNGLMAP1FPROC glad_glMap1f = NULL; +PFNGLMAP2DPROC glad_glMap2d = NULL; +PFNGLMAP2FPROC glad_glMap2f = NULL; +PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; +PFNGLMAPGRID1DPROC glad_glMapGrid1d = NULL; +PFNGLMAPGRID1FPROC glad_glMapGrid1f = NULL; +PFNGLMAPGRID2DPROC glad_glMapGrid2d = NULL; +PFNGLMAPGRID2FPROC glad_glMapGrid2f = NULL; +PFNGLMATERIALFPROC glad_glMaterialf = NULL; +PFNGLMATERIALFVPROC glad_glMaterialfv = NULL; +PFNGLMATERIALIPROC glad_glMateriali = NULL; +PFNGLMATERIALIVPROC glad_glMaterialiv = NULL; +PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL; +PFNGLMULTMATRIXDPROC glad_glMultMatrixd = NULL; +PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL; +PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd = NULL; +PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf = NULL; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; +PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; +PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d = NULL; +PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv = NULL; +PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f = NULL; +PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv = NULL; +PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i = NULL; +PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv = NULL; +PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s = NULL; +PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv = NULL; +PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d = NULL; +PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv = NULL; +PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f = NULL; +PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv = NULL; +PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i = NULL; +PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv = NULL; +PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s = NULL; +PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv = NULL; +PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d = NULL; +PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv = NULL; +PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f = NULL; +PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv = NULL; +PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i = NULL; +PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv = NULL; +PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s = NULL; +PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv = NULL; +PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d = NULL; +PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv = NULL; +PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL; +PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv = NULL; +PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i = NULL; +PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv = NULL; +PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s = NULL; +PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv = NULL; +PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; +PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; +PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; +PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; +PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; +PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; +PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; +PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; +PFNGLNEWLISTPROC glad_glNewList = NULL; +PFNGLNORMAL3BPROC glad_glNormal3b = NULL; +PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL; +PFNGLNORMAL3DPROC glad_glNormal3d = NULL; +PFNGLNORMAL3DVPROC glad_glNormal3dv = NULL; +PFNGLNORMAL3FPROC glad_glNormal3f = NULL; +PFNGLNORMAL3FVPROC glad_glNormal3fv = NULL; +PFNGLNORMAL3IPROC glad_glNormal3i = NULL; +PFNGLNORMAL3IVPROC glad_glNormal3iv = NULL; +PFNGLNORMAL3SPROC glad_glNormal3s = NULL; +PFNGLNORMAL3SVPROC glad_glNormal3sv = NULL; +PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; +PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; +PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL; +PFNGLORTHOPROC glad_glOrtho = NULL; +PFNGLPASSTHROUGHPROC glad_glPassThrough = NULL; +PFNGLPIXELMAPFVPROC glad_glPixelMapfv = NULL; +PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv = NULL; +PFNGLPIXELMAPUSVPROC glad_glPixelMapusv = NULL; +PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; +PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; +PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf = NULL; +PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi = NULL; +PFNGLPIXELZOOMPROC glad_glPixelZoom = NULL; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; +PFNGLPOINTSIZEPROC glad_glPointSize = NULL; +PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; +PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple = NULL; +PFNGLPOPATTRIBPROC glad_glPopAttrib = NULL; +PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib = NULL; +PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL; +PFNGLPOPNAMEPROC glad_glPopName = NULL; +PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; +PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures = NULL; +PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; +PFNGLPUSHATTRIBPROC glad_glPushAttrib = NULL; +PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib = NULL; +PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL; +PFNGLPUSHNAMEPROC glad_glPushName = NULL; +PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; +PFNGLRASTERPOS2DPROC glad_glRasterPos2d = NULL; +PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv = NULL; +PFNGLRASTERPOS2FPROC glad_glRasterPos2f = NULL; +PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv = NULL; +PFNGLRASTERPOS2IPROC glad_glRasterPos2i = NULL; +PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv = NULL; +PFNGLRASTERPOS2SPROC glad_glRasterPos2s = NULL; +PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv = NULL; +PFNGLRASTERPOS3DPROC glad_glRasterPos3d = NULL; +PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv = NULL; +PFNGLRASTERPOS3FPROC glad_glRasterPos3f = NULL; +PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv = NULL; +PFNGLRASTERPOS3IPROC glad_glRasterPos3i = NULL; +PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv = NULL; +PFNGLRASTERPOS3SPROC glad_glRasterPos3s = NULL; +PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv = NULL; +PFNGLRASTERPOS4DPROC glad_glRasterPos4d = NULL; +PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv = NULL; +PFNGLRASTERPOS4FPROC glad_glRasterPos4f = NULL; +PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv = NULL; +PFNGLRASTERPOS4IPROC glad_glRasterPos4i = NULL; +PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv = NULL; +PFNGLRASTERPOS4SPROC glad_glRasterPos4s = NULL; +PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv = NULL; +PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; +PFNGLREADPIXELSPROC glad_glReadPixels = NULL; +PFNGLRECTDPROC glad_glRectd = NULL; +PFNGLRECTDVPROC glad_glRectdv = NULL; +PFNGLRECTFPROC glad_glRectf = NULL; +PFNGLRECTFVPROC glad_glRectfv = NULL; +PFNGLRECTIPROC glad_glRecti = NULL; +PFNGLRECTIVPROC glad_glRectiv = NULL; +PFNGLRECTSPROC glad_glRects = NULL; +PFNGLRECTSVPROC glad_glRectsv = NULL; +PFNGLRENDERMODEPROC glad_glRenderMode = NULL; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; +PFNGLROTATEDPROC glad_glRotated = NULL; +PFNGLROTATEFPROC glad_glRotatef = NULL; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; +PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; +PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; +PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; +PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; +PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; +PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; +PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; +PFNGLSCALEDPROC glad_glScaled = NULL; +PFNGLSCALEFPROC glad_glScalef = NULL; +PFNGLSCISSORPROC glad_glScissor = NULL; +PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b = NULL; +PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv = NULL; +PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d = NULL; +PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv = NULL; +PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f = NULL; +PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv = NULL; +PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i = NULL; +PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv = NULL; +PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s = NULL; +PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv = NULL; +PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub = NULL; +PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv = NULL; +PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui = NULL; +PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv = NULL; +PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us = NULL; +PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv = NULL; +PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; +PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; +PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer = NULL; +PFNGLSELECTBUFFERPROC glad_glSelectBuffer = NULL; +PFNGLSHADEMODELPROC glad_glShadeModel = NULL; +PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; +PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; +PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; +PFNGLSTENCILOPPROC glad_glStencilOp = NULL; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; +PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; +PFNGLTEXCOORD1DPROC glad_glTexCoord1d = NULL; +PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv = NULL; +PFNGLTEXCOORD1FPROC glad_glTexCoord1f = NULL; +PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv = NULL; +PFNGLTEXCOORD1IPROC glad_glTexCoord1i = NULL; +PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv = NULL; +PFNGLTEXCOORD1SPROC glad_glTexCoord1s = NULL; +PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv = NULL; +PFNGLTEXCOORD2DPROC glad_glTexCoord2d = NULL; +PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv = NULL; +PFNGLTEXCOORD2FPROC glad_glTexCoord2f = NULL; +PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv = NULL; +PFNGLTEXCOORD2IPROC glad_glTexCoord2i = NULL; +PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv = NULL; +PFNGLTEXCOORD2SPROC glad_glTexCoord2s = NULL; +PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv = NULL; +PFNGLTEXCOORD3DPROC glad_glTexCoord3d = NULL; +PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv = NULL; +PFNGLTEXCOORD3FPROC glad_glTexCoord3f = NULL; +PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv = NULL; +PFNGLTEXCOORD3IPROC glad_glTexCoord3i = NULL; +PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv = NULL; +PFNGLTEXCOORD3SPROC glad_glTexCoord3s = NULL; +PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv = NULL; +PFNGLTEXCOORD4DPROC glad_glTexCoord4d = NULL; +PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv = NULL; +PFNGLTEXCOORD4FPROC glad_glTexCoord4f = NULL; +PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv = NULL; +PFNGLTEXCOORD4IPROC glad_glTexCoord4i = NULL; +PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv = NULL; +PFNGLTEXCOORD4SPROC glad_glTexCoord4s = NULL; +PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv = NULL; +PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; +PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; +PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; +PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; +PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; +PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; +PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; +PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; +PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL; +PFNGLTEXENVFPROC glad_glTexEnvf = NULL; +PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL; +PFNGLTEXENVIPROC glad_glTexEnvi = NULL; +PFNGLTEXENVIVPROC glad_glTexEnviv = NULL; +PFNGLTEXGENDPROC glad_glTexGend = NULL; +PFNGLTEXGENDVPROC glad_glTexGendv = NULL; +PFNGLTEXGENFPROC glad_glTexGenf = NULL; +PFNGLTEXGENFVPROC glad_glTexGenfv = NULL; +PFNGLTEXGENIPROC glad_glTexGeni = NULL; +PFNGLTEXGENIVPROC glad_glTexGeniv = NULL; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; +PFNGLTRANSLATEDPROC glad_glTranslated = NULL; +PFNGLTRANSLATEFPROC glad_glTranslatef = NULL; +PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; +PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; +PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; +PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; +PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; +PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; +PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; +PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; +PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; +PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; +PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; +PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; +PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; +PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; +PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; +PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; +PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; +PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; +PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; +PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; +PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; +PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; +PFNGLVERTEX2DPROC glad_glVertex2d = NULL; +PFNGLVERTEX2DVPROC glad_glVertex2dv = NULL; +PFNGLVERTEX2FPROC glad_glVertex2f = NULL; +PFNGLVERTEX2FVPROC glad_glVertex2fv = NULL; +PFNGLVERTEX2IPROC glad_glVertex2i = NULL; +PFNGLVERTEX2IVPROC glad_glVertex2iv = NULL; +PFNGLVERTEX2SPROC glad_glVertex2s = NULL; +PFNGLVERTEX2SVPROC glad_glVertex2sv = NULL; +PFNGLVERTEX3DPROC glad_glVertex3d = NULL; +PFNGLVERTEX3DVPROC glad_glVertex3dv = NULL; +PFNGLVERTEX3FPROC glad_glVertex3f = NULL; +PFNGLVERTEX3FVPROC glad_glVertex3fv = NULL; +PFNGLVERTEX3IPROC glad_glVertex3i = NULL; +PFNGLVERTEX3IVPROC glad_glVertex3iv = NULL; +PFNGLVERTEX3SPROC glad_glVertex3s = NULL; +PFNGLVERTEX3SVPROC glad_glVertex3sv = NULL; +PFNGLVERTEX4DPROC glad_glVertex4d = NULL; +PFNGLVERTEX4DVPROC glad_glVertex4dv = NULL; +PFNGLVERTEX4FPROC glad_glVertex4f = NULL; +PFNGLVERTEX4FVPROC glad_glVertex4fv = NULL; +PFNGLVERTEX4IPROC glad_glVertex4i = NULL; +PFNGLVERTEX4IVPROC glad_glVertex4iv = NULL; +PFNGLVERTEX4SPROC glad_glVertex4s = NULL; +PFNGLVERTEX4SVPROC glad_glVertex4sv = NULL; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; +PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; +PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; +PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; +PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; +PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; +PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; +PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; +PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; +PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; +PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; +PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; +PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; +PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; +PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; +PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL; +PFNGLVIEWPORTPROC glad_glViewport = NULL; +PFNGLWAITSYNCPROC glad_glWaitSync = NULL; +PFNGLWINDOWPOS2DPROC glad_glWindowPos2d = NULL; +PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv = NULL; +PFNGLWINDOWPOS2FPROC glad_glWindowPos2f = NULL; +PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv = NULL; +PFNGLWINDOWPOS2IPROC glad_glWindowPos2i = NULL; +PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv = NULL; +PFNGLWINDOWPOS2SPROC glad_glWindowPos2s = NULL; +PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv = NULL; +PFNGLWINDOWPOS3DPROC glad_glWindowPos3d = NULL; +PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv = NULL; +PFNGLWINDOWPOS3FPROC glad_glWindowPos3f = NULL; +PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv = NULL; +PFNGLWINDOWPOS3IPROC glad_glWindowPos3i = NULL; +PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv = NULL; +PFNGLWINDOWPOS3SPROC glad_glWindowPos3s = NULL; +PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv = NULL; +int GLAD_GL_ARB_debug_output = 0; +int GLAD_GL_ARB_framebuffer_object = 0; +int GLAD_GL_EXT_framebuffer_object = 0; +PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB = NULL; +PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB = NULL; +PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB = NULL; +PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB = NULL; +PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT = NULL; +PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT = NULL; +PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT = NULL; +PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT = NULL; +PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT = NULL; +PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT = NULL; +PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT = NULL; +PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT = NULL; +PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT = NULL; +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT = NULL; +PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT = NULL; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); diff --git a/thirdparty/glad/glad/glad.h b/thirdparty/glad/glad/glad.h index 4d92d33b37..52b05e0ae6 100644 --- a/thirdparty/glad/glad/glad.h +++ b/thirdparty/glad/glad/glad.h @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.25 on Sat Jul 28 10:59:43 2018. + OpenGL loader generated by glad 0.1.28 on Thu Nov 22 16:50:04 2018. Language/Generator: C/C++ Specification: gl @@ -13,11 +13,12 @@ Loader: True Local files: False Omit khrplatform: False + Reproducible: False Commandline: --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="GL_ARB_debug_output,GL_ARB_framebuffer_object,GL_EXT_framebuffer_object" Online: - http://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_debug_output&extensions=GL_ARB_framebuffer_object&extensions=GL_EXT_framebuffer_object + https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_debug_output&extensions=GL_ARB_framebuffer_object&extensions=GL_EXT_framebuffer_object */ @@ -46,6 +47,10 @@ #define APIENTRYP APIENTRY * #endif +#ifndef GLAPIENTRY +#define GLAPIENTRY APIENTRY +#endif + #ifdef __cplusplus extern "C" { #endif @@ -89,59 +94,21 @@ GLAPI int gladLoadGL(void); GLAPI int gladLoadGLLoader(GLADloadproc); -#include <stddef.h> #include <KHR/khrplatform.h> -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include <inttypes.h> -#elif defined(__sun__) || defined(__digital__) -#include <inttypes.h> -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include <inttypes.h> -#elif defined(__SCO__) || defined(__USLC__) -#include <stdint.h> -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include <stdint.h> -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include <inttypes.h> -#endif -#endif typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; -typedef signed char GLbyte; -typedef short GLshort; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; typedef int GLint; -typedef int GLclampx; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; typedef int GLsizei; -typedef float GLfloat; -typedef float GLclampf; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; @@ -153,25 +120,17 @@ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif -typedef unsigned short GLhalfARB; -typedef unsigned short GLhalf; -typedef GLint GLfixed; +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; typedef khronos_intptr_t GLintptr; +typedef khronos_intptr_t GLintptrARB; typedef khronos_ssize_t GLsizeiptr; -typedef int64_t GLint64; -typedef uint64_t GLuint64; -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) -typedef long GLintptrARB; -#else -typedef ptrdiff_t GLintptrARB; -#endif -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) -typedef long GLsizeiptrARB; -#else -typedef ptrdiff_t GLsizeiptrARB; -#endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; +typedef khronos_ssize_t GLsizeiptrARB; +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; diff --git a/thirdparty/libwebsockets/core/context.c b/thirdparty/libwebsockets/core/context.c index db9151b95f..7be004df33 100644 --- a/thirdparty/libwebsockets/core/context.c +++ b/thirdparty/libwebsockets/core/context.c @@ -134,7 +134,7 @@ lws_protocol_vh_priv_get(struct lws_vhost *vhost, { int n = 0; - if (!vhost || !vhost->protocol_vh_privs) + if (!vhost || !vhost->protocol_vh_privs || !prot) return NULL; while (n < vhost->count_protocols && &vhost->protocols[n] != prot) @@ -808,7 +808,7 @@ lws_create_vhost(struct lws_context *context, #ifdef LWS_WITH_ACCESS_LOG if (info->log_filepath) { - vh->log_fd = open(info->log_filepath, + vh->log_fd = lws_open(info->log_filepath, O_CREAT | O_APPEND | O_RDWR, 0600); if (vh->log_fd == (int)LWS_INVALID_FILE) { lwsl_err("unable to open log filepath %s\n", @@ -936,24 +936,29 @@ lws_create_event_pipes(struct lws_context *context) wsi->tsi = n; wsi->vhost = NULL; wsi->event_pipe = 1; + wsi->desc.sockfd = LWS_SOCK_INVALID; + context->pt[n].pipe_wsi = wsi; + context->count_wsi_allocated++; - if (lws_plat_pipe_create(wsi)) { - lws_free(wsi); + if (lws_plat_pipe_create(wsi)) + /* + * platform code returns 0 if it actually created pipes + * and initialized pt->dummy_pipe_fds[]. If it used + * some other mechanism outside of signaling in the + * normal event loop, we skip treating the pipe as + * related to dummy_pipe_fds[], adding it to the fds, + * etc. + */ continue; - } + wsi->desc.sockfd = context->pt[n].dummy_pipe_fds[0]; lwsl_debug("event pipe fd %d\n", wsi->desc.sockfd); - context->pt[n].pipe_wsi = wsi; - if (context->event_loop_ops->accept) context->event_loop_ops->accept(wsi); if (__insert_wsi_socket_into_fds(context, wsi)) return 1; - - //lws_change_pollfd(context->pt[n].pipe_wsi, 0, LWS_POLLIN); - context->count_wsi_allocated++; } return 0; diff --git a/thirdparty/libwebsockets/core/libwebsockets.c b/thirdparty/libwebsockets/core/libwebsockets.c index 0da02b17e4..58f00226f6 100644 --- a/thirdparty/libwebsockets/core/libwebsockets.c +++ b/thirdparty/libwebsockets/core/libwebsockets.c @@ -28,7 +28,7 @@ #ifdef LWS_WITH_IPV6 #if defined(WIN32) || defined(_WIN32) #include <wincrypt.h> -#include <Iphlpapi.h> +#include <iphlpapi.h> #else #include <net/if.h> #endif @@ -58,6 +58,28 @@ static const char * const log_level_names[] = { }; #endif +int lws_open(const char *__file, int __oflag, ...) +{ + va_list ap; + int n; + + va_start(ap, __oflag); + if (((__oflag & O_CREAT) == O_CREAT) +#if defined(O_TMPFILE) + || ((__oflag & O_TMPFILE) == O_TMPFILE) +#endif + ) + /* last arg is really a mode_t. But windows... */ + n = open(__file, __oflag, va_arg(ap, uint32_t)); + else + n = open(__file, __oflag); + va_end(ap); + + lws_plat_apply_FD_CLOEXEC(n); + + return n; +} + #if defined (_DEBUG) void lwsi_set_role(struct lws *wsi, lws_wsi_state_t role) { @@ -826,7 +848,15 @@ just_kill_connection: if (!wsi->protocol) pro = &wsi->vhost->protocols[0]; - pro->callback(wsi, + if (!wsi->upgraded_to_http2 || !lwsi_role_client(wsi)) + /* + * The network wsi for a client h2 connection shouldn't + * call back for its role: the child stream connections + * own the role. Otherwise h2 will call back closed + * one too many times as the children do it and then + * the closing network stream. + */ + pro->callback(wsi, wsi->role_ops->close_cb[lwsi_role_server(wsi)], wsi->user_space, NULL, 0); wsi->told_user_closed = 1; @@ -1453,7 +1483,7 @@ lws_vfs_select_fops(const struct lws_plat_file_ops *fops, const char *vfs_path, pf = fops->next; while (pf) { n = 0; - while (n < (int)ARRAY_SIZE(pf->fi) && pf->fi[n].sig) { + while (n < (int)LWS_ARRAY_SIZE(pf->fi) && pf->fi[n].sig) { if (p >= vfs_path + pf->fi[n].len) if (!strncmp(p - (pf->fi[n].len - 1), pf->fi[n].sig, @@ -1935,9 +1965,9 @@ static const char * const colours[] = { "[32;1m", /* LLL_INFO */ "[34;1m", /* LLL_DEBUG */ "[33;1m", /* LLL_PARSER */ - "[33;1m", /* LLL_HEADER */ - "[33;1m", /* LLL_EXT */ - "[33;1m", /* LLL_CLIENT */ + "[33m", /* LLL_HEADER */ + "[33m", /* LLL_EXT */ + "[33m", /* LLL_CLIENT */ "[33;1m", /* LLL_LATENCY */ "[30;1m", /* LLL_USER */ }; @@ -1946,14 +1976,14 @@ LWS_VISIBLE void lwsl_emit_stderr(int level, const char *line) { char buf[50]; static char tty = 3; - int n, m = ARRAY_SIZE(colours) - 1; + int n, m = LWS_ARRAY_SIZE(colours) - 1; if (!tty) tty = isatty(2) | 2; lwsl_timestamp(level, buf, sizeof(buf)); if (tty == 3) { - n = 1 << (ARRAY_SIZE(colours) - 1); + n = 1 << (LWS_ARRAY_SIZE(colours) - 1); while (n) { if (level & n) break; @@ -2060,7 +2090,9 @@ lwsl_hexdump_level(int hexdump_level, const void *vbuf, size_t len) LWS_VISIBLE void lwsl_hexdump(const void *vbuf, size_t len) { +#if defined(_DEBUG) lwsl_hexdump_level(LLL_DEBUG, vbuf, len); +#endif } LWS_VISIBLE int @@ -2091,6 +2123,8 @@ lws_partial_buffered(struct lws *wsi) LWS_VISIBLE lws_fileofs_t lws_get_peer_write_allowance(struct lws *wsi) { + if (!wsi->role_ops->tx_credit) + return -1; return wsi->role_ops->tx_credit(wsi); } @@ -3364,7 +3398,7 @@ lws_stats_log_dump(struct lws_context *context) wl = pt->http.ah_wait_list; while (wl) { m++; - wl = wl->ah_wait_list; + wl = wl->http.ah_wait_list; } lwsl_notice(" AH wait list count / actual: %d / %d\n", @@ -3401,7 +3435,8 @@ lws_stats_log_dump(struct lws_context *context) strcpy(buf, "unknown"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lwsl_notice(" peer %s: count wsi: %d, count ah: %d\n", - buf, df->count_wsi, df->count_ah); + buf, df->count_wsi, + df->http.count_ah); #else lwsl_notice(" peer %s: count wsi: %d\n", buf, df->count_wsi); diff --git a/thirdparty/libwebsockets/core/output.c b/thirdparty/libwebsockets/core/output.c index e2ff18ef27..11965a06b9 100644 --- a/thirdparty/libwebsockets/core/output.c +++ b/thirdparty/libwebsockets/core/output.c @@ -126,6 +126,18 @@ int lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len) lwsl_info("** %p signalling to close now\n", wsi); return -1; /* retry closing now */ } + +#if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) +#if !defined(LWS_WITHOUT_SERVER) + if (wsi->http.deferred_transaction_completed) { + lwsl_notice("%s: partial completed, doing " + "deferred transaction completed\n", + __func__); + wsi->http.deferred_transaction_completed = 0; + return lws_http_transaction_completed(wsi); + } +#endif +#endif } /* always callback on writeable */ lws_callback_on_writable(wsi); diff --git a/thirdparty/libwebsockets/core/private.h b/thirdparty/libwebsockets/core/private.h index d6b494ac8c..73748b0498 100644 --- a/thirdparty/libwebsockets/core/private.h +++ b/thirdparty/libwebsockets/core/private.h @@ -232,7 +232,7 @@ #endif #else /* not windows */ - static inline int compatible_close(int fd) { return close(fd); } + static LWS_INLINE int compatible_close(int fd) { return close(fd); } #include <sys/stat.h> #include <sys/time.h> @@ -351,7 +351,15 @@ extern "C" { #define LWS_H2_RX_SCRATCH_SIZE 512 - +#if defined(WIN32) || defined(_WIN32) + // Visual studio older than 2015 and WIN_CE has only _stricmp + #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) + #define strcasecmp _stricmp + #elif !defined(__MINGW32__) + #define strcasecmp stricmp + #endif + #define getdtablesize() 30000 +#endif /* * All lws_tls...() functions must return this type, converting the @@ -863,6 +871,7 @@ struct lws_context { unsigned int timeout_secs; unsigned int pt_serv_buf_size; int max_http_header_data; + int max_http_header_pool; int simultaneous_ssl_restriction; int simultaneous_ssl; #if defined(LWS_WITH_PEER_LIMITS) @@ -889,7 +898,6 @@ struct lws_context { volatile int service_tid; int service_tid_detected; - short max_http_header_pool; short count_threads; short plugin_protocol_count; short plugin_extension_count; @@ -1216,7 +1224,7 @@ LWS_EXTERN int lws_rxflow_cache(struct lws *wsi, unsigned char *buf, int n, int len); #ifndef LWS_LATENCY -static inline void +static LWS_INLINE void lws_latency(struct lws_context *context, struct lws *wsi, const char *action, int ret, int completion) { do { @@ -1224,7 +1232,7 @@ lws_latency(struct lws_context *context, struct lws *wsi, const char *action, (void)completion; } while (0); } -static inline void +static LWS_INLINE void lws_latency_pre(struct lws_context *context, struct lws *wsi) { do { (void)context; (void)wsi; } while (0); } @@ -1597,6 +1605,9 @@ void lws_free(void *p); #define lws_free_set_NULL(P) do { lws_realloc(P, 0, "free"); (P) = NULL; } while(0) #endif +char * +lws_strdup(const char *s); + int lws_plat_pipe_create(struct lws *wsi); int @@ -1606,6 +1617,9 @@ lws_plat_pipe_close(struct lws *wsi); int lws_create_event_pipes(struct lws_context *context); +int lws_open(const char *__file, int __oflag, ...); +void lws_plat_apply_FD_CLOEXEC(int n); + const struct lws_plat_file_ops * lws_vfs_select_fops(const struct lws_plat_file_ops *fops, const char *vfs_path, const char **vpath); @@ -1673,10 +1687,10 @@ lws_broadcast(struct lws_context *context, int reason, void *in, size_t len); lws_stats_atomic_max(struct lws_context * context, struct lws_context_per_thread *pt, int index, uint64_t val); #else - static inline uint64_t lws_stats_atomic_bump(struct lws_context * context, + static LWS_INLINE uint64_t lws_stats_atomic_bump(struct lws_context * context, struct lws_context_per_thread *pt, int index, uint64_t bump) { (void)context; (void)pt; (void)index; (void)bump; return 0; } - static inline uint64_t lws_stats_atomic_max(struct lws_context * context, + static LWS_INLINE uint64_t lws_stats_atomic_max(struct lws_context * context, struct lws_context_per_thread *pt, int index, uint64_t val) { (void)context; (void)pt; (void)index; (void)val; return 0; } #endif @@ -1703,6 +1717,11 @@ void lws_peer_dump_from_wsi(struct lws *wsi); #endif +#ifdef LWS_WITH_HTTP_PROXY +hubbub_error +html_parser_cb(const hubbub_token *token, void *pw); +#endif + void __lws_remove_from_timeout_list(struct lws *wsi); diff --git a/thirdparty/libwebsockets/libwebsockets.h b/thirdparty/libwebsockets/libwebsockets.h index 7ae563d582..2c01696404 100644 --- a/thirdparty/libwebsockets/libwebsockets.h +++ b/thirdparty/libwebsockets/libwebsockets.h @@ -66,14 +66,6 @@ typedef unsigned long long lws_intptr_t; #define O_RDONLY _O_RDONLY #endif -// Visual studio older than 2015 and WIN_CE has only _stricmp -#if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) -#define strcasecmp _stricmp -#elif !defined(__MINGW32__) -#define strcasecmp stricmp -#endif -#define getdtablesize() 30000 - #define LWS_INLINE __inline #define LWS_VISIBLE #define LWS_WARN_UNUSED_RESULT @@ -150,6 +142,7 @@ typedef unsigned long long lws_intptr_t; #endif #if defined(__ANDROID__) +#include <netinet/in.h> #include <unistd.h> #define getdtablesize() sysconf(_SC_OPEN_MAX) #endif @@ -164,6 +157,9 @@ typedef unsigned long long lws_intptr_t; #ifdef LWS_HAVE_UV_VERSION_H #include <uv-version.h> #endif +#ifdef LWS_HAVE_NEW_UV_VERSION_H +#include <uv/version.h> +#endif #endif /* LWS_WITH_LIBUV */ #if defined(LWS_WITH_LIBEVENT) #include <event2/event.h> @@ -456,9 +452,6 @@ lwsl_visible(int level); #endif struct lws; -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) -#endif typedef int64_t lws_usec_t; @@ -540,7 +533,7 @@ struct timer_mapping { #define lws_uv_getloop(a, b) (NULL) -static inline void uv_timer_init(void *l, uv_timer_t *t) +static LWS_INLINE void uv_timer_init(void *l, uv_timer_t *t) { (void)l; *t = NULL; @@ -548,7 +541,7 @@ static inline void uv_timer_init(void *l, uv_timer_t *t) extern void esp32_uvtimer_cb(TimerHandle_t t); -static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep) +static LWS_INLINE void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep) { struct timer_mapping *tm = (struct timer_mapping *)malloc(sizeof(*tm)); @@ -563,12 +556,12 @@ static inline void uv_timer_start(uv_timer_t *t, uv_cb_t *cb, int first, int rep xTimerStart(*t, 0); } -static inline void uv_timer_stop(uv_timer_t *t) +static LWS_INLINE void uv_timer_stop(uv_timer_t *t) { xTimerStop(*t, 0); } -static inline void uv_close(uv_handle_t *h, void *v) +static LWS_INLINE void uv_close(uv_handle_t *h, void *v) { free(pvTimerGetTimerID((uv_timer_t)h)); xTimerDelete(*(uv_timer_t *)h, 0); @@ -1757,7 +1750,7 @@ lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result); * If the return is nonzero, it failed and there is nothing needing to be * destroyed. */ -int +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len); @@ -1771,7 +1764,7 @@ lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, * * If the return is nonzero, it failed and needs destroying. */ -int +LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len); /** lws_genhmac_destroy() - copy out the result digest and destroy the ctx @@ -1785,7 +1778,7 @@ lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len); * NULL result is supported so that you can destroy the ctx cleanly on error * conditions, where there is no valid result. */ -int +LWS_VISIBLE LWS_EXTERN int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result); ///@} @@ -2812,7 +2805,7 @@ struct lws_context_creation_info { /**< VHOST: pointer to optional linked list of per-vhost * options made accessible to protocols */ int keepalive_timeout; - /**< VHOST: (default = 0 = 60s) seconds to allow remote + /**< VHOST: (default = 0 = 5s) seconds to allow remote * client to hold on to an idle HTTP/1.1 connection */ const char *log_filepath; /**< VHOST: filepath to append logs to... this is opened before @@ -4943,7 +4936,7 @@ lws_write(struct lws *wsi, unsigned char *buf, size_t len, lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) /* helper for multi-frame ws message flags */ -static inline int +static LWS_INLINE int lws_write_ws_flags(int initial, int is_start, int is_end) { int r; @@ -5621,13 +5614,13 @@ struct lws_dll_lws { /* typed as struct lws * */ #define lws_dll_is_null(___dll) (!(___dll)->prev && !(___dll)->next) -static inline void +static LWS_INLINE void lws_dll_lws_add_front(struct lws_dll_lws *_a, struct lws_dll_lws *_head) { lws_dll_add_front((struct lws_dll *)_a, (struct lws_dll *)_head); } -static inline void +static LWS_INLINE void lws_dll_lws_remove(struct lws_dll_lws *_a) { lws_dll_remove((struct lws_dll *)_a); @@ -7064,9 +7057,6 @@ lws_email_destroy(struct lws_email *email); //@{ struct lejp_ctx; -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(_x) (sizeof(_x) / sizeof(_x[0])) -#endif #define LWS_ARRAY_SIZE(_x) (sizeof(_x) / sizeof(_x[0])) #define LEJP_FLAG_WS_KEEP 64 #define LEJP_FLAG_WS_COMMENTLINE 32 @@ -7219,7 +7209,7 @@ typedef signed char (*lejp_callback)(struct lejp_ctx *ctx, char reason); #endif #ifndef LEJP_STRING_CHUNK /* must be >= 30 to assemble floats */ -#define LEJP_STRING_CHUNK 255 +#define LEJP_STRING_CHUNK 254 #endif enum num_flags { @@ -7253,7 +7243,7 @@ struct lejp_ctx { uint16_t i[LEJP_MAX_INDEX_DEPTH]; /* index array */ uint16_t wild[LEJP_MAX_INDEX_DEPTH]; /* index array */ char path[LEJP_MAX_PATH]; - char buf[LEJP_STRING_CHUNK]; + char buf[LEJP_STRING_CHUNK + 1]; /* int */ diff --git a/thirdparty/libwebsockets/lws_config.h b/thirdparty/libwebsockets/lws_config.h index e5e15cc2fd..86ce9ac38a 100644 --- a/thirdparty/libwebsockets/lws_config.h +++ b/thirdparty/libwebsockets/lws_config.h @@ -174,7 +174,7 @@ #define LWS_HAVE_MALLOC_H #endif -#if !defined(IPHONE_ENABLED) && !defined(OSX_ENABLED) && !defined(__HAIKU__) +#if !defined(__APPLE__) && !defined(__HAIKU__) #define LWS_HAVE_PIPE2 #endif diff --git a/thirdparty/libwebsockets/lws_config_private.h b/thirdparty/libwebsockets/lws_config_private.h index b26d225afa..e531777624 100644 --- a/thirdparty/libwebsockets/lws_config_private.h +++ b/thirdparty/libwebsockets/lws_config_private.h @@ -81,7 +81,7 @@ /* Define to 1 if you have the <sys/prctl.h> header file. */ #define LWS_HAVE_SYS_PRCTL_H -#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__) #undef LWS_HAVE_SYS_PRCTL_H #endif diff --git a/thirdparty/libwebsockets/misc/lejp.c b/thirdparty/libwebsockets/misc/lejp.c index 00d350f81e..99142b9553 100644 --- a/thirdparty/libwebsockets/misc/lejp.c +++ b/thirdparty/libwebsockets/misc/lejp.c @@ -20,6 +20,7 @@ */ #include <libwebsockets.h> +#include "core/private.h" #include <string.h> #include <stdio.h> @@ -30,7 +31,7 @@ * \param callback: your user callback which will received parsed tokens * \param user: optional user data pointer untouched by lejp * \param paths: your array of name elements you are interested in - * \param count_paths: ARRAY_SIZE() of @paths + * \param count_paths: LWS_ARRAY_SIZE() of @paths * * Prepares your context struct for use with lejp */ @@ -250,7 +251,7 @@ lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) case LEJP_MP_STRING: if (c == '\"') { - if (!ctx->sp) { + if (!ctx->sp) { /* JSON can't end on quote */ ret = LEJP_REJECT_MP_STRING_UNDERRUN; goto reject; } @@ -417,7 +418,7 @@ lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) goto reject; } ctx->i[ctx->ipos++] = 0; - if (ctx->ipos > ARRAY_SIZE(ctx->i)) { + if (ctx->ipos > LWS_ARRAY_SIZE(ctx->i)) { ret = LEJP_REJECT_MP_DELIM_ISTACK; goto reject; } @@ -425,17 +426,23 @@ lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) case ']': /* pop */ + if (!ctx->sp) { /* JSON can't end on ] */ + ret = LEJP_REJECT_MP_C_OR_E_UNDERF; + goto reject; + } ctx->sp--; if (ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) { ret = LEJP_REJECT_MP_C_OR_E_NOTARRAY; goto reject; } /* drop the path [n] bit */ - ctx->ppos = ctx->st[ctx->sp - 1].p; - ctx->ipos = ctx->st[ctx->sp - 1].i; + if (ctx->sp) { + ctx->ppos = ctx->st[ctx->sp - 1].p; + ctx->ipos = ctx->st[ctx->sp - 1].i; + } ctx->path[ctx->ppos] = '\0'; if (ctx->path_match && - ctx->ppos <= ctx->path_match_len) + ctx->ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point @@ -603,7 +610,7 @@ lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) break; } if (c == ']') { - if (!ctx->sp) { + if (!ctx->sp) { /* JSON can't end on ] */ ret = LEJP_REJECT_MP_C_OR_E_UNDERF; goto reject; } @@ -631,7 +638,7 @@ lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) goto redo_character; } if (c == '}') { - if (ctx->sp == 0) { + if (!ctx->sp) { lejp_check_path_match(ctx); if (ctx->callback(ctx, LEJPCB_OBJECT_END)) { ret = LEJP_REJECT_CALLBACK; @@ -716,7 +723,7 @@ add_stack_level: ctx->st[ctx->sp].p = ctx->ppos; ctx->st[ctx->sp].i = ctx->ipos; - if (++ctx->sp == ARRAY_SIZE(ctx->st)) { + if (++ctx->sp == LWS_ARRAY_SIZE(ctx->st)) { ret = LEJP_REJECT_STACK_OVERFLOW; goto reject; } diff --git a/thirdparty/libwebsockets/plat/lws-plat-unix.c b/thirdparty/libwebsockets/plat/lws-plat-unix.c index bacc6af647..7dba3bd82f 100644 --- a/thirdparty/libwebsockets/plat/lws-plat-unix.c +++ b/thirdparty/libwebsockets/plat/lws-plat-unix.c @@ -30,6 +30,12 @@ #endif #include <dirent.h> +void lws_plat_apply_FD_CLOEXEC(int n) +{ + if (n != -1) + fcntl(n, F_SETFD, FD_CLOEXEC ); +} + int lws_plat_socket_offset(void) { @@ -330,6 +336,8 @@ lws_plat_set_socket_options(struct lws_vhost *vhost, int fd) struct protoent *tcp_proto; #endif + fcntl(fd, F_SETFD, FD_CLOEXEC); + if (vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; @@ -952,7 +960,7 @@ lws_plat_write_file(const char *filename, void *buf, int len) LWS_VISIBLE int lws_plat_read_file(const char *filename, void *buf, int len) { - int n, fd = open(filename, O_RDONLY); + int n, fd = lws_open(filename, O_RDONLY); if (fd == -1) return -1; diff --git a/thirdparty/libwebsockets/plat/lws-plat-win.c b/thirdparty/libwebsockets/plat/lws-plat-win.c index 8a43081ef1..1850b64250 100644 --- a/thirdparty/libwebsockets/plat/lws-plat-win.c +++ b/thirdparty/libwebsockets/plat/lws-plat-win.c @@ -3,6 +3,10 @@ #endif #include "core/private.h" +void lws_plat_apply_FD_CLOEXEC(int n) +{ +} + int lws_plat_socket_offset(void) { @@ -54,7 +58,7 @@ time_in_microseconds() memcpy(&datetime, &filetime, sizeof(datetime)); /* Windows file times are in 100s of nanoseconds. */ - return (datetime.QuadPart - DELTA_EPOCH_IN_MICROSECS) / 10; + return (datetime.QuadPart / 10) - DELTA_EPOCH_IN_MICROSECS; } #ifdef _WIN32_WCE @@ -229,23 +233,21 @@ _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) continue; wsi = wsi_from_fd(context, pfd->fd); - if (wsi->listener) + if (!wsi || wsi->listener) continue; - if (!wsi || wsi->sock_send_blocking) + if (wsi->sock_send_blocking) continue; pfd->revents = LWS_POLLOUT; n = lws_service_fd(context, pfd); if (n < 0) return -1; + + /* Force WSAWaitForMultipleEvents() to check events and then return immediately. */ + timeout_ms = 0; + /* if something closed, retry this slot */ if (n) i--; - - /* - * any wsi has truncated, force him signalled - */ - if (wsi->trunc_len) - WSASetEvent(pt->events[0]); } /* @@ -261,9 +263,11 @@ _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) } if (timeout_ms) { + lws_usec_t t; + lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ - lws_usec_t t = __lws_hrtimer_service(pt); + t = __lws_hrtimer_service(pt); if ((lws_usec_t)timeout_ms * 1000 > t) timeout_ms = (int)(t / 1000); @@ -310,8 +314,10 @@ _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) if (pfd->revents & LWS_POLLHUP) --eIdx; - if (pfd->revents) + if (pfd->revents) { + recv(pfd->fd, NULL, 0, 0); lws_service_fd_tsi(context, pfd, tsi); + } } } @@ -637,7 +643,7 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, lws_fop_fd_t fop_fd; FILE_STANDARD_INFO fInfo = {0}; - MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, ARRAY_SIZE(buf)); + MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, LWS_ARRAY_SIZE(buf)); #if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0602 // Windows 8 (minimum when UWP_ENABLED, but can be used in Windows builds) CREATEFILE2_EXTENDED_PARAMETERS extParams = {0}; @@ -810,7 +816,7 @@ lws_plat_write_file(const char *filename, void *buf, int len) { int m, fd; - fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); + fd = lws_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd == -1) return -1; @@ -824,7 +830,7 @@ lws_plat_write_file(const char *filename, void *buf, int len) LWS_VISIBLE int lws_plat_read_file(const char *filename, void *buf, int len) { - int n, fd = open(filename, O_RDONLY); + int n, fd = lws_open(filename, O_RDONLY); if (fd == -1) return -1; diff --git a/thirdparty/libwebsockets/roles/h1/ops-h1.c b/thirdparty/libwebsockets/roles/h1/ops-h1.c index d3b16f4d1f..9001c864ea 100644 --- a/thirdparty/libwebsockets/roles/h1/ops-h1.c +++ b/thirdparty/libwebsockets/roles/h1/ops-h1.c @@ -195,6 +195,7 @@ postbody_completion: } break; + case LRS_RETURNED_CLOSE: case LRS_AWAITING_CLOSE_ACK: case LRS_WAITING_TO_SEND_CLOSE: case LRS_SHUTDOWN: @@ -444,6 +445,16 @@ try_pollout: if (lwsi_state(wsi) != LRS_ISSUING_FILE) { + if (wsi->trunc_len) { + //lwsl_notice("%s: completing partial\n", __func__); + if (lws_issue_raw(wsi, wsi->trunc_alloc + wsi->trunc_offset, + wsi->trunc_len) < 0) { + lwsl_info("%s signalling to close\n", __func__); + goto fail; + } + return LWS_HPI_RET_HANDLED; + } + lws_stats_atomic_bump(wsi->context, pt, LWSSTATS_C_WRITEABLE_CB, 1); #if defined(LWS_WITH_STATS) @@ -655,6 +666,9 @@ rops_destroy_role_h1(struct lws *wsi) ah = ah->next; } +#ifdef LWS_ROLE_WS + lws_free_set_NULL(wsi->ws); +#endif return 0; } diff --git a/thirdparty/libwebsockets/roles/http/client/client-handshake.c b/thirdparty/libwebsockets/roles/http/client/client-handshake.c index 4830fc9eca..0095c79a69 100644 --- a/thirdparty/libwebsockets/roles/http/client/client-handshake.c +++ b/thirdparty/libwebsockets/roles/http/client/client-handshake.c @@ -162,7 +162,7 @@ create_new_conn: if (!wsi->client_hostname_copy) wsi->client_hostname_copy = - strdup(lws_hdr_simple_ptr(wsi, + lws_strdup(lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS)); /* @@ -654,13 +654,13 @@ lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port, lws_ssl_close(wsi); #endif + __remove_wsi_socket_from_fds(wsi); + if (wsi->context->event_loop_ops->close_handle_manually) wsi->context->event_loop_ops->close_handle_manually(wsi); else compatible_close(wsi->desc.sockfd); - __remove_wsi_socket_from_fds(wsi); - #if defined(LWS_WITH_TLS) wsi->tls.use_ssl = ssl; #else @@ -717,7 +717,7 @@ lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port, } #ifdef LWS_WITH_HTTP_PROXY -static hubbub_error +hubbub_error html_parser_cb(const hubbub_token *token, void *pw) { struct lws_rewrite *r = (struct lws_rewrite *)pw; @@ -846,7 +846,7 @@ html_parser_cb(const hubbub_token *token, void *pw) #endif -static char * +char * lws_strdup(const char *s) { char *d = lws_malloc(strlen(s) + 1, "strdup"); diff --git a/thirdparty/libwebsockets/roles/http/client/client.c b/thirdparty/libwebsockets/roles/http/client/client.c index ce42dc6cd3..5645fa2b7a 100644 --- a/thirdparty/libwebsockets/roles/http/client/client.c +++ b/thirdparty/libwebsockets/roles/http/client/client.c @@ -93,7 +93,7 @@ lws_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd, char *sb = p; int n = 0; #if defined(LWS_WITH_SOCKS5) - char conn_mode = 0, pending_timeout = 0; + int conn_mode = 0, pending_timeout = 0; #endif if ((pollfd->revents & LWS_POLLOUT) && @@ -252,6 +252,8 @@ socks_reply_fail: /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); goto start_ws_handshake; + default: + break; } break; #endif @@ -578,6 +580,8 @@ lws_http_transaction_completed_client(struct lws *wsi) "queued client done"); } + _lws_header_table_reset(wsi->http.ah); + /* after the first one, they can only be coming from the queue */ wsi->transaction_from_pipeline_queue = 1; @@ -629,12 +633,20 @@ lws_http_transaction_completed_client(struct lws *wsi) } LWS_VISIBLE LWS_EXTERN unsigned int -lws_http_client_http_response(struct lws *wsi) +lws_http_client_http_response(struct lws *_wsi) { - if (!wsi->http.ah) - return 0; + struct lws *wsi; + unsigned int resp; + + if (_wsi->http.ah && _wsi->http.ah->http_response) + return _wsi->http.ah->http_response; - return wsi->http.ah->http_response; + lws_vhost_lock(_wsi->vhost); + wsi = _lws_client_wsi_master(_wsi); + resp = wsi->http.ah->http_response; + lws_vhost_unlock(_wsi->vhost); + + return resp; } #endif #if defined(LWS_PLAT_OPTEE) @@ -781,7 +793,7 @@ lws_client_interpret_server_handshake(struct lws *wsi) q = strrchr(new_path, '/'); if (q) lws_strncpy(q + 1, p, sizeof(new_path) - - (q - new_path)); + (q - new_path) - 1); else path = p; } @@ -910,9 +922,9 @@ lws_client_interpret_server_handshake(struct lws *wsi) * we seem to be good to go, give client last chance to check * headers and OK it */ - if (wsi->protocol->callback(wsi, + if (w->protocol->callback(w, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH, - wsi->user_space, NULL, 0)) { + w->user_space, NULL, 0)) { cce = "HS: disallowed by client filter"; goto bail2; @@ -924,9 +936,9 @@ lws_client_interpret_server_handshake(struct lws *wsi) wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* call him back to inform him he is up */ - if (wsi->protocol->callback(wsi, + if (w->protocol->callback(w, LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP, - wsi->user_space, NULL, 0)) { + w->user_space, NULL, 0)) { cce = "HS: disallowed at ESTABLISHED"; goto bail3; } @@ -964,9 +976,9 @@ bail2: n = 0; if (cce) n = (int)strlen(cce); - wsi->protocol->callback(wsi, + w->protocol->callback(w, LWS_CALLBACK_CLIENT_CONNECTION_ERROR, - wsi->user_space, (void *)cce, + w->user_space, (void *)cce, (unsigned int)n); } wsi->already_did_cce = 1; @@ -1228,4 +1240,4 @@ completed: return 0; } -#endif
\ No newline at end of file +#endif diff --git a/thirdparty/libwebsockets/roles/http/header.c b/thirdparty/libwebsockets/roles/http/header.c index 99e56f7564..dbcf27cbd1 100644 --- a/thirdparty/libwebsockets/roles/http/header.c +++ b/thirdparty/libwebsockets/roles/http/header.c @@ -26,7 +26,7 @@ const unsigned char * lws_token_to_string(enum lws_token_indexes token) { - if ((unsigned int)token >= ARRAY_SIZE(set)) + if ((unsigned int)token >= LWS_ARRAY_SIZE(set)) return NULL; return (unsigned char *)set[token]; @@ -149,9 +149,17 @@ lws_add_http_common_headers(struct lws *wsi, unsigned int code, (int)strlen(content_type), p, end)) return 1; - if (content_len != LWS_ILLEGAL_HTTP_CONTENT_LEN && - lws_add_http_header_content_length(wsi, content_len, p, end)) - return 1; + if (content_len != LWS_ILLEGAL_HTTP_CONTENT_LEN) { + if (lws_add_http_header_content_length(wsi, content_len, p, end)) + return 1; + } else { + if (lws_add_http_header_by_token(wsi, WSI_TOKEN_CONNECTION, + (unsigned char *)"close", 5, + p, end)) + return 1; + + wsi->http.connection_type = HTTP_CONNECTION_CLOSE; + } return 0; } @@ -204,34 +212,40 @@ lws_add_http_header_status(struct lws *wsi, unsigned int _code, #endif #ifdef LWS_WITH_HTTP2 - if (lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi)) - return lws_add_http2_header_status(wsi, code, p, end); + if (lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi)) { + n = lws_add_http2_header_status(wsi, code, p, end); + if (n) + return n; + } else #endif - if (code >= 400 && code < (400 + ARRAY_SIZE(err400))) - description = err400[code - 400]; - if (code >= 500 && code < (500 + ARRAY_SIZE(err500))) - description = err500[code - 500]; - - if (code == 100) - description = "Continue"; - if (code == 200) - description = "OK"; - if (code == 304) - description = "Not Modified"; - else - if (code >= 300 && code < 400) - description = "Redirect"; - - if (wsi->http.request_version < ARRAY_SIZE(hver)) - p1 = hver[wsi->http.request_version]; - else - p1 = hver[0]; - - n = sprintf((char *)code_and_desc, "%s %u %s", p1, code, description); - - if (lws_add_http_header_by_name(wsi, NULL, code_and_desc, n, p, end)) - return 1; - + { + if (code >= 400 && code < (400 + LWS_ARRAY_SIZE(err400))) + description = err400[code - 400]; + if (code >= 500 && code < (500 + LWS_ARRAY_SIZE(err500))) + description = err500[code - 500]; + + if (code == 100) + description = "Continue"; + if (code == 200) + description = "OK"; + if (code == 304) + description = "Not Modified"; + else + if (code >= 300 && code < 400) + description = "Redirect"; + + if (wsi->http.request_version < LWS_ARRAY_SIZE(hver)) + p1 = hver[wsi->http.request_version]; + else + p1 = hver[0]; + + n = sprintf((char *)code_and_desc, "%s %u %s", p1, code, + description); + + if (lws_add_http_header_by_name(wsi, NULL, code_and_desc, n, p, + end)) + return 1; + } headers = wsi->vhost->headers; while (headers) { if (lws_add_http_header_by_name(wsi, diff --git a/thirdparty/libwebsockets/roles/http/private.h b/thirdparty/libwebsockets/roles/http/private.h index 2aa7a92f75..5699914742 100644 --- a/thirdparty/libwebsockets/roles/http/private.h +++ b/thirdparty/libwebsockets/roles/http/private.h @@ -227,6 +227,7 @@ struct _lws_http_mode_related { #if defined(LWS_WITH_HTTP_PROXY) unsigned int perform_rewrite:1; #endif + unsigned int deferred_transaction_completed:1; }; diff --git a/thirdparty/libwebsockets/roles/http/server/lejp-conf.c b/thirdparty/libwebsockets/roles/http/server/lejp-conf.c index e9ce854cfc..fbf10c288e 100644 --- a/thirdparty/libwebsockets/roles/http/server/lejp-conf.c +++ b/thirdparty/libwebsockets/roles/http/server/lejp-conf.c @@ -205,6 +205,7 @@ struct jpargs { unsigned int enable_client_ssl:1; unsigned int fresh_mount:1; unsigned int any_vhosts:1; + unsigned int chunk:1; }; static void * @@ -213,6 +214,8 @@ lwsws_align(struct jpargs *a) if ((lws_intptr_t)(a->p) & 15) a->p += 16 - ((lws_intptr_t)(a->p) & 15); + a->chunk = 0; + return a->p; } @@ -225,7 +228,7 @@ arg_to_bool(const char *s) if (n) return 1; - for (n = 0; n < (int)ARRAY_SIZE(on); n++) + for (n = 0; n < (int)LWS_ARRAY_SIZE(on); n++) if (!strcasecmp(s, on[n])) return 1; @@ -413,25 +416,30 @@ lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) } /* this catches, eg, vhosts[].headers[].xxx */ - if (reason == LEJPCB_VAL_STR_END && + if ((reason == LEJPCB_VAL_STR_END || reason == LEJPCB_VAL_STR_CHUNK) && ctx->path_match == LEJPVP_HEADERS_NAME + 1) { - headers = lwsws_align(a); - a->p += sizeof(*headers); - - n = lejp_get_wildcard(ctx, 0, a->p, a->end - a->p); - /* ie, enable this protocol, no options yet */ - headers->next = a->info->headers; - a->info->headers = headers; - headers->name = a->p; - // lwsl_notice(" adding header %s=%s\n", a->p, ctx->buf); - a->p += n - 1; - *(a->p++) = ':'; - if (a->p < a->end) - *(a->p++) = '\0'; - else - *(a->p - 1) = '\0'; - headers->value = a->p; - headers->options = NULL; + if (!a->chunk) { + headers = lwsws_align(a); + a->p += sizeof(*headers); + + n = lejp_get_wildcard(ctx, 0, a->p, + lws_ptr_diff(a->end, a->p)); + /* ie, add this header */ + headers->next = a->info->headers; + a->info->headers = headers; + headers->name = a->p; + + lwsl_notice(" adding header %s=%s\n", a->p, ctx->buf); + a->p += n - 1; + *(a->p++) = ':'; + if (a->p < a->end) + *(a->p++) = '\0'; + else + *(a->p - 1) = '\0'; + headers->value = a->p; + headers->options = NULL; + } + a->chunk = reason == LEJPCB_VAL_STR_CHUNK; goto dostring; } @@ -502,7 +510,7 @@ lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) if (a->last) a->last->mount_next = m; - for (n = 0; n < (int)ARRAY_SIZE(mount_protocols); n++) + for (n = 0; n < (int)LWS_ARRAY_SIZE(mount_protocols); n++) if (!strncmp(a->m.origin, mount_protocols[n], strlen(mount_protocols[n]))) { lwsl_info("----%s\n", a->m.origin); @@ -512,7 +520,7 @@ lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) break; } - if (n == (int)ARRAY_SIZE(mount_protocols)) { + if (n == (int)LWS_ARRAY_SIZE(mount_protocols)) { lwsl_err("unsupported protocol:// %s\n", a->m.origin); return 1; } @@ -750,6 +758,7 @@ lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) dostring: p = ctx->buf; + p[LEJP_STRING_CHUNK] = '\0'; p1 = strstr(p, ESC_INSTALL_DATADIR); if (p1) { n = p1 - p; @@ -762,7 +771,8 @@ dostring: } a->p += lws_snprintf(a->p, a->end - a->p, "%s", p); - *(a->p)++ = '\0'; + if (reason == LEJPCB_VAL_STR_END) + *(a->p)++ = '\0'; return 0; } @@ -779,7 +789,7 @@ lwsws_get_config(void *user, const char *f, const char * const *paths, struct lejp_ctx ctx; int n, m, fd; - fd = open(f, O_RDONLY); + fd = lws_open(f, O_RDONLY); if (fd < 0) { lwsl_err("Cannot open %s\n", f); return 2; @@ -927,11 +937,11 @@ lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_global, - ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) + LWS_ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) return 1; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); if (lwsws_get_config_d(&a, dd, paths_global, - ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) + LWS_ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) return 1; a.plugin_dirs[a.count_plugin_dirs] = NULL; @@ -962,11 +972,11 @@ lwsws_get_config_vhosts(struct lws_context *context, lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_vhosts, - ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) + LWS_ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) return 1; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); if (lwsws_get_config_d(&a, dd, paths_vhosts, - ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) + LWS_ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) return 1; *cs = a.p; diff --git a/thirdparty/libwebsockets/roles/http/server/parsers.c b/thirdparty/libwebsockets/roles/http/server/parsers.c index cb022e362b..482bdc676a 100644 --- a/thirdparty/libwebsockets/roles/http/server/parsers.c +++ b/thirdparty/libwebsockets/roles/http/server/parsers.c @@ -563,7 +563,7 @@ int LWS_WARN_UNUSED_RESULT lws_hdr_simple_create(struct lws *wsi, enum lws_token_indexes h, const char *s) { wsi->http.ah->nfrag++; - if (wsi->http.ah->nfrag == ARRAY_SIZE(wsi->http.ah->frags)) { + if (wsi->http.ah->nfrag == LWS_ARRAY_SIZE(wsi->http.ah->frags)) { lwsl_warn("More hdr frags than we can deal with, dropping\n"); return -1; } @@ -677,18 +677,16 @@ lws_parse_urldecode(struct lws *wsi, uint8_t *_c) return -1; /* genuine delimiter */ if ((c == '&' || c == ';') && !enc) { - if (issue_char(wsi, c) < 0) + if (issue_char(wsi, '\0') < 0) return -1; - /* swallow the terminator */ - ah->frags[ah->nfrag].len--; /* link to next fragment */ ah->frags[ah->nfrag].nfrag = ah->nfrag + 1; ah->nfrag++; - if (ah->nfrag >= ARRAY_SIZE(ah->frags)) + if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frags)) goto excessive; /* start next fragment after the & */ ah->post_literal_equal = 0; - ah->frags[ah->nfrag].offset = ah->pos; + ah->frags[ah->nfrag].offset = ++ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; goto swallow; @@ -787,9 +785,9 @@ lws_parse_urldecode(struct lws *wsi, uint8_t *_c) /* move to using WSI_TOKEN_HTTP_URI_ARGS */ ah->nfrag++; - if (ah->nfrag >= ARRAY_SIZE(ah->frags)) + if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frags)) goto excessive; - ah->frags[ah->nfrag].offset = ah->pos; + ah->frags[ah->nfrag].offset = ++ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; @@ -852,10 +850,10 @@ lws_parse(struct lws *wsi, unsigned char *buf, int *len) c == ' ') break; - for (m = 0; m < ARRAY_SIZE(methods); m++) + for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (ah->parser_state == methods[m]) break; - if (m == ARRAY_SIZE(methods)) + if (m == LWS_ARRAY_SIZE(methods)) /* it was not any of the methods */ goto check_eol; @@ -983,7 +981,7 @@ nope: if (ah->lextable_pos < 0 && lwsi_role_h1(wsi) && lwsi_role_server(wsi)) { /* this is not a header we know about */ - for (m = 0; m < ARRAY_SIZE(methods); m++) + for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (ah->frag_index[methods[m]]) { /* * already had the method, no idea what @@ -996,7 +994,7 @@ nope: * hm it's an unknown http method from a client in fact, * it cannot be valid http */ - if (m == ARRAY_SIZE(methods)) { + if (m == LWS_ARRAY_SIZE(methods)) { /* * are we set up to accept raw in these cases? */ @@ -1025,7 +1023,7 @@ nope: lextable[ah->lextable_pos + 1]; lwsl_parser("known hdr %d\n", n); - for (m = 0; m < ARRAY_SIZE(methods); m++) + for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (n == methods[m] && ah->frag_index[methods[m]]) { lwsl_warn("Duplicated method\n"); @@ -1061,7 +1059,7 @@ nope: start_fragment: ah->nfrag++; excessive: - if (ah->nfrag == ARRAY_SIZE(ah->frags)) { + if (ah->nfrag == LWS_ARRAY_SIZE(ah->frags)) { lwsl_warn("More hdr frags than we can deal with\n"); return -1; } diff --git a/thirdparty/libwebsockets/roles/http/server/server.c b/thirdparty/libwebsockets/roles/http/server/server.c index 350af3cd7e..abd86dc9b5 100644 --- a/thirdparty/libwebsockets/roles/http/server/server.c +++ b/thirdparty/libwebsockets/roles/http/server/server.c @@ -131,6 +131,17 @@ done_list: (void)n; #if defined(__linux__) +#ifdef LWS_WITH_UNIX_SOCK + /* + * A Unix domain sockets cannot be bound for several times, even if we set + * the SO_REUSE* options on. + * However, fortunately, each thread is able to independently listen when + * running on a reasonably new Linux kernel. So we can safely assume + * creating just one listening socket for a multi-threaded environment won't + * fail in most cases. + */ + if (!LWS_UNIX_SOCK_ENABLED(vhost)) +#endif limit = vhost->context->count_threads; #endif @@ -694,7 +705,7 @@ lws_find_string_in_file(const char *filename, const char *string, int stringlen) char buf[128]; int fd, match = 0, pos = 0, n = 0, hit = 0; - fd = open(filename, O_RDONLY); + fd = lws_open(filename, O_RDONLY); if (fd < 0) { lwsl_err("can't open auth file: %s\n", filename); return 0; @@ -812,7 +823,7 @@ lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len) { int n, count = 0; - for (n = 0; n < (int)ARRAY_SIZE(methods); n++) + for (n = 0; n < (int)LWS_ARRAY_SIZE(methods); n++) if (lws_hdr_total_length(wsi, methods[n])) count++; if (!count) { @@ -827,7 +838,7 @@ lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len) return -1; } - for (n = 0; n < (int)ARRAY_SIZE(methods); n++) + for (n = 0; n < (int)LWS_ARRAY_SIZE(methods); n++) if (lws_hdr_total_length(wsi, methods[n])) { *puri_ptr = lws_hdr_simple_ptr(wsi, methods[n]); *puri_len = lws_hdr_total_length(wsi, methods[n]); @@ -857,7 +868,7 @@ lws_http_action(struct lws *wsi) }; meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); - if (meth < 0 || meth >= (int)ARRAY_SIZE(method_names)) + if (meth < 0 || meth >= (int)LWS_ARRAY_SIZE(method_names)) goto bail_nuke_ah; /* we insist on absolute paths */ @@ -1128,7 +1139,7 @@ lws_http_action(struct lws *wsi) } if (pcolon > pslash) pcolon = NULL; - + if (pcolon) n = pcolon - hit->origin; else @@ -1142,13 +1153,13 @@ lws_http_action(struct lws *wsi) i.address = ads; i.port = 80; - if (hit->origin_protocol == LWSMPRO_HTTPS) { + if (hit->origin_protocol == LWSMPRO_HTTPS) { i.port = 443; i.ssl_connection = 1; } if (pcolon) i.port = atoi(pcolon + 1); - + lws_snprintf(rpath, sizeof(rpath) - 1, "/%s/%s", pslash + 1, uri_ptr + hit->mountpoint_len); lws_clean_url(rpath); @@ -1164,7 +1175,7 @@ lws_http_action(struct lws *wsi) p++; } } - + i.path = rpath; i.host = i.address; @@ -1178,7 +1189,7 @@ lws_http_action(struct lws *wsi) "from %s, to %s\n", i.address, i.port, i.path, i.ssl_connection, i.uri_replace_from, i.uri_replace_to); - + if (!lws_client_connect_via_info(&i)) { lwsl_err("proxy connect fail\n"); return 1; @@ -1714,12 +1725,31 @@ lws_http_transaction_completed(struct lws *wsi) { int n = NO_PENDING_TIMEOUT; + if (wsi->trunc_len) { + /* + * ...so he tried to send something large as the http reply, + * it went as a partial, but he immediately said the + * transaction was completed. + * + * Defer the transaction completed until the last part of the + * partial is sent. + */ + lwsl_notice("%s: deferring due to partial\n", __func__); + wsi->http.deferred_transaction_completed = 1; + + return 0; + } + lwsl_info("%s: wsi %p\n", __func__, wsi); lws_access_log(wsi); if (!wsi->hdr_parsing_completed) { - lwsl_notice("%s: ignoring, ah parsing incomplete\n", __func__); + char peer[64]; + lws_get_peer_simple(wsi, peer, sizeof(peer) - 1); + peer[sizeof(peer) - 1] = '\0'; + lwsl_notice("%s: (from %s) ignoring, ah parsing incomplete\n", + __func__, peer); return 0; } diff --git a/thirdparty/libwebsockets/roles/ws/client-parser-ws.c b/thirdparty/libwebsockets/roles/ws/client-parser-ws.c index aa561ce034..7287fb1590 100644 --- a/thirdparty/libwebsockets/roles/ws/client-parser-ws.c +++ b/thirdparty/libwebsockets/roles/ws/client-parser-ws.c @@ -450,7 +450,7 @@ ping_drop: break; case LWSWSOPC_PONG: - lwsl_info("client receied pong\n"); + lwsl_info("client received pong\n"); lwsl_hexdump(&wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); @@ -488,9 +488,6 @@ ping_drop: ebuf.token = &wsi->ws->rx_ubuf[LWS_PRE]; ebuf.len = wsi->ws->rx_ubuf_head; - if (wsi->ws->opcode == LWSWSOPC_PONG && !ebuf.len) - goto already_done; - #if !defined(LWS_WITHOUT_EXTENSIONS) drain_extension: lwsl_ext("%s: passing %d to ext\n", __func__, ebuf.len); @@ -504,14 +501,12 @@ drain_extension: #endif lwsl_debug("post inflate ebuf len %d\n", ebuf.len); - if ( #if !defined(LWS_WITHOUT_EXTENSIONS) - rx_draining_ext && -#endif - !ebuf.len) { + if (rx_draining_ext && !ebuf.len) { lwsl_debug(" --- ending drain on 0 read result\n"); goto already_done; } +#endif if (wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, diff --git a/thirdparty/libwebsockets/roles/ws/ops-ws.c b/thirdparty/libwebsockets/roles/ws/ops-ws.c index 5ddaba9e18..665b2c9b74 100644 --- a/thirdparty/libwebsockets/roles/ws/ops-ws.c +++ b/thirdparty/libwebsockets/roles/ws/ops-ws.c @@ -1246,8 +1246,7 @@ int rops_handle_POLLOUT_ws(struct lws *wsi) return LWS_HP_RET_BAIL_OK; } - if (lwsi_role_client(wsi) && !wsi->socket_is_permanently_unusable && - wsi->ws->send_check_ping) { + if (!wsi->socket_is_permanently_unusable && wsi->ws->send_check_ping) { lwsl_info("issuing ping on wsi %p\n", wsi); wsi->ws->send_check_ping = 0; @@ -1282,7 +1281,7 @@ int rops_handle_POLLOUT_ws(struct lws *wsi) * payload ordering, but since they are always complete * fragments control packets can interleave OK. */ - if (lwsi_role_client(wsi) && wsi->ws->tx_draining_ext) { + if (wsi->ws->tx_draining_ext) { lwsl_ext("SERVICING TX EXT DRAINING\n"); if (lws_write(wsi, NULL, 0, LWS_WRITE_CONTINUATION) < 0) return LWS_HP_RET_BAIL_DIE; @@ -1292,8 +1291,10 @@ int rops_handle_POLLOUT_ws(struct lws *wsi) /* Priority 6: extensions */ - if (!wsi->ws->extension_data_pending) + if (!wsi->ws->extension_data_pending && !wsi->ws->tx_draining_ext) { + lwsl_ext("%s: !wsi->ws->extension_data_pending\n", __func__); return LWS_HP_RET_USER_SERVICE; + } /* * check in on the active extensions, see if they @@ -1412,15 +1413,13 @@ rops_periodic_checks_ws(struct lws_context *context, int tsi, time_t now) wsi->ws->time_next_ping_check) > context->ws_ping_pong_interval) { - lwsl_info("req pp on wsi %p\n", - wsi); + lwsl_info("req pp on wsi %p\n", wsi); wsi->ws->send_check_ping = 1; lws_set_timeout(wsi, PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING, context->timeout_secs); lws_callback_on_writable(wsi); - wsi->ws->time_next_ping_check = - now; + wsi->ws->time_next_ping_check = now; } wsi = wsi->same_vh_protocol_next; } @@ -1466,6 +1465,9 @@ rops_service_flag_pending_ws(struct lws_context *context, int tsi) static int rops_close_via_role_protocol_ws(struct lws *wsi, enum lws_close_status reason) { + if (!wsi->ws) + return 0; + if (!wsi->ws->close_in_ping_buffer_len && /* already a reason */ (reason == LWS_CLOSE_STATUS_NOSTATUS || reason == LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY)) @@ -1512,7 +1514,7 @@ rops_close_role_ws(struct lws_context_per_thread *pt, struct lws *wsi) if (wsi->ws->tx_draining_ext) { struct lws **w = &pt->ws.tx_draining_ext_list; - lwsl_notice("%s: CLEARING tx_draining_ext\n", __func__); + lwsl_ext("%s: CLEARING tx_draining_ext\n", __func__); wsi->ws->tx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { @@ -1563,7 +1565,7 @@ rops_write_role_protocol_ws(struct lws *wsi, unsigned char *buf, size_t len, /* remove us from the list */ struct lws **w = &pt->ws.tx_draining_ext_list; - lwsl_notice("%s: CLEARING tx_draining_ext\n", __func__); + lwsl_ext("%s: CLEARING tx_draining_ext\n", __func__); wsi->ws->tx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { @@ -1588,7 +1590,7 @@ rops_write_role_protocol_ws(struct lws *wsi, unsigned char *buf, size_t len, if (!(wpt & LWS_WRITE_NO_FIN) && len) *wp &= ~LWS_WRITE_NO_FIN; - lwsl_notice("FORCED draining wp to 0x%02X (stashed 0x%02X, incoming 0x%02X)\n", *wp, + lwsl_ext("FORCED draining wp to 0x%02X (stashed 0x%02X, incoming 0x%02X)\n", *wp, wsi->ws->tx_draining_stashed_wp, wpt); // assert(0); } @@ -1644,7 +1646,7 @@ rops_write_role_protocol_ws(struct lws *wsi, unsigned char *buf, size_t len, // lwsl_notice("ext processed %d plaintext into %d compressed (wp 0x%x)\n", m, (int)ebuf.len, *wp); if (n && ebuf.len) { - lwsl_notice("write drain len %d (wp 0x%x) SETTING tx_draining_ext\n", (int)ebuf.len, *wp); + lwsl_ext("write drain len %d (wp 0x%x) SETTING tx_draining_ext\n", (int)ebuf.len, *wp); /* extension requires further draining */ wsi->ws->tx_draining_ext = 1; wsi->ws->tx_draining_ext_list = pt->ws.tx_draining_ext_list; diff --git a/thirdparty/libwebsockets/tls/mbedtls/mbedtls-server.c b/thirdparty/libwebsockets/tls/mbedtls/mbedtls-server.c index 2de6d422e3..f17c7e5494 100644 --- a/thirdparty/libwebsockets/tls/mbedtls/mbedtls-server.c +++ b/thirdparty/libwebsockets/tls/mbedtls/mbedtls-server.c @@ -631,7 +631,7 @@ lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], /* subject must be formatted like "C=TW,O=warmcat,CN=myserver" */ - for (n = 0; n < (int)ARRAY_SIZE(x5); n++) { + for (n = 0; n < (int)LWS_ARRAY_SIZE(x5); n++) { if (p != subject) *p++ = ','; if (elements[n]) diff --git a/thirdparty/libwebsockets/tls/mbedtls/ssl.c b/thirdparty/libwebsockets/tls/mbedtls/ssl.c index 6ae9d2556b..f311ef50e3 100644 --- a/thirdparty/libwebsockets/tls/mbedtls/ssl.c +++ b/thirdparty/libwebsockets/tls/mbedtls/ssl.c @@ -121,8 +121,6 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) if (wsi->vhost) wsi->vhost->conn_stats.rx += n; - lws_restart_ws_ping_pong_timer(wsi); - /* * if it was our buffer that limited what we read, * check if SSL has additional data pending inside SSL buffers. diff --git a/thirdparty/libwebsockets/tls/mbedtls/wrapper/include/internal/ssl_types.h b/thirdparty/libwebsockets/tls/mbedtls/wrapper/include/internal/ssl_types.h index ba19663d9e..68ac748a28 100644 --- a/thirdparty/libwebsockets/tls/mbedtls/wrapper/include/internal/ssl_types.h +++ b/thirdparty/libwebsockets/tls/mbedtls/wrapper/include/internal/ssl_types.h @@ -37,7 +37,11 @@ typedef void RSA; typedef void STACK; typedef void BIO; +#if defined(WIN32) || defined(_WIN32) +#define ossl_inline __inline +#else #define ossl_inline inline +#endif #define SSL_METHOD_CALL(f, s, ...) s->method->func->ssl_##f(s, ##__VA_ARGS__) #define X509_METHOD_CALL(f, x, ...) x->method->x509_##f(x, ##__VA_ARGS__) diff --git a/thirdparty/libwebsockets/uwp_fixes.diff b/thirdparty/libwebsockets/uwp_fixes.diff index 5b9d8724ed..21c3275bba 100644 --- a/thirdparty/libwebsockets/uwp_fixes.diff +++ b/thirdparty/libwebsockets/uwp_fixes.diff @@ -1,15 +1,15 @@ diff --git a/thirdparty/libwebsockets/plat/lws-plat-win.c b/thirdparty/libwebsockets/plat/lws-plat-win.c -index 948db6289..511e29739 100644 +index bd513b494..1850b6425 100644 --- a/thirdparty/libwebsockets/plat/lws-plat-win.c +++ b/thirdparty/libwebsockets/plat/lws-plat-win.c -@@ -635,9 +635,20 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, +@@ -641,9 +641,20 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, HANDLE ret; WCHAR buf[MAX_PATH]; lws_fop_fd_t fop_fd; - LARGE_INTEGER llFileSize = {0}; + FILE_STANDARD_INFO fInfo = {0}; - MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, ARRAY_SIZE(buf)); + MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, LWS_ARRAY_SIZE(buf)); + +#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0602 // Windows 8 (minimum when UWP_ENABLED, but can be used in Windows builds) + CREATEFILE2_EXTENDED_PARAMETERS extParams = {0}; @@ -24,7 +24,7 @@ index 948db6289..511e29739 100644 if (((*flags) & 7) == _O_RDONLY) { ret = CreateFileW(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); -@@ -645,6 +656,7 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, +@@ -651,6 +662,7 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, ret = CreateFileW(buf, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } @@ -32,7 +32,7 @@ index 948db6289..511e29739 100644 if (ret == LWS_INVALID_FILE) goto bail; -@@ -657,9 +669,9 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, +@@ -663,9 +675,9 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, fop_fd->fd = ret; fop_fd->filesystem_priv = NULL; /* we don't use it */ fop_fd->flags = *flags; diff --git a/thirdparty/libwebsockets/win32helpers/getopt.c b/thirdparty/libwebsockets/win32helpers/getopt.c index 2181f1cb12..3bb21f6f28 100644 --- a/thirdparty/libwebsockets/win32helpers/getopt.c +++ b/thirdparty/libwebsockets/win32helpers/getopt.c @@ -1,153 +1,153 @@ -/* $NetBSD: getopt.c,v 1.16 1999/12/02 13:15:56 kleink Exp $ */
-
-/*
- * Copyright (c) 1987, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if 0
-static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#define __P(x) x
-#define _DIAGASSERT(x) assert(x)
-
-#ifdef __weak_alias
-__weak_alias(getopt,_getopt);
-#endif
-
-
-int opterr = 1, /* if error message should be printed */
- optind = 1, /* index into parent argv vector */
- optopt, /* character checked for validity */
- optreset; /* reset getopt */
-char *optarg; /* argument associated with option */
-
-static char * _progname __P((char *));
-int getopt_internal __P((int, char * const *, const char *));
-
-static char *
-_progname(nargv0)
- char * nargv0;
-{
- char * tmp;
-
- _DIAGASSERT(nargv0 != NULL);
-
- tmp = strrchr(nargv0, '/');
- if (tmp)
- tmp++;
- else
- tmp = nargv0;
- return(tmp);
-}
-
-#define BADCH (int)'?'
-#define BADARG (int)':'
-#define EMSG ""
-
-/*
- * getopt --
- * Parse argc/argv argument vector.
- */
-int
-getopt(nargc, nargv, ostr)
- int nargc;
- char * const nargv[];
- const char *ostr;
-{
- static char *__progname = 0;
- static char *place = EMSG; /* option letter processing */
- char *oli; /* option letter list index */
- __progname = __progname?__progname:_progname(*nargv);
-
- _DIAGASSERT(nargv != NULL);
- _DIAGASSERT(ostr != NULL);
-
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
- if (optind >= nargc || *(place = nargv[optind]) != '-') {
- place = EMSG;
- return (-1);
- }
- if (place[1] && *++place == '-' /* found "--" */
- && place[1] == '\0') {
- ++optind;
- place = EMSG;
- return (-1);
- }
- } /* option letter okay? */
- if ((optopt = (int)*place++) == (int)':' ||
- !(oli = strchr(ostr, optopt))) {
- /*
- * if the user didn't specify '-' as an option,
- * assume it means -1.
- */
- if (optopt == (int)'-')
- return (-1);
- if (!*place)
- ++optind;
- if (opterr && *ostr != ':')
- (void)fprintf(stderr,
- "%s: illegal option -- %c\n", __progname, optopt);
- return (BADCH);
- }
- if (*++oli != ':') { /* don't need argument */
- optarg = NULL;
- if (!*place)
- ++optind;
- }
- else { /* need an argument */
- if (*place) /* no white space */
- optarg = place;
- else if (nargc <= ++optind) { /* no arg */
- place = EMSG;
- if (*ostr == ':')
- return (BADARG);
- if (opterr)
- (void)fprintf(stderr,
- "%s: option requires an argument -- %c\n",
- __progname, optopt);
- return (BADCH);
- }
- else /* white space */
- optarg = nargv[optind];
- place = EMSG;
- ++optind;
- }
- return (optopt); /* dump back option letter */
-}
-
+/* $NetBSD: getopt.c,v 1.16 1999/12/02 13:15:56 kleink Exp $ */ + +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if 0 +static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; +#endif + +#include <assert.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> + +#define __P(x) x +#define _DIAGASSERT(x) assert(x) + +#ifdef __weak_alias +__weak_alias(getopt,_getopt); +#endif + + +int opterr = 1, /* if error message should be printed */ + optind = 1, /* index into parent argv vector */ + optopt, /* character checked for validity */ + optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +static char * _progname __P((char *)); +int getopt_internal __P((int, char * const *, const char *)); + +static char * +_progname(nargv0) + char * nargv0; +{ + char * tmp; + + _DIAGASSERT(nargv0 != NULL); + + tmp = strrchr(nargv0, '/'); + if (tmp) + tmp++; + else + tmp = nargv0; + return(tmp); +} + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +getopt(nargc, nargv, ostr) + int nargc; + char * const nargv[]; + const char *ostr; +{ + static char *__progname = 0; + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + __progname = __progname?__progname:_progname(*nargv); + + _DIAGASSERT(nargv != NULL); + _DIAGASSERT(ostr != NULL); + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-' /* found "--" */ + && place[1] == '\0') { + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int)'-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __progname, optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __progname, optopt); + return (BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} + diff --git a/thirdparty/libwebsockets/win32helpers/getopt_long.c b/thirdparty/libwebsockets/win32helpers/getopt_long.c index 22e5fa8945..6dfccf367d 100644 --- a/thirdparty/libwebsockets/win32helpers/getopt_long.c +++ b/thirdparty/libwebsockets/win32helpers/getopt_long.c @@ -1,240 +1,240 @@ -
-/*
- * Copyright (c) 1987, 1993, 1994, 1996
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "getopt.h"
-
-#define lws_ptr_diff(head, tail) \
- ((int)((char *)(head) - (char *)(tail)))
-
-extern int opterr; /* if error message should be printed */
-extern int optind; /* index into parent argv vector */
-extern int optopt; /* character checked for validity */
-extern int optreset; /* reset getopt */
-extern char *optarg; /* argument associated with option */
-
-#define __P(x) x
-#define _DIAGASSERT(x) assert(x)
-
-static char * __progname __P((char *));
-int getopt_internal __P((int, char * const *, const char *));
-
-static char *
-__progname(nargv0)
- char * nargv0;
-{
- char * tmp;
-
- _DIAGASSERT(nargv0 != NULL);
-
- tmp = strrchr(nargv0, '/');
- if (tmp)
- tmp++;
- else
- tmp = nargv0;
- return(tmp);
-}
-
-#define BADCH (int)'?'
-#define BADARG (int)':'
-#define EMSG ""
-
-/*
- * getopt --
- * Parse argc/argv argument vector.
- */
-int
-getopt_internal(nargc, nargv, ostr)
- int nargc;
- char * const *nargv;
- const char *ostr;
-{
- static char *place = EMSG; /* option letter processing */
- char *oli; /* option letter list index */
-
- _DIAGASSERT(nargv != NULL);
- _DIAGASSERT(ostr != NULL);
-
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
- if (optind >= nargc || *(place = nargv[optind]) != '-') {
- place = EMSG;
- return (-1);
- }
- if (place[1] && *++place == '-') { /* found "--" */
- /* ++optind; */
- place = EMSG;
- return (-2);
- }
- } /* option letter okay? */
- if ((optopt = (int)*place++) == (int)':' ||
- !(oli = strchr(ostr, optopt))) {
- /*
- * if the user didn't specify '-' as an option,
- * assume it means -1.
- */
- if (optopt == (int)'-')
- return (-1);
- if (!*place)
- ++optind;
- if (opterr && *ostr != ':')
- (void)fprintf(stderr,
- "%s: illegal option -- %c\n", __progname(nargv[0]), optopt);
- return (BADCH);
- }
- if (*++oli != ':') { /* don't need argument */
- optarg = NULL;
- if (!*place)
- ++optind;
- } else { /* need an argument */
- if (*place) /* no white space */
- optarg = place;
- else if (nargc <= ++optind) { /* no arg */
- place = EMSG;
- if ((opterr) && (*ostr != ':'))
- (void)fprintf(stderr,
- "%s: option requires an argument -- %c\n",
- __progname(nargv[0]), optopt);
- return (BADARG);
- } else /* white space */
- optarg = nargv[optind];
- place = EMSG;
- ++optind;
- }
- return (optopt); /* dump back option letter */
-}
-
-#if 0
-/*
- * getopt --
- * Parse argc/argv argument vector.
- */
-int
-getopt2(nargc, nargv, ostr)
- int nargc;
- char * const *nargv;
- const char *ostr;
-{
- int retval;
-
- if ((retval = getopt_internal(nargc, nargv, ostr)) == -2) {
- retval = -1;
- ++optind;
- }
- return(retval);
-}
-#endif
-
-/*
- * getopt_long --
- * Parse argc/argv argument vector.
- */
-int
-getopt_long(nargc, nargv, options, long_options, index)
- int nargc;
- char ** nargv;
- char * options;
- struct option * long_options;
- int * index;
-{
- int retval;
-
- _DIAGASSERT(nargv != NULL);
- _DIAGASSERT(options != NULL);
- _DIAGASSERT(long_options != NULL);
- /* index may be NULL */
-
- if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
- char *current_argv = nargv[optind++] + 2, *has_equal;
- int i, current_argv_len, match = -1;
-
- if (*current_argv == '\0') {
- return(-1);
- }
- if ((has_equal = strchr(current_argv, '=')) != NULL) {
- current_argv_len = lws_ptr_diff(has_equal, current_argv);
- has_equal++;
- } else
- current_argv_len = (int)strlen(current_argv);
-
- for (i = 0; long_options[i].name; i++) {
- if (strncmp(current_argv, long_options[i].name, current_argv_len))
- continue;
-
- if (strlen(long_options[i].name) == (unsigned)current_argv_len) {
- match = i;
- break;
- }
- if (match == -1)
- match = i;
- }
- if (match != -1) {
- if (long_options[match].has_arg == required_argument ||
- long_options[match].has_arg == optional_argument) {
- if (has_equal)
- optarg = has_equal;
- else
- optarg = nargv[optind++];
- }
- if ((long_options[match].has_arg == required_argument)
- && (optarg == NULL)) {
- /*
- * Missing argument, leading :
- * indicates no error should be generated
- */
- if ((opterr) && (*options != ':'))
- (void)fprintf(stderr,
- "%s: option requires an argument -- %s\n",
- __progname(nargv[0]), current_argv);
- return (BADARG);
- }
- } else { /* No matching argument */
- if ((opterr) && (*options != ':'))
- (void)fprintf(stderr,
- "%s: illegal option -- %s\n", __progname(nargv[0]), current_argv);
- return (BADCH);
- }
- if (long_options[match].flag) {
- *long_options[match].flag = long_options[match].val;
- retval = 0;
- } else
- retval = long_options[match].val;
- if (index)
- *index = match;
- }
- return(retval);
-}
+ +/* + * Copyright (c) 1987, 1993, 1994, 1996 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include <assert.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "getopt.h" + +#define lws_ptr_diff(head, tail) \ + ((int)((char *)(head) - (char *)(tail))) + +extern int opterr; /* if error message should be printed */ +extern int optind; /* index into parent argv vector */ +extern int optopt; /* character checked for validity */ +extern int optreset; /* reset getopt */ +extern char *optarg; /* argument associated with option */ + +#define __P(x) x +#define _DIAGASSERT(x) assert(x) + +static char * __progname __P((char *)); +int getopt_internal __P((int, char * const *, const char *)); + +static char * +__progname(nargv0) + char * nargv0; +{ + char * tmp; + + _DIAGASSERT(nargv0 != NULL); + + tmp = strrchr(nargv0, '/'); + if (tmp) + tmp++; + else + tmp = nargv0; + return(tmp); +} + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +getopt_internal(nargc, nargv, ostr) + int nargc; + char * const *nargv; + const char *ostr; +{ + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + _DIAGASSERT(nargv != NULL); + _DIAGASSERT(ostr != NULL); + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + /* ++optind; */ + place = EMSG; + return (-2); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int)'-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __progname(nargv[0]), optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if ((opterr) && (*ostr != ':')) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __progname(nargv[0]), optopt); + return (BADARG); + } else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} + +#if 0 +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +getopt2(nargc, nargv, ostr) + int nargc; + char * const *nargv; + const char *ostr; +{ + int retval; + + if ((retval = getopt_internal(nargc, nargv, ostr)) == -2) { + retval = -1; + ++optind; + } + return(retval); +} +#endif + +/* + * getopt_long -- + * Parse argc/argv argument vector. + */ +int +getopt_long(nargc, nargv, options, long_options, index) + int nargc; + char ** nargv; + char * options; + struct option * long_options; + int * index; +{ + int retval; + + _DIAGASSERT(nargv != NULL); + _DIAGASSERT(options != NULL); + _DIAGASSERT(long_options != NULL); + /* index may be NULL */ + + if ((retval = getopt_internal(nargc, nargv, options)) == -2) { + char *current_argv = nargv[optind++] + 2, *has_equal; + int i, current_argv_len, match = -1; + + if (*current_argv == '\0') { + return(-1); + } + if ((has_equal = strchr(current_argv, '=')) != NULL) { + current_argv_len = lws_ptr_diff(has_equal, current_argv); + has_equal++; + } else + current_argv_len = (int)strlen(current_argv); + + for (i = 0; long_options[i].name; i++) { + if (strncmp(current_argv, long_options[i].name, current_argv_len)) + continue; + + if (strlen(long_options[i].name) == (unsigned)current_argv_len) { + match = i; + break; + } + if (match == -1) + match = i; + } + if (match != -1) { + if (long_options[match].has_arg == required_argument || + long_options[match].has_arg == optional_argument) { + if (has_equal) + optarg = has_equal; + else + optarg = nargv[optind++]; + } + if ((long_options[match].has_arg == required_argument) + && (optarg == NULL)) { + /* + * Missing argument, leading : + * indicates no error should be generated + */ + if ((opterr) && (*options != ':')) + (void)fprintf(stderr, + "%s: option requires an argument -- %s\n", + __progname(nargv[0]), current_argv); + return (BADARG); + } + } else { /* No matching argument */ + if ((opterr) && (*options != ':')) + (void)fprintf(stderr, + "%s: illegal option -- %s\n", __progname(nargv[0]), current_argv); + return (BADCH); + } + if (long_options[match].flag) { + *long_options[match].flag = long_options[match].val; + retval = 0; + } else + retval = long_options[match].val; + if (index) + *index = match; + } + return(retval); +} diff --git a/thirdparty/libwebsockets/win32helpers/gettimeofday.c b/thirdparty/libwebsockets/win32helpers/gettimeofday.c index 08385c2320..35dd73531d 100644 --- a/thirdparty/libwebsockets/win32helpers/gettimeofday.c +++ b/thirdparty/libwebsockets/win32helpers/gettimeofday.c @@ -1,36 +1,36 @@ -#include <time.h>
-#include <windows.h> //I've omitted context line
-
-#include "gettimeofday.h"
-
-int gettimeofday(struct timeval *tv, struct timezone *tz)
-{
- FILETIME ft;
- unsigned __int64 tmpres = 0;
- static int tzflag;
-
- if (NULL != tv) {
- GetSystemTimeAsFileTime(&ft);
-
- tmpres |= ft.dwHighDateTime;
- tmpres <<= 32;
- tmpres |= ft.dwLowDateTime;
-
- /*converting file time to unix epoch*/
- tmpres /= 10; /*convert into microseconds*/
+#include <time.h> +#include <windows.h> //I've omitted context line + +#include "gettimeofday.h" + +int gettimeofday(struct timeval *tv, struct timezone *tz) +{ + FILETIME ft; + unsigned __int64 tmpres = 0; + static int tzflag; + + if (NULL != tv) { + GetSystemTimeAsFileTime(&ft); + + tmpres |= ft.dwHighDateTime; + tmpres <<= 32; + tmpres |= ft.dwLowDateTime; + + /*converting file time to unix epoch*/ + tmpres /= 10; /*convert into microseconds*/ tmpres -= DELTA_EPOCH_IN_MICROSECS; - tv->tv_sec = (long)(tmpres / 1000000UL);
- tv->tv_usec = (long)(tmpres % 1000000UL);
- }
-
- if (NULL != tz) {
- if (!tzflag) {
- _tzset();
- tzflag++;
- }
- tz->tz_minuteswest = _timezone / 60;
- tz->tz_dsttime = _daylight;
- }
-
- return 0;
-}
+ tv->tv_sec = (long)(tmpres / 1000000UL); + tv->tv_usec = (long)(tmpres % 1000000UL); + } + + if (NULL != tz) { + if (!tzflag) { + _tzset(); + tzflag++; + } + tz->tz_minuteswest = _timezone / 60; + tz->tz_dsttime = _daylight; + } + + return 0; +} diff --git a/thirdparty/squish/Add-Decompress-Bc5-to-Squish.patch b/thirdparty/squish/Add-Decompress-Bc5-to-Squish.patch deleted file mode 100644 index 1e06a8d318..0000000000 --- a/thirdparty/squish/Add-Decompress-Bc5-to-Squish.patch +++ /dev/null @@ -1,143 +0,0 @@ -From 7b64cc4c8b0be0443741483bf65909f5140179c0 Mon Sep 17 00:00:00 2001 -From: Orkun <orkuntezerm@gmail.com> -Date: Sun, 19 Nov 2017 02:24:31 +0300 -Subject: [PATCH] Fix #12220: Add Decompress Bc5 to Squish - -This Commit fixes the corrupted file preview described in #12220. -Added DecompressColourBc5 function to squish. ---- - thirdparty/squish/colourblock.cpp | 85 +++++++++++++++++++++++++++++++++++++++ - thirdparty/squish/colourblock.h | 3 ++ - thirdparty/squish/squish.cpp | 8 +++- - 3 files changed, 95 insertions(+), 1 deletion(-) - -diff --git a/thirdparty/squish/colourblock.cpp b/thirdparty/squish/colourblock.cpp -index af8b98036..3de46382c 100644 ---- a/thirdparty/squish/colourblock.cpp -+++ b/thirdparty/squish/colourblock.cpp -@@ -211,4 +211,89 @@ void DecompressColour( u8* rgba, void const* block, bool isDxt1 ) - } - } - -+// -- Godot start -- -+void DecompressColourBc5( u8* rgba, void const* block) -+{ -+ // get the block bytes -+ u8 const* bytes = reinterpret_cast< u8 const* >( block ); -+ -+ // unpack the endpoints -+ u8 codes[16]; -+ int red_0 = bytes[0]; -+ int red_1 = bytes[1]; -+ -+ codes[0] = red_0; -+ codes[1] = red_1; -+ codes[6] = 0.0f; -+ codes[7] = 1.0f; -+ // generate the midpoints -+ if(red_0 > red_1) -+ { -+ for( int i = 2; i < 8; ++i ) -+ { -+ codes[i] = ((8-i)*red_0 + (i-1)*red_1)/7; -+ } -+ } -+ else -+ { -+ for( int i = 2; i < 6; ++i ) -+ { -+ codes[i] = ((6-i)*red_0 + (i-1)*red_1)/5; -+ } -+ } -+ -+ int green_0 = bytes[8]; -+ int green_1 = bytes[9]; -+ -+ codes[0 + 8] = green_0; -+ codes[1 + 8] = green_1; -+ codes[6 + 8] = 0.0f; -+ codes[7 + 8] = 1.0f; -+ // generate the midpoints -+ if(green_0 > green_1) -+ { -+ for( int i = 2; i < 8; ++i ) -+ { -+ codes[i + 8] = ((8-i)*green_0 + (i-1)*green_1)/7; -+ } -+ } -+ else -+ { -+ for( int i = 2; i < 6; ++i ) -+ { -+ codes[i + 8] = ((6-i)*green_0 + (i-1)*green_1)/5; -+ } -+ } -+ -+ u8 indices[32]; -+ for( int i = 0; i < 4; ++i ) -+ { -+ u8 packed = bytes[2 + i]; -+ u8* red_ind = indices + 4*i; -+ -+ red_ind[0] = packed & 0x3; -+ red_ind[1] = ( packed >> 2 ) & 0x3; -+ red_ind[2] = ( packed >> 4 ) & 0x3; -+ red_ind[3] = ( packed >> 6 ) & 0x3; -+ -+ packed = bytes[8 + i]; -+ u8* green_ind = indices + 4*i + 16; -+ green_ind[0] = packed & 0x3; -+ green_ind[1] = ( packed >> 2 ) & 0x3; -+ green_ind[2] = ( packed >> 4 ) & 0x3; -+ green_ind[3] = ( packed >> 6 ) & 0x3; -+ } -+ -+ // store out the colours -+ for( int i = 0; i < 16; ++i ) -+ { -+ rgba[4*i] = codes[indices[i]]; -+ rgba[4*i +1] = codes[indices[i + 16] + 8]; -+ rgba[4*i +2] = 0; -+ rgba[4*i +3] = 255; -+ } -+} -+// -- GODOT end -- -+ -+ - } // namespace squish -diff --git a/thirdparty/squish/colourblock.h b/thirdparty/squish/colourblock.h -index fee2cd7c5..3cb9b7e3b 100644 ---- a/thirdparty/squish/colourblock.h -+++ b/thirdparty/squish/colourblock.h -@@ -35,6 +35,9 @@ void WriteColourBlock3( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* - void WriteColourBlock4( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* block ); - - void DecompressColour( u8* rgba, void const* block, bool isDxt1 ); -+// -- GODOT start -- -+void DecompressColourBc5( u8* rgba, void const* block ); -+// -- GODOT end -- - - } // namespace squish - -diff --git a/thirdparty/squish/squish.cpp b/thirdparty/squish/squish.cpp -index 1d22a64ad..fd11a147d 100644 ---- a/thirdparty/squish/squish.cpp -+++ b/thirdparty/squish/squish.cpp -@@ -135,7 +135,13 @@ void Decompress( u8* rgba, void const* block, int flags ) - colourBlock = reinterpret_cast< u8 const* >( block ) + 8; - - // decompress colour -- DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); -+ // -- GODOT start -- -+ //DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); -+ if(( flags & ( kBc5 ) ) != 0) -+ DecompressColourBc5( rgba, colourBlock); -+ else -+ DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); -+ // -- GODOT end -- - - // decompress alpha separately if necessary - if( ( flags & kDxt3 ) != 0 ) --- -2.13.6 - diff --git a/thirdparty/squish/colourblock.cpp b/thirdparty/squish/colourblock.cpp index 3de46382c0..3d87adaa77 100644 --- a/thirdparty/squish/colourblock.cpp +++ b/thirdparty/squish/colourblock.cpp @@ -24,6 +24,9 @@ -------------------------------------------------------------------------- */ #include "colourblock.h" +// -- Godot start -- +#include "alpha.h" +// -- Godot end -- namespace squish { @@ -214,83 +217,17 @@ void DecompressColour( u8* rgba, void const* block, bool isDxt1 ) // -- Godot start -- void DecompressColourBc5( u8* rgba, void const* block) { - // get the block bytes - u8 const* bytes = reinterpret_cast< u8 const* >( block ); - - // unpack the endpoints - u8 codes[16]; - int red_0 = bytes[0]; - int red_1 = bytes[1]; - - codes[0] = red_0; - codes[1] = red_1; - codes[6] = 0.0f; - codes[7] = 1.0f; - // generate the midpoints - if(red_0 > red_1) - { - for( int i = 2; i < 8; ++i ) - { - codes[i] = ((8-i)*red_0 + (i-1)*red_1)/7; - } - } - else - { - for( int i = 2; i < 6; ++i ) - { - codes[i] = ((6-i)*red_0 + (i-1)*red_1)/5; - } - } - - int green_0 = bytes[8]; - int green_1 = bytes[9]; - - codes[0 + 8] = green_0; - codes[1 + 8] = green_1; - codes[6 + 8] = 0.0f; - codes[7 + 8] = 1.0f; - // generate the midpoints - if(green_0 > green_1) - { - for( int i = 2; i < 8; ++i ) - { - codes[i + 8] = ((8-i)*green_0 + (i-1)*green_1)/7; - } - } - else - { - for( int i = 2; i < 6; ++i ) - { - codes[i + 8] = ((6-i)*green_0 + (i-1)*green_1)/5; - } - } - - u8 indices[32]; - for( int i = 0; i < 4; ++i ) - { - u8 packed = bytes[2 + i]; - u8* red_ind = indices + 4*i; - - red_ind[0] = packed & 0x3; - red_ind[1] = ( packed >> 2 ) & 0x3; - red_ind[2] = ( packed >> 4 ) & 0x3; - red_ind[3] = ( packed >> 6 ) & 0x3; - - packed = bytes[8 + i]; - u8* green_ind = indices + 4*i + 16; - green_ind[0] = packed & 0x3; - green_ind[1] = ( packed >> 2 ) & 0x3; - green_ind[2] = ( packed >> 4 ) & 0x3; - green_ind[3] = ( packed >> 6 ) & 0x3; + void const* rblock = block; + void const* gblock = reinterpret_cast< u8 const* >( block ) + 8; + DecompressAlphaDxt5(rgba,rblock); + for ( int i = 0; i < 16; ++i ) { + rgba[i*4] = rgba[i*4 + 3]; } - - // store out the colours - for( int i = 0; i < 16; ++i ) - { - rgba[4*i] = codes[indices[i]]; - rgba[4*i +1] = codes[indices[i + 16] + 8]; - rgba[4*i +2] = 0; - rgba[4*i +3] = 255; + DecompressAlphaDxt5(rgba,gblock); + for ( int i = 0; i < 16; ++i ) { + rgba[i*4+1] = rgba[i*4 + 3]; + rgba[i*4 + 2] = 0; + rgba[i*4 + 3] = 255; } } // -- GODOT end -- diff --git a/thirdparty/squish/godot-changes.patch b/thirdparty/squish/godot-changes.patch new file mode 100644 index 0000000000..ef7bafb4b4 --- /dev/null +++ b/thirdparty/squish/godot-changes.patch @@ -0,0 +1,102 @@ +diff --git a/thirdparty/squish/colourblock.cpp b/thirdparty/squish/colourblock.cpp +index af8b98036..3d87adaa7 100644 +--- a/thirdparty/squish/colourblock.cpp ++++ b/thirdparty/squish/colourblock.cpp +@@ -24,6 +24,9 @@ + -------------------------------------------------------------------------- */ + + #include "colourblock.h" ++// -- Godot start -- ++#include "alpha.h" ++// -- Godot end -- + + namespace squish { + +@@ -211,4 +214,23 @@ void DecompressColour( u8* rgba, void const* block, bool isDxt1 ) + } + } + ++// -- Godot start -- ++void DecompressColourBc5( u8* rgba, void const* block) ++{ ++ void const* rblock = block; ++ void const* gblock = reinterpret_cast< u8 const* >( block ) + 8; ++ DecompressAlphaDxt5(rgba,rblock); ++ for ( int i = 0; i < 16; ++i ) { ++ rgba[i*4] = rgba[i*4 + 3]; ++ } ++ DecompressAlphaDxt5(rgba,gblock); ++ for ( int i = 0; i < 16; ++i ) { ++ rgba[i*4+1] = rgba[i*4 + 3]; ++ rgba[i*4 + 2] = 0; ++ rgba[i*4 + 3] = 255; ++ } ++} ++// -- GODOT end -- ++ ++ + } // namespace squish +diff --git a/thirdparty/squish/colourblock.h b/thirdparty/squish/colourblock.h +index fee2cd7c5..3cb9b7e3b 100644 +--- a/thirdparty/squish/colourblock.h ++++ b/thirdparty/squish/colourblock.h +@@ -35,6 +35,9 @@ void WriteColourBlock3( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* + void WriteColourBlock4( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* block ); + + void DecompressColour( u8* rgba, void const* block, bool isDxt1 ); ++// -- GODOT start -- ++void DecompressColourBc5( u8* rgba, void const* block ); ++// -- GODOT end -- + + } // namespace squish + +diff --git a/thirdparty/squish/config.h b/thirdparty/squish/config.h +index 92edefe96..05f8d7259 100644 +--- a/thirdparty/squish/config.h ++++ b/thirdparty/squish/config.h +@@ -32,6 +32,26 @@ + #endif + + // Set to 1 or 2 when building squish to use SSE or SSE2 instructions. ++// -- GODOT start -- ++#ifdef _MSC_VER ++ #if defined(_M_IX86_FP) ++ #if _M_IX86_FP >= 2 ++ #define SQUISH_USE_SSE 2 ++ #elif _M_IX86_FP >= 1 ++ #define SQUISH_USE_SSE 1 ++ #endif ++ #elif defined(_M_X64) ++ #define SQUISH_USE_SSE 2 ++ #endif ++#else ++ #if defined(__SSE2__) ++ #define SQUISH_USE_SSE 2 ++ #elif defined(__SSE__) ++ #define SQUISH_USE_SSE 1 ++ #endif ++#endif ++// -- GODOT end -- ++ + #ifndef SQUISH_USE_SSE + #define SQUISH_USE_SSE 0 + #endif +diff --git a/thirdparty/squish/squish.cpp b/thirdparty/squish/squish.cpp +index 1d22a64ad..fd11a147d 100644 +--- a/thirdparty/squish/squish.cpp ++++ b/thirdparty/squish/squish.cpp +@@ -135,7 +135,13 @@ void Decompress( u8* rgba, void const* block, int flags ) + colourBlock = reinterpret_cast< u8 const* >( block ) + 8; + + // decompress colour +- DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); ++ // -- GODOT start -- ++ //DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); ++ if(( flags & ( kBc5 ) ) != 0) ++ DecompressColourBc5( rgba, colourBlock); ++ else ++ DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); ++ // -- GODOT end -- + + // decompress alpha separately if necessary + if( ( flags & kDxt3 ) != 0 ) |